Added GUI for importing OpenSong

This commit is contained in:
Martin Thompson 2010-06-30 22:19:18 +01:00
parent 02fd6fe4da
commit 38ccc21f89
4 changed files with 53 additions and 12 deletions

View File

@ -95,6 +95,10 @@ class OpenSongImport:
self.song = None
def do_import(self, filename, commit=True):
"""
Import either a single opensong file, or a zipfile containing multiple opensong files
If the commit parameter is set False, the import will not be committed to the database (useful for test scripts)
"""
ext=os.path.splitext(filename)[1]
if ext.lower() == ".zip":
log.info('Zipfile found %s', filename)
@ -116,7 +120,7 @@ class OpenSongImport:
self.finish()
def do_import_file(self, file):
"""
Process the OpenSong file
Process the OpenSong file - pass in a file-like object, not a filename
"""
self.song = SongImport(self.songmanager)
tree = objectify.parse(file)
@ -209,8 +213,7 @@ class OpenSongImport:
order = our_verse_order
for tag in order:
if not versetags.has_key(tag):
print u'Got order', tag, u'but not in versetags, skipping'
raise OpenSongImportError # xxx keep error, or just warn?
log.warn(u'Got order %s but not in versetags, skipping', tag)
else:
self.song.verse_order_list.append(tag)
def finish(self):

View File

@ -302,8 +302,7 @@ class SongImport(object):
song.theme_name = self.theme_name
song.ccli_number = self.ccli_number
for authortext in self.authors:
filter_string = u'display_name=%s' % authortext
author = self.manager.get_object_filtered(Author, filter_string)
author = self.manager.get_object_filtered(Author, Author.display_name == authortext)
if author is None:
author = Author()
author.display_name = authortext
@ -312,8 +311,7 @@ class SongImport(object):
self.manager.save_object(author)
song.authors.append(author)
if self.song_book_name:
filter_string = u'name=%s' % self.song_book_name
song_book = self.manager.get_object_filtered(Book, filter_string)
song_book = self.manager.get_object_filtered(Book, Book.name == self.song_book_name)
if song_book is None:
song_book = Book()
song_book.name = self.song_book_name
@ -321,8 +319,7 @@ class SongImport(object):
self.manager.save_object(song_book)
song.song_book_id = song_book.id
for topictext in self.topics:
filter_string = u'name=%s' % topictext
topic = self.manager.get_object_filtered(Topic, filter_string)
topic = self.manager.get_object_filtered(Topic.name == topictext)
if topic is None:
topic = Topic()
topic.name = topictext

View File

@ -10,8 +10,8 @@ def opensong_import_lots():
ziploc=u'/home/mjt/openlp/OpenSong_Data/'
files=[]
files=['test.opensong.zip']
# files.extend(glob(ziploc+u'Songs.zip'))
# files.extend(glob(ziploc+u'SOF.zip'))
files.extend(glob(ziploc+u'Songs.zip'))
files.extend(glob(ziploc+u'SOF.zip'))
# files.extend(glob(ziploc+u'spanish_songs_for_opensong.zip'))
# files.extend(glob(ziploc+u'opensong_*.zip'))
errfile=codecs.open(u'import_lots_errors.txt', u'w', u'utf8')
@ -47,7 +47,7 @@ def opensong_import_lots():
print_exc(3)
sys.exit(1)
# continue
# o.finish()
o.finish()
print "OK"
#os.unlink(filename)
# o.song.print_song()

View File

@ -38,6 +38,8 @@ try:
except ImportError:
OOo_available = False
from openlp.plugins.songs.lib import OpenSongImport
log = logging.getLogger(__name__)
class SongsPlugin(Plugin):
@ -143,6 +145,25 @@ class SongsPlugin(Plugin):
QtCore.SIGNAL(u'triggered()'), self.onImportSofItemClick)
QtCore.QObject.connect(self.ImportOooItem,
QtCore.SIGNAL(u'triggered()'), self.onImportOooItemClick)
# OpenSong import menu item - will be removed and the
# functionality will be contained within the import wizard
self.ImportOpenSongItem = QtGui.QAction(import_menu)
self.ImportOpenSongItem.setObjectName(u'ImportOpenSongItem')
self.ImportOpenSongItem.setText(
translate('SongsPlugin',
'OpenSong (temp menu item)'))
self.ImportOpenSongItem.setToolTip(
translate('SongsPlugin',
'Import songs from OpenSong files' +
'(either raw text or ZIPfiles)'))
self.ImportOpenSongItem.setStatusTip(
translate('SongsPlugin',
'Import songs from OpenSong files' +
'(either raw text or ZIPfiles)'))
import_menu.addAction(self.ImportOpenSongItem)
QtCore.QObject.connect(self.ImportOpenSongItem,
QtCore.SIGNAL(u'triggered()'), self.onImportOpenSongItemClick)
def add_export_menu_item(self, export_menu):
"""
@ -183,6 +204,26 @@ class SongsPlugin(Plugin):
QtGui.QMessageBox.Ok)
Receiver.send_message(u'songs_load_list')
def onImportOpenSongItemClick(self):
filenames = QtGui.QFileDialog.getOpenFileNames(
None, translate('SongsPlugin',
'Open OpenSong file'),
u'', u'OpenSong file (*. *.zip *.ZIP)')
try:
for filename in filenames:
importer = OpenSongImport(self.manager)
importer.do_import(unicode(filename))
except:
log.exception('Could not import OpenSong file')
QtGui.QMessageBox.critical(None,
translate('SongsPlugin',
'Import Error'),
translate('SongsPlugin',
'Error importing OpenSong file'),
QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Ok),
QtGui.QMessageBox.Ok)
Receiver.send_message(u'songs_load_list')
def onImportOooItemClick(self):
filenames = QtGui.QFileDialog.getOpenFileNames(
None, translate('SongsPlugin',