From a5d97c6e274374dea770dae561047fc9f8cc37b8 Mon Sep 17 00:00:00 2001 From: Raoul Snyman Date: Sat, 19 Mar 2011 09:20:20 +0200 Subject: [PATCH 1/6] Add the .png files to the package and set OpenLP's classification. --- MANIFEST.in | 1 + setup.py | 36 +++++++++++++++++++++++++++++++++++- 2 files changed, 36 insertions(+), 1 deletion(-) diff --git a/MANIFEST.in b/MANIFEST.in index b51cd4c06..35e83e30f 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -4,6 +4,7 @@ recursive-include openlp *.csv recursive-include openlp *.html recursive-include openlp *.js recursive-include openlp *.css +recursive-include openlp *.png recursive-include documentation * recursive-include resources * recursive-include scripts * diff --git a/setup.py b/setup.py index 98e9d40fd..516da89ff 100755 --- a/setup.py +++ b/setup.py @@ -62,7 +62,41 @@ setup( description="Open source Church presentation and lyrics projection application.", long_description="""\ OpenLP (previously openlp.org) is free church presentation software, or lyrics projection software, used to display slides of songs, Bible verses, videos, images, and even presentations (if PowerPoint is installed) for church worship using a computer and a data projector.""", - classifiers=[], # Get strings from http://pypi.python.org/pypi?%3Aaction=list_classifiers + classifiers=[ + 'Development Status :: 4 - Beta', + 'Environment :: MacOS X', + 'Environment :: Win32 (MS Windows)', + 'Environment :: X11 Applications', + 'Environment :: X11 Applications :: Qt', + 'Intended Audience :: End Users/Desktop', + 'Intended Audience :: Religion', + 'License :: OSI Approved :: GNU General Public License (GPL)', + 'Natural Language :: Afrikaans', + 'Natural Language :: Dutch', + 'Natural Language :: English', + 'Natural Language :: French', + 'Natural Language :: German', + 'Natural Language :: Hungarian', + 'Natural Language :: Indonesian', + 'Natural Language :: Japanese', + 'Natural Language :: Norwegian', + 'Natural Language :: Portuguese (Brazilian)', + 'Natural Language :: Russian', + 'Natural Language :: Swedish', + 'Operating System :: MacOS :: MacOS X', + 'Operating System :: Microsoft :: Windows', + 'Operating System :: POSIX :: BSD :: FreeBSD', + 'Operating System :: POSIX :: Linux', + 'Programming Language :: Python', + 'Programming Language :: Python :: 2', + 'Topic :: Desktop Environment :: Gnome', + 'Topic :: Desktop Environment :: K Desktop Environment (KDE)', + 'Topic :: Multimedia', + 'Topic :: Multimedia :: Graphics :: Presentation', + 'Topic :: Multimedia :: Sound/Audio', + 'Topic :: Multimedia :: Video', + 'Topic :: Religion' + ], # Get strings from http://pypi.python.org/pypi?%3Aaction=list_classifiers keywords='open source church presentation lyrics projection song bible display project', author='Raoul Snyman', author_email='raoulsnyman@openlp.org', From aff94e1b8d6dcbed33db4fdd63684fb41810814e Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Sat, 19 Mar 2011 16:38:26 +0100 Subject: [PATCH 2/6] fixed Bug #738207 Fixes: https://launchpad.net/bugs/738207 --- openlp/core/ui/thememanager.py | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/openlp/core/ui/thememanager.py b/openlp/core/ui/thememanager.py index 407d0cfa8..30196b12f 100644 --- a/openlp/core/ui/thememanager.py +++ b/openlp/core/ui/thememanager.py @@ -424,12 +424,12 @@ class ThemeManager(QtGui.QWidget): unicode(translate('OpenLP.ThemeManager', 'OpenLP Themes (*.theme *.otz)'))) log.info(u'New Themes %s', unicode(files)) + if not files: + return Receiver.send_message(u'cursor_busy') - if files: - for file in files: - SettingsManager.set_last_dir( - self.settingsSection, unicode(file)) - self.unzipTheme(file, self.path) + for file in files: + SettingsManager.set_last_dir(self.settingsSection, unicode(file)) + self.unzipTheme(file, self.path) self.loadThemes() Receiver.send_message(u'cursor_normal') @@ -502,16 +502,16 @@ class ThemeManager(QtGui.QWidget): def unzipTheme(self, filename, dir): """ Unzip the theme, remove the preview file if stored - Generate a new preview fileCheck the XML theme version and upgrade if + Generate a new preview file. Check the XML theme version and upgrade if necessary. """ log.debug(u'Unzipping theme %s', filename) filename = unicode(filename) zip = None outfile = None + filexml = None try: zip = zipfile.ZipFile(filename) - filexml = None themename = None for file in zip.namelist(): ucsfile = file_is_unicode(file) @@ -562,7 +562,9 @@ class ThemeManager(QtGui.QWidget): if filexml: theme = self._createThemeFromXml(filexml, self.path) self.generateAndSaveImage(dir, themename, theme) - else: + # Only show the error message, when IOError was not raised (in this + # case the error message has already been show). + elif zip is not None: critical_error_message_box( translate('OpenLP.ThemeManager', 'Validation Error'), translate('OpenLP.ThemeManager', From 4c4dfcc6c557c4324b9927fb5d7608fa3ee0205c Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Sat, 19 Mar 2011 16:43:25 +0100 Subject: [PATCH 3/6] fixed BadZipfile exception --- openlp/core/ui/thememanager.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openlp/core/ui/thememanager.py b/openlp/core/ui/thememanager.py index 30196b12f..39e72f763 100644 --- a/openlp/core/ui/thememanager.py +++ b/openlp/core/ui/thememanager.py @@ -547,7 +547,7 @@ class ThemeManager(QtGui.QWidget): else: outfile = open(fullpath, u'wb') outfile.write(zip.read(file)) - except (IOError, NameError): + except (IOError, NameError, zipfile.BadZipfile): critical_error_message_box( translate('OpenLP.ThemeManager', 'Validation Error'), translate('OpenLP.ThemeManager', 'File is not a valid theme.')) From a12dd5722cf9ddb333d4342929fe7ed6e5110028 Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Sat, 19 Mar 2011 16:51:03 +0100 Subject: [PATCH 4/6] typo --- openlp/core/ui/thememanager.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openlp/core/ui/thememanager.py b/openlp/core/ui/thememanager.py index 39e72f763..487798f5b 100644 --- a/openlp/core/ui/thememanager.py +++ b/openlp/core/ui/thememanager.py @@ -563,7 +563,7 @@ class ThemeManager(QtGui.QWidget): theme = self._createThemeFromXml(filexml, self.path) self.generateAndSaveImage(dir, themename, theme) # Only show the error message, when IOError was not raised (in this - # case the error message has already been show). + # case the error message has already been shown). elif zip is not None: critical_error_message_box( translate('OpenLP.ThemeManager', 'Validation Error'), From a43bd19bd9c9790c1db6966dd4e12a4aef66b33b Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Sat, 19 Mar 2011 17:06:04 +0100 Subject: [PATCH 5/6] convert verse order --- openlp/core/lib/serviceitem.py | 8 ++++--- openlp/plugins/songs/lib/__init__.py | 21 ++++++++++++++++++- openlp/plugins/songs/lib/mediaitem.py | 2 +- openlp/plugins/songs/lib/sofimport.py | 2 +- openlp/plugins/songs/lib/songimport.py | 2 +- .../plugins/songs/lib/songshowplusimport.py | 2 +- 6 files changed, 29 insertions(+), 8 deletions(-) diff --git a/openlp/core/lib/serviceitem.py b/openlp/core/lib/serviceitem.py index b360ab13d..a26d580df 100644 --- a/openlp/core/lib/serviceitem.py +++ b/openlp/core/lib/serviceitem.py @@ -183,8 +183,9 @@ class ServiceItem(object): else: log.error(u'Invalid value renderer :%s' % self.service_item_type) self.title = clean_tags(self.title) - # The footer should never be None, but to be compatible with older - # release of OpenLP, we have to correct this to avoid tracebacks. + # The footer should never be None, but to be compatible with a few + # nightly between 1.9.4 and 1.9.5, we have to correct this to avoid + # tracebacks. if self.raw_footer is None: self.raw_footer = [] self.foot_text = \ @@ -447,4 +448,5 @@ class ServiceItem(object): elif not start and end: return end else: - return u'%s : %s' % (start, end) \ No newline at end of file + return u'%s : %s' % (start, end) + diff --git a/openlp/plugins/songs/lib/__init__.py b/openlp/plugins/songs/lib/__init__.py index 1c1957b9e..b9dcd1e96 100644 --- a/openlp/plugins/songs/lib/__init__.py +++ b/openlp/plugins/songs/lib/__init__.py @@ -275,14 +275,33 @@ def clean_song(manager, song): sxml = SongXML() # Rebuild the song's verses, to remove any wrong verse names (for example # translated ones), which might have been added prior to 1.9.5. + # List for later comparison. + compare_order = [] for verse in verses: + type = VerseType.Tags[VerseType.from_loose_input(verse[0][u'type'])] sxml.add_verse_to_lyrics( - VerseType.Tags[VerseType.from_loose_input(verse[0][u'type'])], + type, verse[0][u'label'], verse[1], verse[0][u'lang'] if verse[0].has_key(u'lang') else None ) + compare_order.append((u'%s%s' % (type, verse[0][u'label'])).upper()) song.lyrics = unicode(sxml.extract_xml(), u'utf-8') + # Rebuild the verse order, to convert translated verse tags, which might + # have been added prior to 1.9.5. + order = song.verse_order.strip().split() + new_order = [] + for verse_def in order: + new_order.append((u'%s%s' % ( + VerseType.Tags[VerseType.from_loose_input(verse_def[0])], + verse_def[1:])).upper() + ) + song.verse_order = u' '.join(new_order) + # Check if the verse order contains tags for verses which do not exist. + for order in new_order: + if order not in compare_order: + song.verse_order = u'' + break # The song does not have any author, add one. if not song.authors: name = SongStrings.AuthorUnknown diff --git a/openlp/plugins/songs/lib/mediaitem.py b/openlp/plugins/songs/lib/mediaitem.py index 57e56aaf6..b95bff3dc 100644 --- a/openlp/plugins/songs/lib/mediaitem.py +++ b/openlp/plugins/songs/lib/mediaitem.py @@ -461,5 +461,5 @@ class SongMediaItem(MediaManagerItem): """ Locale aware collation of song titles """ - return locale.strcoll(unicode(song_1.title.lower()), + return locale.strcoll(unicode(song_1.title.lower()), unicode(song_2.title.lower())) diff --git a/openlp/plugins/songs/lib/sofimport.py b/openlp/plugins/songs/lib/sofimport.py index 37f3136e9..49ed5b569 100644 --- a/openlp/plugins/songs/lib/sofimport.py +++ b/openlp/plugins/songs/lib/sofimport.py @@ -309,7 +309,7 @@ class SofImport(OooImport): self.add_verse(lyrics, tag) if not self.is_chorus and u'C1' in self.verse_order_list_generated: self.verse_order_list_generated.append(u'C1') - self.verse_order_list_generated_useful = True + self.verse_order_list_generated_useful = True def uncap_text(self, text): """ diff --git a/openlp/plugins/songs/lib/songimport.py b/openlp/plugins/songs/lib/songimport.py index ea7a30e2f..c14354dcb 100644 --- a/openlp/plugins/songs/lib/songimport.py +++ b/openlp/plugins/songs/lib/songimport.py @@ -225,7 +225,7 @@ class SongImport(QtCore.QObject): self.verse_counts[verse_def[0]] = int(verse_def[1:]) self.verses.append([verse_def, verse_text.rstrip(), lang]) self.verse_order_list_generated.append(verse_def) - + def repeat_verse(self): """ Repeat the previous verse in the verse order diff --git a/openlp/plugins/songs/lib/songshowplusimport.py b/openlp/plugins/songs/lib/songshowplusimport.py index d69160faa..363bfaa98 100644 --- a/openlp/plugins/songs/lib/songshowplusimport.py +++ b/openlp/plugins/songs/lib/songshowplusimport.py @@ -131,7 +131,7 @@ class SongShowPlusImport(SongImport): lengthDescriptor, = struct.unpack("B", songData.read(1)) data = songData.read(lengthDescriptor) if blockKey == TITLE: - self.title = unicode(data, u'cp1252') + self.title = unicode(data, u'cp1252') elif blockKey == AUTHOR: authors = data.split(" / ") for author in authors: From 05b699520f6c4315d830576673cbbc55fe5e7d30 Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Sat, 19 Mar 2011 17:11:52 +0100 Subject: [PATCH 6/6] fixed comment --- openlp/core/lib/serviceitem.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/openlp/core/lib/serviceitem.py b/openlp/core/lib/serviceitem.py index a26d580df..d446edc75 100644 --- a/openlp/core/lib/serviceitem.py +++ b/openlp/core/lib/serviceitem.py @@ -184,8 +184,8 @@ class ServiceItem(object): log.error(u'Invalid value renderer :%s' % self.service_item_type) self.title = clean_tags(self.title) # The footer should never be None, but to be compatible with a few - # nightly between 1.9.4 and 1.9.5, we have to correct this to avoid - # tracebacks. + # nightly builds between 1.9.4 and 1.9.5, we have to correct this to + # avoid tracebacks. if self.raw_footer is None: self.raw_footer = [] self.foot_text = \