diff --git a/openlp/core/lib/serviceitem.py b/openlp/core/lib/serviceitem.py index b46871333..b6f225cd9 100644 --- a/openlp/core/lib/serviceitem.py +++ b/openlp/core/lib/serviceitem.py @@ -160,7 +160,7 @@ class ServiceItem(object): self.service_item_type = None self._raw_frames = [] self._display_frames = [] - self._uuid = 0 + self.unique_identifier = 0 self.notes = u'' self.from_plugin = False self.capabilities = [] @@ -194,7 +194,7 @@ class ServiceItem(object): Method to set the internal id of the item. This is used to compare service items to see if they are the same. """ - self._uuid = unicode(uuid.uuid1()) + self.unique_identifier = unicode(uuid.uuid1()) self.validate_item() def add_capability(self, capability): @@ -453,14 +453,14 @@ class ServiceItem(object): def merge(self, other): """ - Updates the _uuid with the value from the original one - The _uuid is unique for a given service item but this allows one to + Updates the unique_identifier with the value from the original one + The unique_identifier is unique for a given service item but this allows one to replace an original version. ``other`` The service item to be merged with """ - self._uuid = other._uuid + self.unique_identifier = other.unique_identifier self.notes = other.notes self.temporary_edit = other.temporary_edit # Copy theme over if present. @@ -477,13 +477,13 @@ class ServiceItem(object): """ if not other: return False - return self._uuid == other._uuid + return self.unique_identifier == other.unique_identifier def __ne__(self, other): """ Confirms the service items are not for the same instance """ - return self._uuid != other._uuid + return self.unique_identifier != other.unique_identifier def is_media(self): """ @@ -636,12 +636,12 @@ class ServiceItem(object): if self.is_image() and not os.path.exists((frame[u'path'])): self.is_valid = False elif self.is_command(): - file = os.path.join(frame[u'path'],frame[u'title']) - if not os.path.exists(file): + file_name = os.path.join(frame[u'path'], frame[u'title']) + if not os.path.exists(file_name): self.is_valid = False if suffix_list and not self.is_text(): - type = frame[u'title'].split(u'.')[-1] - if type.lower() not in suffix_list: + file_suffix = frame[u'title'].split(u'.')[-1] + if file_suffix.lower() not in suffix_list: self.is_valid = False def _get_renderer(self): diff --git a/openlp/core/ui/media/__init__.py b/openlp/core/ui/media/__init__.py index 10c206b10..1e4473310 100644 --- a/openlp/core/ui/media/__init__.py +++ b/openlp/core/ui/media/__init__.py @@ -102,8 +102,7 @@ def set_media_players(players_list, overridden_player=u'auto'): """ log.debug(u'set_media_players') players = u','.join(players_list) - if Settings().value(u'media/override player', QtCore.Qt.Unchecked) == QtCore.Qt.Checked and \ - overridden_player != u'auto': + if Settings().value(u'media/override player') == QtCore.Qt.Checked and overridden_player != u'auto': players = players.replace(overridden_player, u'[%s]' % overridden_player) Settings().setValue(u'media/players', players) diff --git a/openlp/core/ui/media/webkitplayer.py b/openlp/core/ui/media/webkitplayer.py index d6d9a8b06..ce72f4583 100644 --- a/openlp/core/ui/media/webkitplayer.py +++ b/openlp/core/ui/media/webkitplayer.py @@ -411,13 +411,13 @@ class WebkitPlayer(MediaPlayer): else: if display.frame.evaluateJavaScript(u'show_video("isEnded");') == 'true': self.stop(display) - (currentTime, ok) = display.frame.evaluateJavaScript(u'show_video("currentTime");') + currentTime = display.frame.evaluateJavaScript(u'show_video("currentTime");') # check if conversion was ok and value is not 'NaN' - if ok and currentTime != float('inf'): + if currentTime and currentTime != float('inf'): currentTime = int(currentTime * 1000) - (length, ok) = display.frame.evaluateJavaScript(u'show_video("length");') + length = display.frame.evaluateJavaScript(u'show_video("length");') # check if conversion was ok and value is not 'NaN' - if ok and length != float('inf'): + if length and length != float('inf'): length = int(length * 1000) if currentTime > 0: controller.media_info.length = length diff --git a/openlp/core/ui/servicemanager.py b/openlp/core/ui/servicemanager.py index 1880bf41f..78ab3f794 100644 --- a/openlp/core/ui/servicemanager.py +++ b/openlp/core/ui/servicemanager.py @@ -110,7 +110,7 @@ class ServiceManager(QtGui.QWidget): self.suffixes = [] self.dropPosition = 0 self.expandTabs = False - self.serviceId = 0 + self.service_id = 0 # is a new service and has not been saved self._modified = False self._fileName = u'' @@ -165,8 +165,7 @@ class ServiceManager(QtGui.QWidget): # Add the bottom toolbar self.orderToolbar = OpenLPToolbar(self) action_list = ActionList.get_instance() - action_list.add_category( - UiStrings().Service, CategoryOrder.standardToolbar) + action_list.add_category(UiStrings().Service, CategoryOrder.standardToolbar) self.serviceManagerList.moveTop = self.orderToolbar.addToolbarAction(u'moveTop', text=translate('OpenLP.ServiceManager', 'Move to &top'), icon=u':/services/service_top.png', tooltip=translate('OpenLP.ServiceManager', 'Move item to the top of the service.'), @@ -297,7 +296,7 @@ class ServiceManager(QtGui.QWidget): has been modified. """ if modified: - self.serviceId += 1 + self.service_id += 1 self._modified = modified serviceFile = self.shortFileName() or translate('OpenLP.ServiceManager', 'Untitled Service') self.main_window.setServiceModified(modified, serviceFile) @@ -394,6 +393,9 @@ class ServiceManager(QtGui.QWidget): self.loadFile(fileName) def saveModifiedService(self): + """ + Check to see if a service needs to be saved. + """ return QtGui.QMessageBox.question(self.main_window, translate('OpenLP.ServiceManager', 'Modified Service'), translate('OpenLP.ServiceManager', @@ -401,6 +403,9 @@ class ServiceManager(QtGui.QWidget): QtGui.QMessageBox.Save | QtGui.QMessageBox.Discard | QtGui.QMessageBox.Cancel, QtGui.QMessageBox.Save) def onRecentServiceClicked(self): + """ + Load a recent file as the service triggered by mainwindow recent service list. + """ sender = self.sender() self.loadFile(sender.data()) @@ -411,7 +416,7 @@ class ServiceManager(QtGui.QWidget): self.serviceManagerList.clear() self.serviceItems = [] self.setFileName(u'') - self.serviceId += 1 + self.service_id += 1 self.setModified(False) Settings().setValue(u'servicemanager/last file', u'') Receiver.send_message(u'servicemanager_new_service') @@ -478,38 +483,36 @@ class ServiceManager(QtGui.QWidget): else: service_item = item[u'service_item'].get_service_repr(self._saveLite) if service_item[u'header'][u'background_audio']: - for i, filename in enumerate( - service_item[u'header'][u'background_audio']): - new_file = os.path.join(u'audio', - item[u'service_item']._uuid, filename) + for i, filename in enumerate(service_item[u'header'][u'background_audio']): + new_file = os.path.join(u'audio', item[u'service_item'].unique_identifier, filename) audio_files.append((filename, new_file)) service_item[u'header'][u'background_audio'][i] = new_file # Add the service item to the service. service.append({u'serviceitem': service_item}) self.repaintServiceList(-1, -1) - for file in write_list: - file_size = os.path.getsize(file) + for file_item in write_list: + file_size = os.path.getsize(file_item) total_size += file_size - log.debug(u'ServiceManager.saveFile - ZIP contents size is %i bytes' % total_size) + log.debug(u'ServiceManager.savefile - ZIP contents size is %i bytes' % total_size) service_content = cPickle.dumps(service) # Usual Zip file cannot exceed 2GiB, file with Zip64 cannot be # extracted using unzip in UNIX. allow_zip_64 = (total_size > 2147483648 + len(service_content)) log.debug(u'ServiceManager.saveFile - allowZip64 is %s' % allow_zip_64) - zip = None + zip_file = None success = True self.main_window.incrementProgressBar() try: - zip = zipfile.ZipFile(temp_file_name, 'w', zipfile.ZIP_STORED, allow_zip_64) + zip_file = zipfile.ZipFile(temp_file_name, 'w', zipfile.ZIP_STORED, allow_zip_64) # First we add service contents. # We save ALL filenames into ZIP using UTF-8. - zip.writestr(service_file_name.encode(u'utf-8'), service_content) + zip_file.writestr(service_file_name.encode(u'utf-8'), service_content) # Finally add all the listed media files. for write_from in write_list: - zip.write(write_from, write_from.encode(u'utf-8')) + zip_file.write(write_from, write_from.encode(u'utf-8')) for audio_from, audio_to in audio_files: if audio_from.startswith(u'audio'): - # When items are saved, they get new UUID's. Let's copy the + # When items are saved, they get new unique_identifier. Let's copy the # file to the new location. Unused files can be ignored, # OpenLP automatically cleans up the service manager dir on # exit. @@ -519,7 +522,7 @@ class ServiceManager(QtGui.QWidget): check_directory_exists(save_path) if not os.path.exists(save_file): shutil.copy(audio_from, save_file) - zip.write(audio_from, audio_to.encode(u'utf-8')) + zip_file.write(audio_from, audio_to.encode(u'utf-8')) except IOError: log.exception(u'Failed to save service to disk: %s', temp_file_name) Receiver.send_message(u'openlp_error_message', { @@ -528,8 +531,8 @@ class ServiceManager(QtGui.QWidget): }) success = False finally: - if zip: - zip.close() + if zip_file: + zip_file.close() self.main_window.finishedProgressBar() Receiver.send_message(u'cursor_normal') if success: @@ -544,12 +547,8 @@ class ServiceManager(QtGui.QWidget): def saveLocalFile(self): """ - Save the current service file. - - A temporary file is created so that we don't overwrite the existing one - and leave a mangled service file should there be an error when saving. - No files are added to this version of the service as it is deisgned - to only work on the machine it was save on if there are files. + Save the current service file but leave all the file references alone to point to the current machine. + This format is not transportable as it will not contain any files. """ if not self.fileName(): return self.saveFileAs() @@ -559,8 +558,8 @@ class ServiceManager(QtGui.QWidget): log.debug(temp_file_name) path_file_name = unicode(self.fileName()) path, file_name = os.path.split(path_file_name) - basename = os.path.splitext(file_name)[0] - service_file_name = '%s.osd' % basename + base_name = os.path.splitext(file_name)[0] + service_file_name = '%s.osd' % base_name log.debug(u'ServiceManager.saveFile - %s', path_file_name) Settings().setValue(self.main_window.serviceManagerSettingsSection + u'/last directory', path) service = [] @@ -574,14 +573,14 @@ class ServiceManager(QtGui.QWidget): service.append({u'serviceitem': service_item}) self.main_window.incrementProgressBar() service_content = cPickle.dumps(service) - zip = None + zip_file = None success = True self.main_window.incrementProgressBar() try: - zip = zipfile.ZipFile(temp_file_name, 'w', zipfile.ZIP_STORED, + zip_file = zipfile.ZipFile(temp_file_name, 'w', zipfile.ZIP_STORED, True) # First we add service contents. - zip.writestr(service_file_name.encode(u'utf-8'), service_content) + zip_file.writestr(service_file_name.encode(u'utf-8'), service_content) except IOError: log.exception(u'Failed to save service to disk: %s', temp_file_name) Receiver.send_message(u'openlp_error_message', { @@ -590,8 +589,8 @@ class ServiceManager(QtGui.QWidget): }) success = False finally: - if zip: - zip.close() + if zip_file: + zip_file.close() self.main_window.finishedProgressBar() Receiver.send_message(u'cursor_normal') if success: @@ -704,11 +703,11 @@ class ServiceManager(QtGui.QWidget): else: serviceItem.set_from_service(item, self.servicePath) serviceItem.validate_item(self.suffixes) - self.load_item_uuid = 0 + self.load_item_unique_identifier = 0 if serviceItem.is_capable(ItemCapabilities.OnLoadUpdate): Receiver.send_message(u'%s_service_load' % serviceItem.name.lower(), serviceItem) # if the item has been processed - if serviceItem._uuid == self.load_item_uuid: + if serviceItem.unique_identifier == self.load_item_unique_identifier: serviceItem.edit_id = int(self.load_item_edit_id) serviceItem.temporary_edit = self.load_item_temporary self.addServiceItem(serviceItem, repaint=False) @@ -755,6 +754,9 @@ class ServiceManager(QtGui.QWidget): self.loadFile(fileName) def contextMenu(self, point): + """ + The Right click context menu from the Serviceitem list + """ item = self.serviceManagerList.itemAt(point) if item is None: return @@ -776,15 +778,13 @@ class ServiceManager(QtGui.QWidget): if item.parent() is None: self.notesAction.setVisible(True) if serviceItem[u'service_item'].is_capable(ItemCapabilities.CanLoop) and \ - len(serviceItem[u'service_item'].get_frames()) > 1: + len(serviceItem[u'service_item'].get_frames()) > 1: self.autoPlaySlidesGroup.menuAction().setVisible(True) self.autoPlaySlidesOnce.setChecked(serviceItem[u'service_item'].auto_play_slides_once) self.autoPlaySlidesLoop.setChecked(serviceItem[u'service_item'].auto_play_slides_loop) self.timedSlideInterval.setChecked(serviceItem[u'service_item'].timed_slide_interval > 0) if serviceItem[u'service_item'].timed_slide_interval > 0: - delay_suffix = u' ' - delay_suffix += unicode(serviceItem[u'service_item'].timed_slide_interval) - delay_suffix += u' s' + delay_suffix = u' %s s' % unicode(serviceItem[u'service_item'].timed_slide_interval) else: delay_suffix = u' ...' self.timedSlideInterval.setText(translate('OpenLP.ServiceManager', '&Delay between slides') + delay_suffix) @@ -881,8 +881,8 @@ class ServiceManager(QtGui.QWidget): timed_slide_interval, 0, 180, 1) if ok: service_item.timed_slide_interval = timed_slide_interval - if service_item.timed_slide_interval <> 0 and not service_item.auto_play_slides_loop\ - and not service_item.auto_play_slides_once: + if service_item.timed_slide_interval != 0 and not service_item.auto_play_slides_loop \ + and not service_item.auto_play_slides_once: service_item.auto_play_slides_loop = True elif service_item.timed_slide_interval == 0: service_item.auto_play_slides_loop = False @@ -914,9 +914,9 @@ class ServiceManager(QtGui.QWidget): Called by the SlideController to request a preview item be made live and allows the next preview to be updated if relevant. """ - uuid, row = message.split(u':') + unique_identifier, row = message.split(u':') for sitem in self.serviceItems: - if sitem[u'service_item']._uuid == uuid: + if sitem[u'service_item'].unique_identifier == unique_identifier: item = self.serviceManagerList.topLevelItem(sitem[u'order'] - 1) self.serviceManagerList.setCurrentItem(item) self.makeLive(int(row)) @@ -1119,7 +1119,7 @@ class ServiceManager(QtGui.QWidget): self.service_has_all_original_files = False # Repaint the screen self.serviceManagerList.clear() - for itemcount, item in enumerate(self.serviceItems): + for item_count, item in enumerate(self.serviceItems): serviceitem = item[u'service_item'] treewidgetitem = QtGui.QTreeWidgetItem(self.serviceManagerList) if serviceitem.is_valid: @@ -1168,7 +1168,7 @@ class ServiceManager(QtGui.QWidget): text = frame[u'title'].replace(u'\n', u' ') child.setText(0, text[:40]) child.setData(0, QtCore.Qt.UserRole, count) - if serviceItem == itemcount: + if serviceItem == item_count: if item[u'expanded'] and serviceItemChild == count: self.serviceManagerList.setCurrentItem(child) elif serviceItemChild == -1: @@ -1250,7 +1250,7 @@ class ServiceManager(QtGui.QWidget): Triggered from plugins to update service items. Save the values as they will be used as part of the service load """ - edit_id, self.load_item_uuid, temporary = message.split(u':') + edit_id, self.load_item_unique_identifier, temporary = message.split(u':') self.load_item_edit_id = int(edit_id) self.load_item_temporary = str_to_bool(temporary) @@ -1259,12 +1259,12 @@ class ServiceManager(QtGui.QWidget): Using the service item passed replace the one with the same edit id if found. """ - for itemcount, item in enumerate(self.serviceItems): + for item_count, item in enumerate(self.serviceItems): if item[u'service_item'].edit_id == newItem.edit_id and item[u'service_item'].name == newItem.name: newItem.render() newItem.merge(item[u'service_item']) item[u'service_item'] = newItem - self.repaintServiceList(itemcount + 1, 0) + self.repaintServiceList(item_count + 1, 0) self.live_controller.replaceServiceManagerItem(newItem) self.setModified() @@ -1405,11 +1405,11 @@ class ServiceManager(QtGui.QWidget): serviceItem = -1 serviceItemChild = -1 for item in items: - parentitem = item.parent() - if parentitem is None: + parent_item = item.parent() + if parent_item is None: serviceItem = item.data(0, QtCore.Qt.UserRole) else: - serviceItem = parentitem.data(0, QtCore.Qt.UserRole) + serviceItem = parent_item.data(0, QtCore.Qt.UserRole) serviceItemChild = item.data(0, QtCore.Qt.UserRole) # Adjust for zero based arrays. serviceItem -= 1 @@ -1458,7 +1458,7 @@ class ServiceManager(QtGui.QWidget): if item is None: endpos = len(self.serviceItems) else: - endpos = self._getParentItemData(item) - 1 + endpos = self._get_parent_item_data(item) - 1 serviceItem = self.serviceItems[startpos] self.serviceItems.remove(serviceItem) self.serviceItems.insert(endpos, serviceItem) @@ -1471,21 +1471,21 @@ class ServiceManager(QtGui.QWidget): self.dropPosition = len(self.serviceItems) else: # we are over something so lets investigate - pos = self._getParentItemData(item) - 1 + pos = self._get_parent_item_data(item) - 1 serviceItem = self.serviceItems[pos] if (plugin == serviceItem[u'service_item'].name and serviceItem[u'service_item'].is_capable(ItemCapabilities.CanAppend)): action = self.dndMenu.exec_(QtGui.QCursor.pos()) # New action required if action == self.newAction: - self.dropPosition = self._getParentItemData(item) + self.dropPosition = self._get_parent_item_data(item) # Append to existing action if action == self.addToAction: - self.dropPosition = self._getParentItemData(item) + self.dropPosition = self._get_parent_item_data(item) item.setSelected(True) replace = True else: - self.dropPosition = self._getParentItemData(item) + self.dropPosition = self._get_parent_item_data(item) Receiver.send_message(u'%s_add_service_item' % plugin, replace) def updateThemeList(self, theme_list): @@ -1517,6 +1517,9 @@ class ServiceManager(QtGui.QWidget): self.regenerateServiceItems() def onThemeChangeAction(self): + """ + Handles theme change events + """ theme = self.sender().objectName() # No object name means that the "Default" theme is supposed to be used. if not theme: @@ -1525,12 +1528,15 @@ class ServiceManager(QtGui.QWidget): self.serviceItems[item][u'service_item'].update_theme(theme) self.regenerateServiceItems(True) - def _getParentItemData(self, item): - parentitem = item.parent() - if parentitem is None: + def _get_parent_item_data(self, item): + """ + Finds and returns the parent item for any item + """ + parent_item = item.parent() + if parent_item is None: return item.data(0, QtCore.Qt.UserRole) else: - return parentitem.data(0, QtCore.Qt.UserRole) + return parent_item.data(0, QtCore.Qt.UserRole) def printServiceOrder(self): """ diff --git a/openlp/core/ui/slidecontroller.py b/openlp/core/ui/slidecontroller.py index e60bf992a..05151b20e 100644 --- a/openlp/core/ui/slidecontroller.py +++ b/openlp/core/ui/slidecontroller.py @@ -1212,7 +1212,8 @@ class SlideController(DisplayController): row = self.previewListWidget.currentRow() if -1 < row < self.previewListWidget.rowCount(): if self.serviceItem.from_service: - Receiver.send_message('servicemanager_preview_live', u'%s:%s' % (self.serviceItem._uuid, row)) + Receiver.send_message('servicemanager_preview_live', u'%s:%s' % + (self.serviceItem.unique_identifier, row)) else: self.parent().liveController.addServiceManagerItem(self.serviceItem, row) diff --git a/openlp/core/ui/thememanager.py b/openlp/core/ui/thememanager.py index 2a837631e..1c7921121 100644 --- a/openlp/core/ui/thememanager.py +++ b/openlp/core/ui/thememanager.py @@ -474,8 +474,7 @@ class ThemeManager(QtGui.QWidget): Name of the theme to load from file """ log.debug(u'getthemedata for theme %s', theme_name) - xml_file = os.path.join(self.path, unicode(theme_name), - unicode(theme_name) + u'.xml') + xml_file = os.path.join(self.path, unicode(theme_name), unicode(theme_name) + u'.xml') xml = get_text_file_string(xml_file) if not xml: log.debug(u'No theme data - using default theme') diff --git a/openlp/core/utils/__init__.py b/openlp/core/utils/__init__.py index d4a9627df..ba5e08c7f 100644 --- a/openlp/core/utils/__init__.py +++ b/openlp/core/utils/__init__.py @@ -459,7 +459,7 @@ def get_uno_instance(resolver): def format_time(text, local_time): """ - Workaround for Python built-in time formatting fuction time.strftime(). + Workaround for Python built-in time formatting function time.strftime(). time.strftime() accepts only ascii characters. This function accepts unicode string and passes individual % placeholders to time.strftime(). diff --git a/openlp/plugins/custom/lib/mediaitem.py b/openlp/plugins/custom/lib/mediaitem.py index 447dc6437..b4938e929 100644 --- a/openlp/plugins/custom/lib/mediaitem.py +++ b/openlp/plugins/custom/lib/mediaitem.py @@ -256,7 +256,7 @@ class CustomMediaItem(MediaManagerItem): and_(CustomSlide.title == item.title, CustomSlide.theme_name == item.theme, CustomSlide.credits == item.raw_footer[0][len(item.title) + 1:])) if custom: - Receiver.send_message(u'service_item_update', u'%s:%s:%s' % (custom.id, item._uuid, False)) + Receiver.send_message(u'service_item_update', u'%s:%s:%s' % (custom.id, item.unique_identifier, False)) else: if self.add_custom_from_service: self.create_from_service_item(item) @@ -286,7 +286,7 @@ class CustomMediaItem(MediaManagerItem): self.plugin.manager.save_object(custom) self.onSearchTextButtonClicked() if item.name.lower() == u'custom': - Receiver.send_message(u'service_item_update', u'%s:%s:%s' % (custom.id, item._uuid, False)) + Receiver.send_message(u'service_item_update', u'%s:%s:%s' % (custom.id, item.unique_identifier, False)) def onClearTextButtonClick(self): """ diff --git a/openlp/plugins/remotes/lib/httpserver.py b/openlp/plugins/remotes/lib/httpserver.py index aa9fb0235..af12cc9c4 100644 --- a/openlp/plugins/remotes/lib/httpserver.py +++ b/openlp/plugins/remotes/lib/httpserver.py @@ -252,17 +252,17 @@ class HttpConnection(object): service_items = [] service_manager = self.parent.plugin.serviceManager if self.parent.current_item: - cur_uuid = self.parent.current_item._uuid + current_unique_identifier = self.parent.current_item.unique_identifier else: - cur_uuid = None + current_unique_identifier = None for item in service_manager.serviceItems: service_item = item[u'service_item'] service_items.append({ - u'id': unicode(service_item._uuid), + u'id': unicode(service_item.unique_identifier), u'title': unicode(service_item.get_display_title()), u'plugin': unicode(service_item.name), u'notes': unicode(service_item.notes), - u'selected': (service_item._uuid == cur_uuid) + u'selected': (service_item.unique_identifier == current_unique_identifier) }) return service_items @@ -386,9 +386,9 @@ class HttpConnection(object): Poll OpenLP to determine the current slide number and item name. """ result = { - u'service': self.parent.plugin.serviceManager.serviceId, + u'service': self.parent.plugin.serviceManager.service_id, u'slide': self.parent.current_slide or 0, - u'item': self.parent.current_item._uuid if self.parent.current_item else u'', + u'item': self.parent.current_item.unique_identifier if self.parent.current_item else u'', u'twelve':Settings().value(u'remotes/twelve hour'), u'blank': self.parent.plugin.liveController.blankScreen.isChecked(), u'theme': self.parent.plugin.liveController.themeScreen.isChecked(), @@ -459,7 +459,7 @@ class HttpConnection(object): data.append(item) json_data = {u'results': {u'slides': data}} if current_item: - json_data[u'results'][u'item'] = self.parent.current_item._uuid + json_data[u'results'][u'item'] = self.parent.current_item.unique_identifier else: if self.url_params and self.url_params.get(u'data'): try: diff --git a/openlp/plugins/songs/lib/mediaitem.py b/openlp/plugins/songs/lib/mediaitem.py index bc66a2b94..cd23ad731 100644 --- a/openlp/plugins/songs/lib/mediaitem.py +++ b/openlp/plugins/songs/lib/mediaitem.py @@ -537,7 +537,7 @@ class SongMediaItem(MediaManagerItem): temporary = True # Update service with correct song id. if editId: - Receiver.send_message(u'service_item_update%s:%s:%s' % (editId, item._uuid, temporary)) + Receiver.send_message(u'service_item_update%s:%s:%s' % (editId, item.unique_identifier, temporary)) def search(self, string, showError): """ diff --git a/tests/functional/openlp_core_lib/test_serviceitem.py b/tests/functional/openlp_core_lib/test_serviceitem.py index 43f05ed25..c75c3e961 100644 --- a/tests/functional/openlp_core_lib/test_serviceitem.py +++ b/tests/functional/openlp_core_lib/test_serviceitem.py @@ -2,11 +2,14 @@ Package to test the openlp.core.lib package. """ import os +import cPickle from unittest import TestCase + from mock import MagicMock from openlp.core.lib import ServiceItem, Registry + VERSE = u'The Lord said to {r}Noah{/r}: \n'\ 'There\'s gonna be a {su}floody{/su}, {sb}floody{/sb}\n'\ 'The Lord said to {g}Noah{/g}:\n'\ @@ -18,6 +21,7 @@ FOOTER = [u'Arky Arky (Unknown)', u'Public Domain', u'CCLI 123456'] TESTPATH = os.path.abspath(os.path.join(os.path.dirname(__file__), u'..', u'..', u'resources')) + class TestServiceItem(TestCase): def setUp(self): @@ -33,7 +37,7 @@ class TestServiceItem(TestCase): def serviceitem_basic_test(self): """ - Test the Service Item basic test + Test the Service Item - basic test """ # GIVEN: A new service item @@ -46,7 +50,7 @@ class TestServiceItem(TestCase): def serviceitem_add_text_test(self): """ - Test the Service Item add text test + Test the Service Item - add text test """ # GIVEN: A new service item service_item = ServiceItem(None) @@ -69,7 +73,7 @@ class TestServiceItem(TestCase): def serviceitem_add_image_test(self): """ - Test the Service Item add image test + Test the Service Item - add image test """ # GIVEN: A new service item and a mocked renderer service_item = ServiceItem(None) @@ -124,7 +128,7 @@ class TestServiceItem(TestCase): def serviceitem_add_command_test(self): """ - Test the Service Item add command test + Test the Service Item - add command test """ # GIVEN: A new service item and a mocked renderer service_item = ServiceItem(None) @@ -156,10 +160,60 @@ class TestServiceItem(TestCase): service_item.validate_item([u'jpg']) # THEN the service item should be valid - assert service_item.is_valid is True, u'The service item is valid' + assert service_item.is_valid is True, u'The service item should be valid' # WHEN validating a service item with a different suffix service_item.validate_item([u'png']) # THEN the service item should not be valid assert service_item.is_valid is False, u'The service item is not valid' + + def serviceitem_load_custom_from_service_test(self): + """ + Test the Service Item - adding a custom slide from a saved service + """ + # GIVEN: A new service item and a mocked add icon function + service_item = ServiceItem(None) + mocked_add_icon = MagicMock() + service_item.add_icon = mocked_add_icon + + mocked_renderer = MagicMock() + service_item.renderer = mocked_renderer + + # WHEN: adding a custom from a saved Service + line = self.convert_file_service_item(u'serviceitem_custom1.osd') + service_item.set_from_service(line) + + # THEN: We should get back a valid service item + assert service_item.is_valid is True, u'The new service item should be valid' + assert len(service_item._display_frames) == 0, u'The service item has no display frames' + assert len(service_item.capabilities) == 5, u'There are 5 default custom item capabilities' + service_item.render(True) + assert (service_item.get_display_title()) == u'Test Custom', u'The custom title should be correct' + + def serviceitem_load_image_from_service_test(self): + """ + Test the Service Item - adding an image from a saved service + """ + # GIVEN: A new service item and a mocked add icon function + service_item = ServiceItem(None) + mocked_add_icon = MagicMock() + service_item.add_icon = mocked_add_icon + mocked_renderer = MagicMock() + service_item.renderer = mocked_renderer + + # WHEN: adding a custom from a saved Service + + # THEN: We should get back a valid service item + assert service_item.is_valid is True, u'The new service item should be valid' + + + def convert_file_service_item(self, name): + service_file = os.path.join(TESTPATH, name) + try: + open_file = open(service_file, u'r') + items = cPickle.load(open_file) + first_line = items[0] + except: + first_line = u'' + return first_line \ No newline at end of file diff --git a/tests/functional/openlp_core_ui/test_starttimedialog.py b/tests/functional/openlp_core_ui/test_starttimedialog.py index 0aed81592..c4b175106 100644 --- a/tests/functional/openlp_core_ui/test_starttimedialog.py +++ b/tests/functional/openlp_core_ui/test_starttimedialog.py @@ -1,13 +1,12 @@ """ -Package to test the openlp.core.ui package. + Package to test the openlp.core.ui package. """ import sys from unittest import TestCase -from mock import MagicMock - +from mock import MagicMock, patch from openlp.core.ui import starttimeform -from PyQt4 import QtCore, QtGui, QtTest +from PyQt4 import QtGui, QtTest class TestStartTimeDialog(TestCase): @@ -48,10 +47,19 @@ class TestStartTimeDialog(TestCase): """ Test StartTimeDialog display initialisation """ - #GIVEN: A service item with with time + # GIVEN: A service item with with time mocked_serviceitem = MagicMock() mocked_serviceitem.start_time = 61 mocked_serviceitem.end_time = 3701 + # WHEN displaying the UI and pressing enter self.form.item = mocked_serviceitem - #self.form.exec_() + with patch(u'openlp.core.lib.QtGui.QDialog') as MockedQtGuiQDialog: + MockedQtGuiQDialog.return_value = True + #does not work yet + #self.form.exec_() + + # THEN the following values are returned + self.assertEqual(self.form.hourSpinBox.value(), 0) + self.assertEqual(self.form.minuteSpinBox.value(), 0) + self.assertEqual(self.form.secondSpinBox.value(), 0) \ No newline at end of file diff --git a/tests/resources/serviceitem_custom1.osd b/tests/resources/serviceitem_custom1.osd new file mode 100644 index 000000000..7f75b39f4 --- /dev/null +++ b/tests/resources/serviceitem_custom1.osd @@ -0,0 +1,96 @@ +(lp1 +(dp2 +Vserviceitem +p3 +(dp4 +Vheader +p5 +(dp6 +Vfooter +p7 +(lp8 +VTest Custom Credits +p9 +asVaudit +p10 +V +sVsearch +p11 +V +sVwill_auto_start +p12 +I00 +sVname +p13 +Vcustom +p14 +sVplugin +p15 +g14 +sVdata +p16 +V +sVnotes +p17 +V +sVtitle +p18 +VTest Custom +p19 +sVfrom_plugin +p20 +I00 +sVcapabilities +p21 +(lp22 +I2 +aI1 +aI5 +aI13 +aI8 +asVmedia_length +p23 +I0 +sVtheme_overwritten +p24 +I00 +sVtheme +p25 +NsVxml_version +p26 +NsVend_time +p27 +I0 +sVbackground_audio +p28 +(lp29 +sVtype +p30 +I1 +sVstart_time +p31 +I0 +sVicon +p32 +V:/plugins/plugin_custom.png +p33 +ssg16 +(lp34 +(dp35 +VverseTag +p36 +NsVraw_slide +p37 +VSlide 1 +p38 +sVtitle +p39 +g38 +sa(dp40 +g36 +Nsg37 +VSlide 2 +p41 +sg39 +g41 +sassa. \ No newline at end of file diff --git a/tests/resources/serviceitem_image1.osd b/tests/resources/serviceitem_image1.osd new file mode 100644 index 000000000..7dfeda2d8 --- /dev/null +++ b/tests/resources/serviceitem_image1.osd @@ -0,0 +1,79 @@ +(lp1 +(dp2 +Vserviceitem +p3 +(dp4 +Vheader +p5 +(dp6 +Vfooter +p7 +(lp8 +sVaudit +p9 +V +sVsearch +p10 +V +sVwill_auto_start +p11 +I00 +sVname +p12 +Vimages +p13 +sVplugin +p14 +g13 +sVdata +p15 +V +sVnotes +p16 +V +sVtitle +p17 +VImages +p18 +sVfrom_plugin +p19 +I00 +sVcapabilities +p20 +(lp21 +I3 +aI1 +aI5 +aI6 +asVmedia_length +p22 +I0 +sVtheme_overwritten +p23 +I00 +sVtheme +p24 +I-1 +sVxml_version +p25 +NsVend_time +p26 +I0 +sVbackground_audio +p27 +(lp28 +sVtype +p29 +I2 +sVstart_time +p30 +I0 +sVicon +p31 +V:/plugins/plugin_images.png +p32 +ssg15 +(lp33 +VIMG_7453.JPG +p34 +assa. \ No newline at end of file