Update OpenLPv2 song importer

bzr-revno: 995
This commit is contained in:
Jon Tibble 2010-08-27 19:50:08 +01:00
commit 5cfdaf3b77
3 changed files with 36 additions and 15 deletions

View File

@ -302,8 +302,8 @@ class ImportWizardForm(QtGui.QWizard, Ui_SongImportWizard):
Stop the import on pressing the cancel button.
"""
log.debug('Cancel button pressed!')
if self.currentId() == 3:
Receiver.send_message(u'song_stop_import')
if self.currentId() == 2:
Receiver.send_message(u'songs_stop_import')
def onCurrentIdChanged(self, id):
if id == 2:

View File

@ -75,18 +75,17 @@ class OpenLPSongImport(SongImport):
The :class:`OpenLPSongImport` class provides OpenLP with the ability to
import song databases from other installations of OpenLP.
"""
def __init__(self, master_manager, **kwargs):
def __init__(self, manager, **kwargs):
"""
Initialise the import.
``master_manager``
``manager``
The song manager for the running OpenLP installation.
``source_db``
The database providing the data to import.
"""
SongImport.__init__(self, master_manager)
self.master_manager = master_manager
SongImport.__init__(self, manager)
self.import_source = u'sqlite:///%s' % kwargs[u'filename']
log.debug(self.import_source)
self.source_session = None
@ -145,7 +144,12 @@ class OpenLPSongImport(SongImport):
mapper(OldTopic, source_topics_table)
source_songs = self.source_session.query(OldSong).all()
song_total = len(source_songs)
self.import_wizard.importProgressBar.setMaximum(song_total)
song_count = 1
for song in source_songs:
self.import_wizard.incrementProgressBar(
u'Importing song %s of %s' % (song_count, song_total))
new_song = Song()
new_song.title = song.title
if has_media_files:
@ -167,7 +171,7 @@ class OpenLPSongImport(SongImport):
new_song.ccli_number = song.ccli_number
if song.authors:
for author in song.authors:
existing_author = self.master_manager.get_object_filtered(
existing_author = self.manager.get_object_filtered(
Author, Author.display_name == author.display_name)
if existing_author:
new_song.authors.append(existing_author)
@ -177,7 +181,7 @@ class OpenLPSongImport(SongImport):
last_name=author.last_name,
display_name=author.display_name))
else:
au = self.master_manager.get_object_filtered(Author,
au = self.manager.get_object_filtered(Author,
Author.display_name == u'Author Unknown')
if au:
new_song.authors.append(au)
@ -185,7 +189,7 @@ class OpenLPSongImport(SongImport):
new_song.authors.append(Author.populate(
display_name=u'Author Unknown'))
if song.book:
existing_song_book = self.master_manager.get_object_filtered(
existing_song_book = self.manager.get_object_filtered(
Book, Book.name == song.book.name)
if existing_song_book:
new_song.book = existing_song_book
@ -194,7 +198,7 @@ class OpenLPSongImport(SongImport):
publisher=song.book.publisher)
if song.topics:
for topic in song.topics:
existing_topic = self.master_manager.get_object_filtered(
existing_topic = self.manager.get_object_filtered(
Topic, Topic.name == topic.name)
if existing_topic:
new_song.topics.append(existing_topic)
@ -204,12 +208,16 @@ class OpenLPSongImport(SongImport):
# if song.media_files:
# for media_file in song.media_files:
# existing_media_file = \
# self.master_manager.get_object_filtered(MediaFile,
# self.manager.get_object_filtered(MediaFile,
# MediaFile.file_name == media_file.file_name)
# if existing_media_file:
# new_song.media_files.append(existing_media_file)
# else:
# new_song.media_files.append(MediaFile.populate(
# file_name=media_file.file_name))
self.master_manager.save_object(new_song)
self.manager.save_object(new_song)
song_count += 1
if self.stop_import_flag:
return False
engine.dispose()
return True

View File

@ -24,14 +24,18 @@
# Temple Place, Suite 330, Boston, MA 02111-1307 USA #
###############################################################################
import logging
import re
from PyQt4 import QtCore
from openlp.core.lib import translate
from openlp.core.lib import Receiver, translate
from openlp.plugins.songs.lib import VerseType
from openlp.plugins.songs.lib.db import Song, Author, Topic, Book
from openlp.plugins.songs.lib.xml import SongXMLBuilder
class SongImport(object):
log = logging.getLogger(__name__)
class SongImport(QtCore.QObject):
"""
Helper class for import a song from a third party source into OpenLP
@ -39,7 +43,6 @@ class SongImport(object):
whether the authors etc already exist and add them or refer to them
as necessary
"""
def __init__(self, manager):
"""
Initialise and create defaults for properties
@ -48,6 +51,7 @@ class SongImport(object):
database access is performed
"""
self.manager = manager
self.stop_import_flag = False
self.title = u''
self.song_number = u''
self.alternate_title = u''
@ -67,6 +71,15 @@ class SongImport(object):
'SongsPlugin.SongImport', 'copyright'))
self.copyright_symbol = unicode(translate(
'SongsPlugin.SongImport', '\xa9'))
QtCore.QObject.connect(Receiver.get_receiver(),
QtCore.SIGNAL(u'songs_stop_import'), self.stop_import)
def stop_import(self):
"""
Sets the flag for importers to stop their import
"""
log.debug(u'Stopping songs import')
self.stop_import_flag = True
def register(self, import_wizard):
self.import_wizard = import_wizard