forked from openlp/openlp
Added GUI for importing OpenSong
This commit is contained in:
parent
02fd6fe4da
commit
38ccc21f89
@ -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):
|
||||
|
@ -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
|
||||
|
@ -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()
|
||||
|
@ -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',
|
||||
|
Loading…
Reference in New Issue
Block a user