forked from openlp/openlp
Finally done the openlp.org 1.x song importer.
This commit is contained in:
parent
5e61bf938e
commit
f82513f11d
@ -58,40 +58,56 @@ class OpenLP1SongImport(SongImport):
|
||||
"""
|
||||
Run the import for an openlp.org 1.x song database.
|
||||
"""
|
||||
# Connect to the database
|
||||
connection = sqlite.connect(self.import_source)
|
||||
cursor = connection.cursor()
|
||||
cursor.execute(u'SELECT COUNT(authorid) FROM authors')
|
||||
count = int(cursor.fetchone()[0])
|
||||
# Count the number of records we need to import, for the progress bar
|
||||
cursor.execute(u'SELECT COUNT(songid) FROM songs')
|
||||
count = int(cursor.fetchone()[0])
|
||||
success = True
|
||||
self.import_wizard.importProgressBar.setMaximum(count)
|
||||
|
||||
old_cursor.execute(u'SELECT authorid AS id, authorname AS displayname FROM authors')
|
||||
rows = old_cursor.fetchall()
|
||||
if not debug and verbose:
|
||||
print 'done.'
|
||||
author_map = {}
|
||||
for row in rows:
|
||||
display_name = unicode(row[1], u'cp1252')
|
||||
names = display_name.split(u' ')
|
||||
first_name = names[0]
|
||||
last_name = u' '.join(names[1:])
|
||||
if last_name is None:
|
||||
last_name = u''
|
||||
sql_insert = u'INSERT INTO authors '\
|
||||
'(id, first_name, last_name, display_name) '\
|
||||
'VALUES (NULL, ?, ?, ?)'
|
||||
sql_params = (first_name, last_name, display_name)
|
||||
if debug:
|
||||
print '...', display_sql(sql_insert, sql_params)
|
||||
elif verbose:
|
||||
print '... importing "%s"' % display_name
|
||||
new_cursor.execute(sql_insert, sql_params)
|
||||
author_map[row[0]] = new_cursor.lastrowid
|
||||
if debug:
|
||||
print ' >>> authors.authorid =', row[0], 'authors.id =', author_map[row[0]]
|
||||
|
||||
|
||||
cursor.execute(u'SELECT songid AS id, songtitle AS title, '
|
||||
u'lyrics || \'\' AS lyrics, copyrightinfo AS copyright FROM songs')
|
||||
rows = cursor.fetchall()
|
||||
# Import the songs
|
||||
cursor.execute(u'SELECT songid, songtitle, lyrics || \'\' AS lyrics, '
|
||||
u'copyrightinfo FROM songs')
|
||||
songs = cursor.fetchall()
|
||||
for song in songs:
|
||||
self.set_defaults()
|
||||
if self.stop_import_flag:
|
||||
success = False
|
||||
break
|
||||
song_id = song[0]
|
||||
title = unicode(song[1], u'cp1252')
|
||||
lyrics = unicode(song[2], u'cp1252')
|
||||
copyright = unicode(song[3], u'cp1252')
|
||||
self.import_wizard.incrementProgressBar(
|
||||
unicode(translate('SongsPlugin.ImportWizardForm',
|
||||
'Importing %s...')) % title)
|
||||
self.title = title
|
||||
self.process_song_text(lyrics)
|
||||
self.add_copyright(copyright)
|
||||
cursor.execute(u'SELECT displayname FROM authors a '
|
||||
u'JOIN songauthors sa ON a.authorid = sa.authorid '
|
||||
u'WHERE sa.songid = %s' % song_id)
|
||||
authors = cursor.fetchall()
|
||||
for author in authors:
|
||||
if self.stop_import_flag:
|
||||
success = False
|
||||
break
|
||||
self.parse_author(unicode(author[0], u'cp1252'))
|
||||
if self.stop_import_flag:
|
||||
success = False
|
||||
break
|
||||
cursor.execute(u'SELECT fulltrackname FROM tracks t '
|
||||
u'JOIN songtracks st ON t.trackid = st.trackid '
|
||||
u'WHERE st.songid = %s ORDER BY st.listindex' % song_id)
|
||||
tracks = cursor.fetchall()
|
||||
for track in tracks:
|
||||
if self.stop_import_flag:
|
||||
success = False
|
||||
break
|
||||
self.add_media_file(unicode(track[0], u'cp1252'))
|
||||
if self.stop_import_flag:
|
||||
success = False
|
||||
break
|
||||
self.finish()
|
||||
return success
|
||||
|
@ -116,10 +116,11 @@ class OpenSongImport(SongImport):
|
||||
opensong files. If `self.commit` is set False, the import will not be
|
||||
committed to the database (useful for test scripts).
|
||||
"""
|
||||
success = False
|
||||
success = True
|
||||
self.import_wizard.importProgressBar.setMaximum(len(self.filenames))
|
||||
for filename in self.filenames:
|
||||
if self.stop_import_flag:
|
||||
success = False
|
||||
break
|
||||
ext = os.path.splitext(filename)[1]
|
||||
if ext.lower() == u'.zip':
|
||||
@ -130,24 +131,28 @@ class OpenSongImport(SongImport):
|
||||
len(z.infolist()))
|
||||
for song in z.infolist():
|
||||
if self.stop_import_flag:
|
||||
success = False
|
||||
break
|
||||
parts = os.path.split(song.filename)
|
||||
if parts[-1] == u'':
|
||||
#No final part => directory
|
||||
continue
|
||||
self.import_wizard.incrementProgressBar(u'Importing %s...' \
|
||||
% parts[-1])
|
||||
self.import_wizard.incrementProgressBar(
|
||||
unicode(translate('SongsPlugin.ImportWizardForm',
|
||||
'Importing %s...')) % parts[-1])
|
||||
songfile = z.open(song)
|
||||
self.do_import_file(songfile)
|
||||
if self.commit:
|
||||
self.finish()
|
||||
self.set_defaults()
|
||||
if self.stop_import_flag:
|
||||
success = False
|
||||
break
|
||||
else:
|
||||
log.info('Direct import %s', filename)
|
||||
self.import_wizard.incrementProgressBar(u'Importing %s...' \
|
||||
% os.path.split(filename)[-1])
|
||||
self.import_wizard.incrementProgressBar(
|
||||
unicode(translate('SongsPlugin.ImportWizardForm',
|
||||
'Importing %s...')) % os.path.split(filename)[-1])
|
||||
file = open(filename)
|
||||
self.do_import_file(file)
|
||||
if self.commit:
|
||||
@ -155,7 +160,7 @@ class OpenSongImport(SongImport):
|
||||
self.set_defaults()
|
||||
if not self.commit:
|
||||
self.finish()
|
||||
|
||||
return success
|
||||
|
||||
def do_import_file(self, file):
|
||||
"""
|
||||
|
@ -30,7 +30,7 @@ from PyQt4 import QtCore
|
||||
|
||||
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.db import Song, Author, Topic, Book, MediaFile
|
||||
from openlp.plugins.songs.lib.xml import SongXMLBuilder
|
||||
|
||||
log = logging.getLogger(__name__)
|
||||
@ -66,6 +66,7 @@ class SongImport(QtCore.QObject):
|
||||
self.ccli_number = u''
|
||||
self.authors = []
|
||||
self.topics = []
|
||||
self.media_files = []
|
||||
self.song_book_name = u''
|
||||
self.song_book_pub = u''
|
||||
self.verse_order_list = []
|
||||
@ -76,7 +77,7 @@ class SongImport(QtCore.QObject):
|
||||
'SongsPlugin.SongImport', 'copyright'))
|
||||
self.copyright_symbol = unicode(translate(
|
||||
'SongsPlugin.SongImport', '\xa9'))
|
||||
|
||||
|
||||
def stop_import(self):
|
||||
"""
|
||||
Sets the flag for importers to stop their import
|
||||
@ -184,6 +185,14 @@ class SongImport(QtCore.QObject):
|
||||
return
|
||||
self.authors.append(author)
|
||||
|
||||
def add_media_file(self, filename):
|
||||
"""
|
||||
Add a media file to the list
|
||||
"""
|
||||
if filename in self.media_files:
|
||||
return
|
||||
self.media_files.append(filename)
|
||||
|
||||
def add_verse(self, verse, versetag=None):
|
||||
"""
|
||||
Add a verse. This is the whole verse, lines split by \n
|
||||
@ -279,11 +288,16 @@ class SongImport(QtCore.QObject):
|
||||
for authortext in self.authors:
|
||||
author = self.manager.get_object_filtered(Author,
|
||||
Author.display_name == authortext)
|
||||
if author is None:
|
||||
if not author:
|
||||
author = Author.populate(display_name = authortext,
|
||||
last_name=authortext.split(u' ')[-1],
|
||||
first_name=u' '.join(authortext.split(u' ')[:-1]))
|
||||
song.authors.append(author)
|
||||
for filename in self.media_files:
|
||||
media_file = self.manager.get_object_filtered(MediaFile,
|
||||
MediaFile.file_name == filename)
|
||||
if not media_file:
|
||||
song.media_files.append(MediaFile.populate(file_name=filename))
|
||||
if self.song_book_name:
|
||||
song_book = self.manager.get_object_filtered(Book,
|
||||
Book.name == self.song_book_name)
|
||||
|
Loading…
Reference in New Issue
Block a user