diff --git a/openlp-1to2-converter.py b/openlp-1to2-converter.py index bccb44d31..bf53ea1cc 100755 --- a/openlp-1to2-converter.py +++ b/openlp-1to2-converter.py @@ -94,7 +94,7 @@ create_statements = [ )""") ] -def clean_string(dirty): +def prepare_string(dirty): return dirty_chars.sub(u'', dirty.replace(u'\r\n', ' ').replace(u'\n', ' ')) def display_sql(sql, params): @@ -193,12 +193,12 @@ def import_songs(): xml_verse += (xml_verse_template % (line + 1, verse)) verse_order += '%d ' % (line + 1) xml_lyrics = xml_lyrics_template % xml_verse - search_title = clean_string(clean_title) - search_lyrics = clean_string(clean_lyrics) + search_title = prepare_string(clean_title) + search_lyrics = prepare_string(clean_lyrics) sql_insert = u'INSERT INTO songs '\ '(id, song_book_id, title, lyrics, verse_order, copyright, search_title, search_lyrics) '\ 'VALUES (NULL, 0, ?, ?, ?, ?, ?, ?)' - sql_params = (clean_title, xml_lyrics, verse_order, clean_copyright, clean_title, clean_lyrics) + sql_params = (clean_title, xml_lyrics, verse_order, clean_copyright, search_title, search_lyrics) if debug: print '...', display_sql(sql_insert, (sql_params[0], u'%s...' % clean_lyrics[:7], sql_params[2], sql_params[3], sql_params[4], u'%s...' % search_lyrics[:7])) elif verbose: diff --git a/openlp/core/lib/mediamanageritem.py b/openlp/core/lib/mediamanageritem.py index 779b0aa7e..325eb72d3 100644 --- a/openlp/core/lib/mediamanageritem.py +++ b/openlp/core/lib/mediamanageritem.py @@ -24,6 +24,7 @@ import types import os +import uuid from PyQt4 import QtCore, QtGui @@ -360,18 +361,23 @@ class MediaManagerItem(QtGui.QWidget): log.debug(self.PluginNameShort + u' Preview Requested') service_item = self.buildServiceItem() if service_item is not None: + service_item.fromPlugin = True self.parent.preview_controller.addServiceItem(service_item) def onLiveClick(self): log.debug(self.PluginNameShort + u' Live Requested') service_item = self.buildServiceItem() if service_item is not None: + service_item.fromPlugin = True + service_item.uuid = unicode(uuid.uuid1()) self.parent.live_controller.addServiceItem(service_item) def onAddClick(self): log.debug(self.PluginNameShort + u' Add Requested') service_item = self.buildServiceItem() if service_item is not None: + service_item.fromPlugin = False + service_item.uuid = unicode(uuid.uuid1()) self.parent.service_manager.addServiceItem(service_item) def buildServiceItem(self): diff --git a/openlp/core/ui/servicemanager.py b/openlp/core/ui/servicemanager.py index 63e268c22..68dc2bd62 100644 --- a/openlp/core/ui/servicemanager.py +++ b/openlp/core/ui/servicemanager.py @@ -27,7 +27,6 @@ import string import logging import cPickle import zipfile -import uuid from PyQt4 import QtCore, QtGui from openlp.core.lib import PluginConfig, OpenLPToolbar, ServiceItem, \ @@ -563,7 +562,6 @@ class ServiceManager(QtGui.QWidget): self.repaintServiceList(sitem + 1, 0) self.parent.LiveController.replaceServiceManagerItem(item) else: - item.uuid = unicode(uuid.uuid1()) if sitem == -1: self.serviceItems.append({u'data': item, u'order': len(self.serviceItems) + 1, diff --git a/openlp/core/ui/slidecontroller.py b/openlp/core/ui/slidecontroller.py index 1c7511c70..d61c7638f 100644 --- a/openlp/core/ui/slidecontroller.py +++ b/openlp/core/ui/slidecontroller.py @@ -285,15 +285,16 @@ class SlideController(QtGui.QWidget): str_to_bool(self.songsconfig.get_config(u'display songbar', True)): for action in self.Songbar.actions: self.Songbar.actions[action].setVisible(False) - verses = item.verse_order.split(u' ') - for verse in verses: - try: - self.Songbar.actions[verse].setVisible(True) - except: - #More than 20 verses hard luck - pass - self.Songbar.setVisible(True) - elif item.service_item_type == ServiceItemType.Image: + if item.verse_order is not None: + verses = item.verse_order.split(u' ') + for verse in verses: + try: + self.Songbar.actions[verse].setVisible(True) + except: + #More than 20 verses hard luck + pass + self.Songbar.setVisible(True) + elif item.service_item_type == ServiceType.Image: #Not sensible to allow loops with 1 frame if len(item.frames) > 1: self.Toolbar.makeWidgetsVisible(self.image_list) @@ -302,7 +303,7 @@ class SlideController(QtGui.QWidget): """ Allows the Preview toolbar to be customised """ - if item.name == u'Songs': + if item.name == u'Songs' and item.fromPlugin: self.Toolbar.makeWidgetsVisible(self.song_list) else: self.Toolbar.makeWidgetsInvisible(self.song_list) diff --git a/openlp/plugins/custom/forms/editcustomdialog.py b/openlp/plugins/custom/forms/editcustomdialog.py index 2b56dd78d..5a39f0c07 100644 --- a/openlp/plugins/custom/forms/editcustomdialog.py +++ b/openlp/plugins/custom/forms/editcustomdialog.py @@ -120,7 +120,7 @@ class Ui_customEditDialog(object): self.gridLayout.addLayout(self.horizontalLayout_2, 4, 0, 1, 1) self.buttonBox = QtGui.QDialogButtonBox(customEditDialog) self.buttonBox.setStandardButtons( - QtGui.QDialogButtonBox.Cancel|QtGui.QDialogButtonBox.Ok) + QtGui.QDialogButtonBox.Cancel|QtGui.QDialogButtonBox.Save) self.buttonBox.setObjectName(u'buttonBox') self.gridLayout.addWidget(self.buttonBox, 5, 0, 1, 1) diff --git a/openlp/plugins/custom/forms/editcustomform.py b/openlp/plugins/custom/forms/editcustomform.py index caecda0cd..a4fc7a44a 100644 --- a/openlp/plugins/custom/forms/editcustomform.py +++ b/openlp/plugins/custom/forms/editcustomform.py @@ -101,7 +101,7 @@ class EditCustomForm(QtGui.QDialog, Ui_customEditDialog): verseList = songXML.get_verses() for verse in verseList: self.VerseListView.addItem(verse[1]) - theme = unicode(self.customSlide.theme_name) + theme = self.customSlide.theme_name id = self.ThemeComboBox.findText(theme, QtCore.Qt.MatchExactly) if id == -1: id = 0 # Not Found @@ -224,9 +224,12 @@ class EditCustomForm(QtGui.QDialog, Ui_customEditDialog): def _validate(self): if len(self.TitleEdit.displayText()) == 0: self.TitleEdit.setFocus() - return False, self.trUtf8(u'You need to enter a title \n') + return False, self.trUtf8(u'You need to enter a title') # must have 1 slide if self.VerseListView.count() == 0: self.VerseTextEdit.setFocus() - return False, self.trUtf8(u'You need to enter a slide \n') + return False, self.trUtf8(u'You need to enter a slide') + if len(self.VerseTextEdit.toPlainText()) > 0: + self.VerseTextEdit.setFocus() + return False, self.trUtf8(u'You have unsaved data') return True, u'' diff --git a/openlp/plugins/songs/forms/editsongform.py b/openlp/plugins/songs/forms/editsongform.py index 434e9902e..4bcecf457 100644 --- a/openlp/plugins/songs/forms/editsongform.py +++ b/openlp/plugins/songs/forms/editsongform.py @@ -468,6 +468,8 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog): def processTitle(self): log.debug(u'processTitle') 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'') diff --git a/openlp/plugins/songs/lib/mediaitem.py b/openlp/plugins/songs/lib/mediaitem.py index 08005b326..506e0f3f8 100644 --- a/openlp/plugins/songs/lib/mediaitem.py +++ b/openlp/plugins/songs/lib/mediaitem.py @@ -289,6 +289,7 @@ class SongMediaItem(MediaManagerItem): song = self.parent.songmanager.get_song(item_id) service_item.theme = song.theme_name service_item.editEnabled = True + service_item.fromPlugin = True service_item.editId = item_id service_item.verse_order = song.verse_order if song.lyrics.startswith(u'