From 735ae409960daa871971959c6aa830e891335c6b Mon Sep 17 00:00:00 2001 From: M2j Date: Sat, 19 Jun 2010 23:54:53 +0200 Subject: [PATCH 1/7] single character verse entries --- openlp/plugins/songs/forms/editsongform.py | 130 ++++++++++----------- openlp/plugins/songs/lib/mediaitem.py | 6 +- openlp/plugins/songs/lib/songimport.py | 22 +--- 3 files changed, 73 insertions(+), 85 deletions(-) diff --git a/openlp/plugins/songs/forms/editsongform.py b/openlp/plugins/songs/forms/editsongform.py index b7d6ffc7f..62fda42a7 100644 --- a/openlp/plugins/songs/forms/editsongform.py +++ b/openlp/plugins/songs/forms/editsongform.py @@ -30,6 +30,7 @@ from PyQt4 import QtCore, QtGui from openlp.core.lib import SongXMLBuilder, SongXMLParser, Receiver, translate from openlp.plugins.songs.forms import EditVerseForm +from openlp.plugins.songs.lib import VerseType from openlp.plugins.songs.lib.models import Song, Author, Topic, Book from editsongdialog import Ui_EditSongDialog @@ -90,16 +91,8 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog): self.parent.parent.render_manager.theme_manager.onAddTheme) QtCore.QObject.connect(self.MaintenanceButton, QtCore.SIGNAL(u'clicked()'), self.onMaintenanceButtonClicked) - QtCore.QObject.connect(self.TitleEditItem, - QtCore.SIGNAL(u'editingFinished()'), self.onTitleEditItemLostFocus) - QtCore.QObject.connect(self.CCLNumberEdit, - QtCore.SIGNAL(u'lostFocus()'), self.onCCLNumberEditLostFocus) QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'theme_update_list'), self.loadThemes) - QtCore.QObject.connect(self.CommentsEdit, - QtCore.SIGNAL(u'lostFocus()'), self.onCommentsEditLostFocus) - QtCore.QObject.connect(self.VerseOrderEdit, - QtCore.SIGNAL(u'lostFocus()'), self.onVerseOrderEditLostFocus) self.previewButton = QtGui.QPushButton() self.previewButton.setObjectName(u'previewButton') self.previewButton.setText( @@ -247,7 +240,8 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog): self.VerseListWidget.setRowCount( self.VerseListWidget.rowCount() + 1) item = QtGui.QTableWidgetItem(verse) - variant = u'Verse:%s' % unicode(count + 1) + variant = u'%s:%s' % \ + (VerseType.to_string(VerseType.Verse), unicode(count + 1)) item.setData(QtCore.Qt.UserRole, QtCore.QVariant(variant)) self.VerseListWidget.setItem(count, 0, item) self.VerseListWidget.resizeRowsToContents() @@ -519,42 +513,63 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog): if len(self.TitleEditItem.displayText()) == 0: self.SongTabWidget.setCurrentIndex(0) self.TitleEditItem.setFocus() - return False, translate(u'SongsPlugin.EditSongForm', + return u'failed', translate(u'SongsPlugin.EditSongForm', u'You need to enter a song title.') if self.VerseListWidget.rowCount() == 0: self.SongTabWidget.setCurrentIndex(0) self.VerseListWidget.setFocus() - return False, translate(u'SongsPlugin.EditSongForm', + return u'failed', translate('uSongsPlugin.EditSongForm', u'You need to enter some verses.') if self.AuthorsListView.count() == 0: self.SongTabWidget.setCurrentIndex(1) self.AuthorsListView.setFocus() - #split the verse list by space and mark lower case for testing - taglist = unicode(translate(u'SongsPlugin.EditSongForm', u' bitpeovc')) - for verse in unicode(self.VerseOrderEdit.text()).lower().split(u' '): - if len(verse) > 1: - if taglist.find(verse[0:1]) > -1 \ - and verse[1:].isdigit(): - pass + answer = QtGui.QMessageBox.warning(self, + translate(u'SongsPlugin.EditSongForm', u'Warning'), + translate('SongsPlugin.EditSongForm', + 'You have set no author.\n' + 'Do you want to add now a author?'), + QtGui.QMessageBox.Yes | QtGui.QMessageBox.No) + if answer == QtGui.QMessageBox.Yes: + return u'aborted', u'' + if self.song.verse_order: + order = [] + order_names = self.song.verse_order.split(u' ') + for item in order_names: + if len(item) == 1: + order.append(item.lower() + u'1') else: + order.append(item.lower()) + verses = [] + verse_names = [] + for index in range (0, self.VerseListWidget.rowCount()): + verse = self.VerseListWidget.item(index, 0) + verse = unicode(verse.data(QtCore.Qt.UserRole).toString()) + if verse not in verse_names: + verses.append( + re.sub(r'(.)[^:]*:(.*)', r'\1\2', verse.lower())) + verse_names.append(verse) + for count, item in enumerate(order): + if item not in verses: self.SongTabWidget.setCurrentIndex(0) self.VerseOrderEdit.setFocus() - return False, translate(u'SongsPlugin.EditSongForm', - u'Invalid verse entry, values must be I,B,T,P,E,O,V,C ' - u'followed by a number') - return True, u'' - - def onTitleEditItemLostFocus(self): - self.song.title = unicode(self.TitleEditItem.text()) - - def onVerseOrderEditLostFocus(self): - self.song.verse_order = unicode(self.VerseOrderEdit.text()) - - def onCommentsEditLostFocus(self): - self.song.comments = unicode(self.CommentsEdit.text()) - - def onCCLNumberEditLostFocus(self): - self.song.ccli_number = self.CCLNumberEdit.text() + return u'failed', unicode(translate( + 'SongsPlugin.EditSongForm', 'The verse order is ' + 'invalid. There is no verse corresponding to %s.')) % \ + order_names[count] + for count, verse in enumerate(verses): + if verse not in order: + self.SongTabWidget.setCurrentIndex(0) + self.VerseOrderEdit.setFocus() + answer = QtGui.QMessageBox.warning(self, + translate(u'SongsPlugin.EditSongForm', u'Warning'), + unicode(translate('SongsPlugin.EditSongForm', + '%s is not addressed in the verse order.\n' + 'Do you want to save anyhow?')) % \ + order_names[count].replace(u':', u' '), + QtGui.QMessageBox.Yes | QtGui.QMessageBox.No) + if answer == QtGui.QMessageBox.No: + return u'aborted', u'' + return u'passed', u'' def onCopyrightInsertButtonTriggered(self): text = self.CopyrightEditItem.text() @@ -590,19 +605,19 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog): self.close() def saveSong(self): - valid, message = self._validate_song() - if not valid: - QtGui.QMessageBox.critical( - self, translate(u'SongsPlugin.EditSongForm', u'Error'), message, - QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Ok)) - return False self.song.title = unicode(self.TitleEditItem.text()) self.song.copyright = unicode(self.CopyrightEditItem.text()) - self.song.search_title = unicode(self.TitleEditItem.text()) + \ - u'@'+ unicode(self.AlternativeEdit.text()) + self.song.search_title = self.song.title + u'@' + \ + unicode(self.AlternativeEdit.text()) self.song.comments = unicode(self.CommentsEdit.toPlainText()) self.song.verse_order = unicode(self.VerseOrderEdit.text()) self.song.ccli_number = unicode(self.CCLNumberEdit.text()) + status, message = self._validate_song() + if status == u'failed': + QtGui.QMessageBox.critical(self, + translate(u'SongsPlugin.EditSongForm', u'Error'), message) + if status != u'passed': + return False self.processLyrics() self.processTitle() self.songmanager.save_song(self.song) @@ -614,24 +629,15 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog): sxml = SongXMLBuilder() sxml.new_document() sxml.add_lyrics_to_song() - text = u' ' + text = u'' for i in range (0, self.VerseListWidget.rowCount()): item = self.VerseListWidget.item(i, 0) verseId = unicode(item.data(QtCore.Qt.UserRole).toString()) bits = verseId.split(u':') sxml.add_verse_to_lyrics(bits[0], bits[1], unicode(item.text())) - text = text + unicode(self.VerseListWidget.item(i, 0).text()) \ - + u' ' - text = text.replace(u'\'', u'') - text = text.replace(u',', u'') - text = text.replace(u';', u'') - text = text.replace(u':', u'') - text = text.replace(u'(', u'') - text = text.replace(u')', u'') - text = text.replace(u'{', u'') - text = text.replace(u'}', u'') - text = text.replace(u'?', u'') - self.song.search_lyrics = unicode(text) + text = text + re.sub(r'\W+', u' ', + unicode(self.VerseListWidget.item(i, 0).text())) + u' ' + self.song.search_lyrics = text self.song.lyrics = unicode(sxml.extract_xml(), u'utf-8') except: log.exception(u'Problem processing song Lyrics \n%s', @@ -639,16 +645,6 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog): def processTitle(self): log.debug(u'processTitle') - self.song.search_title = unicode(self.song.search_title) - self.song.search_title = self.song.search_title.replace(u'\'', u'') - self.song.search_title = self.song.search_title.replace(u'\"', u'') - self.song.search_title = self.song.search_title.replace(u'`', u'') - self.song.search_title = self.song.search_title.replace(u',', u'') - self.song.search_title = self.song.search_title.replace(u';', u'') - self.song.search_title = self.song.search_title.replace(u':', u'') - self.song.search_title = self.song.search_title.replace(u'(', u'') - self.song.search_title = self.song.search_title.replace(u')', u'') - self.song.search_title = self.song.search_title.replace(u'{', u'') - self.song.search_title = self.song.search_title.replace(u'}', u'') - self.song.search_title = self.song.search_title.replace(u'?', u'') + self.song.search_title = \ + re.sub(r'[\'"`,;:(){}?]+', u'', unicode(self.song.search_title)) diff --git a/openlp/plugins/songs/lib/mediaitem.py b/openlp/plugins/songs/lib/mediaitem.py index ecf0684dd..c60a67a42 100644 --- a/openlp/plugins/songs/lib/mediaitem.py +++ b/openlp/plugins/songs/lib/mediaitem.py @@ -23,6 +23,7 @@ # Temple Place, Suite 330, Boston, MA 02111-1307 USA # ############################################################################### +import re import logging from PyQt4 import QtCore, QtGui @@ -160,6 +161,7 @@ class SongMediaItem(MediaManagerItem): def onSearchTextButtonClick(self): search_keywords = unicode(self.SearchTextEdit.displayText()) + search_keywords = re.sub(r'\W+', u' ', search_keywords) search_results = [] search_type = self.SearchTypeComboBox.currentIndex() if search_type == 0: @@ -350,8 +352,8 @@ class SongMediaItem(MediaManagerItem): if len(order) == 0: break for verse in verseList: - if verse[0][u'label'] == order[1:] and \ - verse[0][u'type'][0] == order[0]: + if verse[0][u'type'][0] == order[0] and \ + (verse[0][u'label'] == order[1:] or not order[1:]): verseTag = u'%s:%s' % \ (verse[0][u'type'], verse[0][u'label']) service_item.add_from_text( diff --git a/openlp/plugins/songs/lib/songimport.py b/openlp/plugins/songs/lib/songimport.py index 9fd7194e2..479828ddd 100644 --- a/openlp/plugins/songs/lib/songimport.py +++ b/openlp/plugins/songs/lib/songimport.py @@ -24,6 +24,7 @@ ############################################################################### import string +import re from PyQt4 import QtGui @@ -89,9 +90,6 @@ class SongImport(object): Get rid of some dodgy unicode and formatting characters we're not interested in. Some can be converted to ascii. """ - text = text.replace(u'\t', u' ') - text = text.replace(u'\r\n', u'\n') - text = text.replace(u'\r', u'\n') text = text.replace(u'\u2018', u'\'') text = text.replace(u'\u2019', u'\'') text = text.replace(u'\u201c', u'"') @@ -100,15 +98,9 @@ class SongImport(object): text = text.replace(u'\u2013', u'-') text = text.replace(u'\u2014', u'-') # Remove surplus blank lines, spaces, trailing/leading spaces - while text.find(u' ') >= 0: - text = text.replace(u' ', u' ') - text = text.replace(u'\n ', u'\n') - text = text.replace(u' \n', u'\n') - text = text.replace(u'\n\n\n\n\n', u'\f') - text = text.replace(u'\f ', u'\f') - text = text.replace(u' \f', u'\f') - while text.find(u'\f\f') >= 0: - text = text.replace(u'\f\f', u'\f') + text = re.sub(r'[ \t\v]+', u' ', text) + text = re.sub(r' ?(\r\n?|\n) ?', u'\n', text) + text = re.sub(r' ?(\n{5}|\f)+ ?', u'\f', text) return text def process_song_text(self, text): @@ -264,11 +256,9 @@ class SongImport(object): def remove_punctuation(self, text): """ - Remove punctuation from the string for searchable fields + Extracts alphanumeric words for searchable fields """ - for character in string.punctuation: - text = text.replace(character, u'') - return text + return re.sub(r'\W+', u' ', text) def finish(self): """ From 3061c319d59d340e79fd21602ae85ac41b058e9c Mon Sep 17 00:00:00 2001 From: M2j Date: Sun, 20 Jun 2010 01:16:15 +0200 Subject: [PATCH 2/7] Automatic verse order entry expanding deleted a misplaced QSpacerItem --- openlp/plugins/songs/forms/editsongdialog.py | 3 --- openlp/plugins/songs/forms/editsongform.py | 9 +++++++++ 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/openlp/plugins/songs/forms/editsongdialog.py b/openlp/plugins/songs/forms/editsongdialog.py index 3bec03a09..8d145d8bf 100644 --- a/openlp/plugins/songs/forms/editsongdialog.py +++ b/openlp/plugins/songs/forms/editsongdialog.py @@ -384,9 +384,6 @@ class Ui_EditSongDialog(object): self.CommentsLayout.addWidget(self.CommentsEdit) self.ThemeCopyCommentsLayout.addWidget(self.CommentsGroupBox) self.ThemeTabLayout.addWidget(self.ThemeCopyCommentsWidget) - spacerItem5 = QtGui.QSpacerItem(20, 40, - QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding) - self.ThemeTabLayout.addItem(spacerItem5) self.SongTabWidget.addTab(self.ThemeTab, u'') self.verticalLayout.addWidget(self.SongTabWidget) self.ButtonBox = QtGui.QDialogButtonBox(EditSongDialog) diff --git a/openlp/plugins/songs/forms/editsongform.py b/openlp/plugins/songs/forms/editsongform.py index 62fda42a7..f2ee5979f 100644 --- a/openlp/plugins/songs/forms/editsongform.py +++ b/openlp/plugins/songs/forms/editsongform.py @@ -630,6 +630,7 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog): sxml.new_document() sxml.add_lyrics_to_song() text = u'' + multiple = [] for i in range (0, self.VerseListWidget.rowCount()): item = self.VerseListWidget.item(i, 0) verseId = unicode(item.data(QtCore.Qt.UserRole).toString()) @@ -637,8 +638,16 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog): sxml.add_verse_to_lyrics(bits[0], bits[1], unicode(item.text())) text = text + re.sub(r'\W+', u' ', unicode(self.VerseListWidget.item(i, 0).text())) + u' ' + if (bits[1] > u'1') and (bits[0][0] not in multiple): + multiple.append(bits[0][0]) + print bits[0][0] self.song.search_lyrics = text self.song.lyrics = unicode(sxml.extract_xml(), u'utf-8') + for verse in multiple: + self.song.verse_order = self.song.verse_order.replace( + verse.upper() + u' ', verse.upper() + u'1 ') + self.song.verse_order = self.song.verse_order.replace( + verse.lower() + u' ', verse.lower() + u'1 ') except: log.exception(u'Problem processing song Lyrics \n%s', sxml.dump_xml()) From 8e25f3850e74aad61b62f9932655980cc28363ec Mon Sep 17 00:00:00 2001 From: M2j Date: Sun, 20 Jun 2010 01:58:42 +0200 Subject: [PATCH 3/7] corrected one string --- openlp/plugins/songs/forms/editsongform.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/openlp/plugins/songs/forms/editsongform.py b/openlp/plugins/songs/forms/editsongform.py index 797c98d65..9bfed4a86 100644 --- a/openlp/plugins/songs/forms/editsongform.py +++ b/openlp/plugins/songs/forms/editsongform.py @@ -555,10 +555,13 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog): if item not in verses: self.SongTabWidget.setCurrentIndex(0) self.VerseOrderEdit.setFocus() + valid = verses.pop(0) + for verse in verses: + valid = valid + u', ' + verse return u'failed', unicode(translate( 'SongsPlugin.EditSongForm', 'The verse order is ' - 'invalid. There is no verse corresponding to %s.')) % \ - order_names[count] + 'invalid. There is no verse corresponding to %s. ' + 'Valid entries are %s.')) % (order_names[count], valid) for count, verse in enumerate(verses): if verse not in order: self.SongTabWidget.setCurrentIndex(0) From 888bc50622ac535218c06805d14607dfd13604a3 Mon Sep 17 00:00:00 2001 From: M2j Date: Sun, 20 Jun 2010 08:48:32 +0200 Subject: [PATCH 4/7] fixes --- openlp/plugins/songs/forms/editsongform.py | 57 +++++++++++----------- 1 file changed, 29 insertions(+), 28 deletions(-) diff --git a/openlp/plugins/songs/forms/editsongform.py b/openlp/plugins/songs/forms/editsongform.py index 9bfed4a86..e3bec84c2 100644 --- a/openlp/plugins/songs/forms/editsongform.py +++ b/openlp/plugins/songs/forms/editsongform.py @@ -258,7 +258,6 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog): topic_name = QtGui.QListWidgetItem(unicode(topic.name)) topic_name.setData(QtCore.Qt.UserRole, QtCore.QVariant(topic.id)) self.TopicsListView.addItem(topic_name) - self._validate_song() self.TitleEditItem.setFocus(QtCore.Qt.OtherFocusReason) #if not preview hide the preview button self.previewButton.setVisible(False) @@ -516,13 +515,19 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog): if len(self.TitleEditItem.displayText()) == 0: self.SongTabWidget.setCurrentIndex(0) self.TitleEditItem.setFocus() - return u'failed', translate(u'SongsPlugin.EditSongForm', - u'You need to enter a song title.') + QtGui.QMessageBox.critical(self, + translate(u'SongsPlugin.EditSongForm', u'Error'), + translate(u'SongsPlugin.EditSongForm', + u'You need to enter a song title.')) + return False if self.VerseListWidget.rowCount() == 0: self.SongTabWidget.setCurrentIndex(0) self.VerseListWidget.setFocus() - return u'failed', translate('uSongsPlugin.EditSongForm', - u'You need to enter some verses.') + QtGui.QMessageBox.critical(self, + translate(u'SongsPlugin.EditSongForm', u'Error'), + translate('uSongsPlugin.EditSongForm', + u'You need to enter some verses.')) + return False if self.AuthorsListView.count() == 0: self.SongTabWidget.setCurrentIndex(1) self.AuthorsListView.setFocus() @@ -533,7 +538,7 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog): 'Do you want to add now a author?'), QtGui.QMessageBox.Yes | QtGui.QMessageBox.No) if answer == QtGui.QMessageBox.Yes: - return u'aborted', u'' + return False if self.song.verse_order: order = [] order_names = self.song.verse_order.split(u' ') @@ -558,10 +563,13 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog): valid = verses.pop(0) for verse in verses: valid = valid + u', ' + verse - return u'failed', unicode(translate( - 'SongsPlugin.EditSongForm', 'The verse order is ' - 'invalid. There is no verse corresponding to %s. ' - 'Valid entries are %s.')) % (order_names[count], valid) + QtGui.QMessageBox.critical(self, + translate(u'SongsPlugin.EditSongForm', u'Error'), + unicode(translate('SongsPlugin.EditSongForm', + 'The verse order is invalid. There is no verse ' + 'corresponding to %s. Valid entries are %s.')) % \ + (order_names[count], valid)) + return False for count, verse in enumerate(verses): if verse not in order: self.SongTabWidget.setCurrentIndex(0) @@ -571,11 +579,11 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog): unicode(translate('SongsPlugin.EditSongForm', '%s is not addressed in the verse order.\n' 'Do you want to save anyhow?')) % \ - order_names[count].replace(u':', u' '), + verse_names[count].replace(u':', u' '), QtGui.QMessageBox.Yes | QtGui.QMessageBox.No) if answer == QtGui.QMessageBox.No: - return u'aborted', u'' - return u'passed', u'' + return False + return True def onCopyrightInsertButtonTriggered(self): text = self.CopyrightEditItem.text() @@ -618,16 +626,12 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog): self.song.comments = unicode(self.CommentsEdit.toPlainText()) self.song.verse_order = unicode(self.VerseOrderEdit.text()) self.song.ccli_number = unicode(self.CCLNumberEdit.text()) - status, message = self._validate_song() - if status == u'failed': - QtGui.QMessageBox.critical(self, - translate(u'SongsPlugin.EditSongForm', u'Error'), message) - if status != u'passed': - return False - self.processLyrics() - self.processTitle() - self.songmanager.save_song(self.song) - return True + if self._validate_song(): + self.processLyrics() + self.processTitle() + self.songmanager.save_song(self.song) + return True + return False def processLyrics(self): log.debug(u'processLyrics') @@ -646,14 +650,11 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog): unicode(self.VerseListWidget.item(i, 0).text())) + u' ' if (bits[1] > u'1') and (bits[0][0] not in multiple): multiple.append(bits[0][0]) - print bits[0][0] self.song.search_lyrics = text self.song.lyrics = unicode(sxml.extract_xml(), u'utf-8') for verse in multiple: - self.song.verse_order = self.song.verse_order.replace( - verse.upper() + u' ', verse.upper() + u'1 ') - self.song.verse_order = self.song.verse_order.replace( - verse.lower() + u' ', verse.lower() + u'1 ') + self.song.verse_order = re.sub(u'([' + verse.upper() + + verse.lower() + u'])(\W|$)', r'\g<1>1\2', self.song.verse_order) except: log.exception(u'Problem processing song Lyrics \n%s', sxml.dump_xml()) From 28bb5e519d0cefd7ddf6b19749faf647166c78cc Mon Sep 17 00:00:00 2001 From: Raoul Snyman Date: Sun, 20 Jun 2010 13:09:15 +0200 Subject: [PATCH 5/7] Fix bug #596506 --- openlp/core/lib/serviceitem.py | 15 ++++++++++----- openlp/core/ui/slidecontroller.py | 2 +- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/openlp/core/lib/serviceitem.py b/openlp/core/lib/serviceitem.py index b3464888e..d9c434987 100644 --- a/openlp/core/lib/serviceitem.py +++ b/openlp/core/lib/serviceitem.py @@ -90,7 +90,7 @@ class ServiceItem(object): self.from_plugin = False self.capabilities = [] self.is_valid = True - self.cache = [] + self.cache = {} self.icon = None def add_capability(self, capability): @@ -129,7 +129,7 @@ class ServiceItem(object): """ log.debug(u'Render called') self._display_frames = [] - self.cache = [] + self.clear_cache() if self.service_item_type == ServiceItemType.Text: log.debug(u'Formatting slides') if self.theme is None: @@ -149,7 +149,8 @@ class ServiceItem(object): self._display_frames.append({u'title': title, u'text': lines.rstrip(), u'verseTag': slide[u'verseTag'] }) - self.cache.insert(len(self._display_frames), None) + if len(self._display_frames) in self.cache.keys(): + del self.cache[len(self._display_frames)] log.log(15, u'Formatting took %4s' % (time.time() - before)) elif self.service_item_type == ServiceItemType.Image: for slide in self._raw_frames: @@ -172,8 +173,7 @@ class ServiceItem(object): else: self.render_manager.set_override_theme(self.theme) format = self._display_frames[row][u'text'].split(u'\n') - #if screen blank then do not display footer - if len(self.cache) > 0 and self.cache[row] is not None: + if self.cache.get(row): frame = self.cache[row] else: if format[0]: @@ -385,3 +385,8 @@ class ServiceItem(object): """ return self._raw_frames[row][u'path'] + def clear_cache(self): + """ + Clear's the service item's cache. + """ + self.cache = {} diff --git a/openlp/core/ui/slidecontroller.py b/openlp/core/ui/slidecontroller.py index 10cd3cff0..e289e430d 100644 --- a/openlp/core/ui/slidecontroller.py +++ b/openlp/core/ui/slidecontroller.py @@ -537,7 +537,7 @@ class SlideController(QtGui.QWidget): before = time.time() #Clear the old serviceItem cache to release memory if self.serviceItem and self.serviceItem is not serviceItem: - self.serviceItem.cache = [] + self.serviceItem.clear_cache() self.serviceItem = serviceItem self.PreviewListWidget.clear() self.PreviewListWidget.setRowCount(0) From 054ec36e4a556cdff04fb3ff6773756bdf43c80f Mon Sep 17 00:00:00 2001 From: Raoul Snyman Date: Sun, 20 Jun 2010 13:43:16 +0200 Subject: [PATCH 6/7] Fixed bug #596505 --- openlp/core/ui/servicemanager.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/openlp/core/ui/servicemanager.py b/openlp/core/ui/servicemanager.py index cccd34195..93004cc64 100644 --- a/openlp/core/ui/servicemanager.py +++ b/openlp/core/ui/servicemanager.py @@ -662,8 +662,7 @@ class ServiceManager(QtGui.QWidget): name = filename.split(os.path.sep) if filename: SettingsManager.set_last_dir( - self.parent.serviceSettingsSection, - os.path.split(filename)[0]) + self.parent.serviceSettingsSection, name[0]) zip = None file_to = None try: @@ -697,7 +696,7 @@ class ServiceManager(QtGui.QWidget): self.onNewService() for item in items: serviceitem = ServiceItem() - serviceitem.RenderManager = self.parent.RenderManager + serviceitem.render_manager = self.parent.RenderManager serviceitem.set_from_service(item, self.servicePath) self.validateItem(serviceitem) self.addServiceItem(serviceitem) From ce79049868897169d123ce9e8040af51672b13a6 Mon Sep 17 00:00:00 2001 From: Raoul Snyman Date: Sun, 20 Jun 2010 14:12:49 +0200 Subject: [PATCH 7/7] Reverted a change that could introduce a bug! --- openlp/core/ui/servicemanager.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/openlp/core/ui/servicemanager.py b/openlp/core/ui/servicemanager.py index 93004cc64..84c4f6d0b 100644 --- a/openlp/core/ui/servicemanager.py +++ b/openlp/core/ui/servicemanager.py @@ -661,8 +661,8 @@ class ServiceManager(QtGui.QWidget): filename = unicode(filename) name = filename.split(os.path.sep) if filename: - SettingsManager.set_last_dir( - self.parent.serviceSettingsSection, name[0]) + SettingsManager.set_last_dir(self.parent.serviceSettingsSection, + os.path.split(filename)[0]) zip = None file_to = None try: