From f2836baae4b107e1460efbd7e9acf0ce6f83385d Mon Sep 17 00:00:00 2001 From: Jon Tibble Date: Sat, 19 Jun 2010 18:31:42 +0100 Subject: [PATCH 01/12] More docstrings --- openlp/core/lib/baselistwithdnd.py | 10 +++++--- openlp/core/lib/dockwidget.py | 5 +++- openlp/core/lib/eventreceiver.py | 10 ++++++-- openlp/core/lib/mediamanageritem.py | 40 +++++++++++++++++++++++++++-- openlp/core/lib/plugin.py | 4 ++- openlp/core/lib/settingsmanager.py | 10 +++++++- openlp/core/lib/themexmlhandler.py | 4 ++- openlp/core/lib/toolbar.py | 4 ++- 8 files changed, 75 insertions(+), 12 deletions(-) diff --git a/openlp/core/lib/baselistwithdnd.py b/openlp/core/lib/baselistwithdnd.py index d34eada98..7802d7073 100644 --- a/openlp/core/lib/baselistwithdnd.py +++ b/openlp/core/lib/baselistwithdnd.py @@ -22,15 +22,19 @@ # with this program; if not, write to the Free Software Foundation, Inc., 59 # # Temple Place, Suite 330, Boston, MA 02111-1307 USA # ############################################################################### - +""" +Extend QListWidget to handle drag and drop functionality +""" from PyQt4 import QtCore, QtGui class BaseListWithDnD(QtGui.QListWidget): """ - Please put a short description of what this class does in here. + Provide a list widget to store objects and handle drag and drop events """ - def __init__(self, parent=None): + """ + Initialise the list widget + """ QtGui.QListWidget.__init__(self, parent) self.parent = parent # this must be set by the class which is inheriting diff --git a/openlp/core/lib/dockwidget.py b/openlp/core/lib/dockwidget.py index 083c99184..729e29d33 100644 --- a/openlp/core/lib/dockwidget.py +++ b/openlp/core/lib/dockwidget.py @@ -22,7 +22,10 @@ # with this program; if not, write to the Free Software Foundation, Inc., 59 # # Temple Place, Suite 330, Boston, MA 02111-1307 USA # ############################################################################### - +""" +Provide additional functionality required by OpenLP from the inherited +QDockWidget. +""" import logging from PyQt4 import QtGui diff --git a/openlp/core/lib/eventreceiver.py b/openlp/core/lib/eventreceiver.py index 76b19957c..e942fcfe6 100644 --- a/openlp/core/lib/eventreceiver.py +++ b/openlp/core/lib/eventreceiver.py @@ -22,7 +22,9 @@ # with this program; if not, write to the Free Software Foundation, Inc., 59 # # Temple Place, Suite 330, Boston, MA 02111-1307 USA # ############################################################################### - +""" +Provide event handling code for OpenLP +""" import logging from PyQt4 import QtCore @@ -241,7 +243,11 @@ class Receiver(object): ``Receiver.send_message(u'<>', data)`` To receive a Message - ``QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'<>'), <>)`` + ``QtCore.QObject.connect( + Receiver.get_receiver(), + QtCore.SIGNAL(u'<>'), + <> + )`` """ eventreceiver = EventReceiver() diff --git a/openlp/core/lib/mediamanageritem.py b/openlp/core/lib/mediamanageritem.py index c0f016f94..94594c4f1 100644 --- a/openlp/core/lib/mediamanageritem.py +++ b/openlp/core/lib/mediamanageritem.py @@ -22,7 +22,9 @@ # with this program; if not, write to the Free Software Foundation, Inc., 59 # # Temple Place, Suite 330, Boston, MA 02111-1307 USA # ############################################################################### - +""" +Provides the generic functions for interfacing plugins with the Media Manager. +""" import logging import os @@ -204,7 +206,9 @@ class MediaManagerItem(QtGui.QWidget): self.addListViewToToolBar() def addMiddleHeaderBar(self): - # Create buttons for the toolbar + """ + Create buttons for the media item toolbar + """ ## Import Button ## if self.hasImportIcon: self.addToolbarButton( @@ -267,6 +271,9 @@ class MediaManagerItem(QtGui.QWidget): u':/general/general_add.png', self.onAddClick) def addListViewToToolBar(self): + """ + Creates the main widget for listing items the media item is tracking + """ #Add the List widget self.ListView = self.ListViewWithDnD_class(self) self.ListView.uniformItemSizes = True @@ -357,6 +364,9 @@ class MediaManagerItem(QtGui.QWidget): return True def onFileClick(self): + """ + Add a file to the list widget to make it available for showing + """ files = QtGui.QFileDialog.getOpenFileNames( self, self.OnNewPrompt, SettingsManager.get_last_dir(self.settingsSection), @@ -370,6 +380,9 @@ class MediaManagerItem(QtGui.QWidget): self.settingsSection, self.getFileList()) def getFileList(self): + """ + Return the current list of files + """ count = 0 filelist = [] while count < self.ListView.count(): @@ -393,6 +406,15 @@ class MediaManagerItem(QtGui.QWidget): return False def IconFromFile(self, file, thumb): + """ + Create a thumbnail icon from a given file + + ``file`` + The file to create the icon from + + ``thumb`` + The filename to save the thumbnail to + """ icon = build_icon(unicode(file)) pixmap = icon.pixmap(QtCore.QSize(88, 50)) ext = os.path.splitext(thumb)[1].lower() @@ -420,6 +442,10 @@ class MediaManagerItem(QtGui.QWidget): u'to be defined by the plugin') def onPreviewClick(self): + """ + Preview an item by building a service item then adding that service + item to the preview slide controller. + """ if not self.ListView.selectedIndexes() and not self.remoteTriggered: QtGui.QMessageBox.information(self, translate('MediaManagerItem', 'No Items Selected'), @@ -433,6 +459,10 @@ class MediaManagerItem(QtGui.QWidget): self.parent.preview_controller.addServiceItem(service_item) def onLiveClick(self): + """ + Send an item live by building a service item then adding that service + item to the live slide controller. + """ if not self.ListView.selectedIndexes(): QtGui.QMessageBox.information(self, translate('MediaManagerItem', 'No Items Selected'), @@ -446,6 +476,9 @@ class MediaManagerItem(QtGui.QWidget): self.parent.live_controller.addServiceItem(service_item) def onAddClick(self): + """ + Add a selected item to the current service + """ if not self.ListView.selectedIndexes() and not self.remoteTriggered: QtGui.QMessageBox.information(self, translate('MediaManagerItem', 'No Items Selected'), @@ -470,6 +503,9 @@ class MediaManagerItem(QtGui.QWidget): self.parent.service_manager.addServiceItem(service_item) def onAddEditClick(self): + """ + Add a selected item to an existing item in the current service. + """ if not self.ListView.selectedIndexes() and not self.remoteTriggered: QtGui.QMessageBox.information(self, translate('MediaManagerItem', 'No items selected'), diff --git a/openlp/core/lib/plugin.py b/openlp/core/lib/plugin.py index 0c22723a4..a5d712dfb 100644 --- a/openlp/core/lib/plugin.py +++ b/openlp/core/lib/plugin.py @@ -22,7 +22,9 @@ # with this program; if not, write to the Free Software Foundation, Inc., 59 # # Temple Place, Suite 330, Boston, MA 02111-1307 USA # ############################################################################### - +""" +Provide the generic plugin functionality for OpenLP plugins. +""" import logging from PyQt4 import QtCore diff --git a/openlp/core/lib/settingsmanager.py b/openlp/core/lib/settingsmanager.py index b3d16595e..74a5d4866 100644 --- a/openlp/core/lib/settingsmanager.py +++ b/openlp/core/lib/settingsmanager.py @@ -22,7 +22,12 @@ # with this program; if not, write to the Free Software Foundation, Inc., 59 # # Temple Place, Suite 330, Boston, MA 02111-1307 USA # ############################################################################### - +""" +Provide handling for persisting OpenLP settings. OpenLP uses QSettings to +manage settings persistence. QSettings provides a single API for saving and +retrieving settings from the application but writes to disk in an OS dependant +format. +""" import os from PyQt4 import QtCore @@ -56,6 +61,9 @@ class SettingsManager(object): u'user interface/preview panel', QtCore.QVariant(True)).toBool() def togglePreviewPanel(self, isVisible): + """ + Toggle the preview panel visibility. + """ QtCore.QSettings().setValue(u'user interface/preview panel', QtCore.QVariant(isVisible)) diff --git a/openlp/core/lib/themexmlhandler.py b/openlp/core/lib/themexmlhandler.py index b2850d6ec..55ddc2838 100644 --- a/openlp/core/lib/themexmlhandler.py +++ b/openlp/core/lib/themexmlhandler.py @@ -22,7 +22,9 @@ # with this program; if not, write to the Free Software Foundation, Inc., 59 # # Temple Place, Suite 330, Boston, MA 02111-1307 USA # ############################################################################### - +""" +Provide the theme XML and handling functions for OpenLP v2 themes. +""" import os from xml.dom.minidom import Document diff --git a/openlp/core/lib/toolbar.py b/openlp/core/lib/toolbar.py index b2b05b8c0..a2979746e 100644 --- a/openlp/core/lib/toolbar.py +++ b/openlp/core/lib/toolbar.py @@ -22,7 +22,9 @@ # with this program; if not, write to the Free Software Foundation, Inc., 59 # # Temple Place, Suite 330, Boston, MA 02111-1307 USA # ############################################################################### - +""" +Provide common toolbar handling for OpenLP +""" import logging from PyQt4 import QtCore, QtGui From 3cee3f0f8eb5ec6f9812bbc2ff86720ea00d744d Mon Sep 17 00:00:00 2001 From: Jon Tibble Date: Fri, 25 Jun 2010 01:25:21 +0100 Subject: [PATCH 02/12] Fix grammo --- openlp/core/lib/serviceitem.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openlp/core/lib/serviceitem.py b/openlp/core/lib/serviceitem.py index d9c434987..dfcad984a 100644 --- a/openlp/core/lib/serviceitem.py +++ b/openlp/core/lib/serviceitem.py @@ -304,7 +304,7 @@ class ServiceItem(object): def merge(self, other): """ Updates the _uuid with the value from the original one - The _uuid is unique for a give service item but this allows one to + The _uuid is unique for a given service item but this allows one to replace an original version. """ self._uuid = other._uuid From 7c873ada587f42225ab913ed97dd6ba38f08aecb Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Fri, 25 Jun 2010 17:50:35 +0100 Subject: [PATCH 03/12] Fix bug #598415 --- openlp/core/ui/serviceitemeditform.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/openlp/core/ui/serviceitemeditform.py b/openlp/core/ui/serviceitemeditform.py index 1ea829f81..d667507af 100644 --- a/openlp/core/ui/serviceitemeditform.py +++ b/openlp/core/ui/serviceitemeditform.py @@ -73,6 +73,10 @@ class ServiceItemEditForm(QtGui.QDialog, Ui_ServiceItemEditDialog): for frame in self.itemList: item_name = QtGui.QListWidgetItem(frame[u'title']) self.listWidget.addItem(item_name) + if self.listWidget.count() == 1: + self.deleteButton.setEnabled(False) + else: + self.deleteButton.setEnabled(True) def onItemDelete(self): """ From 1800ae4ddbe7f4eda60964b14b8329781d42b62e Mon Sep 17 00:00:00 2001 From: andreas Date: Fri, 25 Jun 2010 20:18:52 +0200 Subject: [PATCH 04/12] improvement in regard to bug #598415 --- openlp/core/ui/serviceitemeditform.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/openlp/core/ui/serviceitemeditform.py b/openlp/core/ui/serviceitemeditform.py index d667507af..4355ab797 100644 --- a/openlp/core/ui/serviceitemeditform.py +++ b/openlp/core/ui/serviceitemeditform.py @@ -74,8 +74,12 @@ class ServiceItemEditForm(QtGui.QDialog, Ui_ServiceItemEditDialog): item_name = QtGui.QListWidgetItem(frame[u'title']) self.listWidget.addItem(item_name) if self.listWidget.count() == 1: + self.downButton.setEnabled(False) + self.upButton.setEnabled(False) self.deleteButton.setEnabled(False) else: + self.downButton.setEnabled(True) + self.upButton.setEnabled(True) self.deleteButton.setEnabled(True) def onItemDelete(self): From 4d1a7e8b4181e83052039572e52e675c1b992ca5 Mon Sep 17 00:00:00 2001 From: Jon Tibble Date: Fri, 25 Jun 2010 20:01:03 +0100 Subject: [PATCH 05/12] Cleanup last few commits --- openlp/plugins/bibles/lib/osis.py | 3 ++- openlp/plugins/songs/lib/songimport.py | 2 -- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/openlp/plugins/bibles/lib/osis.py b/openlp/plugins/bibles/lib/osis.py index 5b3324e00..844d31052 100644 --- a/openlp/plugins/bibles/lib/osis.py +++ b/openlp/plugins/bibles/lib/osis.py @@ -68,7 +68,8 @@ class OSISBible(BibleDB): self.q1_regex = re.compile(r'') self.q2_regex = re.compile(r'') self.trans_regex = re.compile(r'(.*?)') - self.divineName_regex = re.compile(r'(.*?)') + self.divineName_regex = re.compile( + r'(.*?)') self.spaces_regex = re.compile(r'([ ]{2,})') self.books = {} filepath = os.path.join( diff --git a/openlp/plugins/songs/lib/songimport.py b/openlp/plugins/songs/lib/songimport.py index ede946dc7..654c9c4e7 100644 --- a/openlp/plugins/songs/lib/songimport.py +++ b/openlp/plugins/songs/lib/songimport.py @@ -25,8 +25,6 @@ import re -from PyQt4 import QtGui - from openlp.core.lib import SongXMLBuilder, translate from openlp.plugins.songs.lib import VerseType from openlp.plugins.songs.lib.models import Song, Author, Topic, Book From 217b40c26f0fd870b50e7ff3a44257d3101b93a3 Mon Sep 17 00:00:00 2001 From: Jonathan Corwin Date: Fri, 25 Jun 2010 21:20:03 +0100 Subject: [PATCH 06/12] Bug 598361 - Preview presentation error. Ensure presentations close correctly --- openlp/core/ui/slidecontroller.py | 14 +++++++++----- .../plugins/presentations/lib/impresscontroller.py | 9 ++------- .../plugins/presentations/lib/messagelistener.py | 13 ++++++------- 3 files changed, 17 insertions(+), 19 deletions(-) diff --git a/openlp/core/ui/slidecontroller.py b/openlp/core/ui/slidecontroller.py index 08c231cd5..c2ec38069 100644 --- a/openlp/core/ui/slidecontroller.py +++ b/openlp/core/ui/slidecontroller.py @@ -519,9 +519,13 @@ class SlideController(QtGui.QWidget): """ log.debug(u'processManagerItem') self.onStopLoop() - #If old item was a command tell it to stop - if self.serviceItem and self.serviceItem.is_command(): - self.onMediaStop() + #If old item was a command tell it to stop + if self.serviceItem: + if self.serviceItem.is_command(): + Receiver.send_message(u'%s_stop' % + self.serviceItem.name.lower(), [serviceItem, self.isLive]) + if self.serviceItem.is_media(): + self.onMediaStop() if serviceItem.is_media(): self.onMediaStart(serviceItem) if self.isLive: @@ -827,7 +831,7 @@ class SlideController(QtGui.QWidget): return Receiver.send_message(u'%s_next' % self.serviceItem.name.lower(), [self.serviceItem, self.isLive]) - if self.serviceItem.is_command(): + if self.serviceItem.is_command() and self.isLive: self.updatePreview() else: row = self.PreviewListWidget.currentRow() + 1 @@ -851,7 +855,7 @@ class SlideController(QtGui.QWidget): return Receiver.send_message(u'%s_previous' % self.serviceItem.name.lower(), [self.serviceItem, self.isLive]) - if self.serviceItem.is_command(): + if self.serviceItem.is_command() and self.isLive: self.updatePreview() else: row = self.PreviewListWidget.currentRow() - 1 diff --git a/openlp/plugins/presentations/lib/impresscontroller.py b/openlp/plugins/presentations/lib/impresscontroller.py index 6cb8c349c..52de42ca7 100644 --- a/openlp/plugins/presentations/lib/impresscontroller.py +++ b/openlp/plugins/presentations/lib/impresscontroller.py @@ -132,18 +132,13 @@ class ImpressController(PresentationController): def get_com_desktop(self): log.debug(u'get COM Desktop OpenOffice') - try: - desktop = self.manager.createInstance(u'com.sun.star.frame.Desktop') - return desktop - except: - log.exception(u'Failed to get COM desktop') - return None + return self.manager.createInstance(u'com.sun.star.frame.Desktop') def get_com_servicemanager(self): log.debug(u'get_com_servicemanager openoffice') try: return Dispatch(u'com.sun.star.ServiceManager') - except: + except pywintypes.com_error: log.exception(u'Failed to get COM service manager') return None diff --git a/openlp/plugins/presentations/lib/messagelistener.py b/openlp/plugins/presentations/lib/messagelistener.py index 13a589ec3..2f8a1aec7 100644 --- a/openlp/plugins/presentations/lib/messagelistener.py +++ b/openlp/plugins/presentations/lib/messagelistener.py @@ -70,16 +70,16 @@ class Controller(object): if self.doc.slidenumber > 1: self.doc.goto_slide(self.doc.slidenumber) - def slide(self, slide, live): - log.debug(u'Live = %s, slide' % live) - if not live: + def slide(self, slide): + log.debug(u'Live = %s, slide' % self.is_live) + if not self.is_live: return if self.doc.is_blank(): self.doc.slidenumber = int(slide) + 1 return self.activate() self.doc.goto_slide(int(slide) + 1) - self.doc.poll_slidenumber(live) + self.doc.poll_slidenumber(self.is_live) def first(self): """ @@ -248,11 +248,10 @@ class MessageListener(object): def slide(self, message): is_live = message[1] slide = message[2] - item = message[0] if is_live: - self.live_handler.slide(slide, item) + self.live_handler.slide(slide) else: - self.preview_handler.slide(slide, item) + self.preview_handler.slide(slide) def first(self, message): is_live = message[1] From d4b70b34e76b1868b997082de685433779735061 Mon Sep 17 00:00:00 2001 From: Jonathan Corwin Date: Sat, 26 Jun 2010 12:16:59 +0100 Subject: [PATCH 07/12] sofimport error trap if ooo not installed --- openlp/plugins/songs/lib/sofimport.py | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/openlp/plugins/songs/lib/sofimport.py b/openlp/plugins/songs/lib/sofimport.py index 8ba5c31cf..da56580aa 100644 --- a/openlp/plugins/songs/lib/sofimport.py +++ b/openlp/plugins/songs/lib/sofimport.py @@ -42,9 +42,14 @@ if os.name == u'nt': PAGE_AFTER = 5 PAGE_BOTH = 6 else: - from com.sun.star.awt.FontWeight import BOLD - from com.sun.star.awt.FontSlant import ITALIC - from com.sun.star.style.BreakType import PAGE_BEFORE, PAGE_AFTER, PAGE_BOTH + try: + from com.sun.star.awt.FontWeight import BOLD + from com.sun.star.awt.FontSlant import ITALIC + from com.sun.star.style.BreakType import PAGE_BEFORE, PAGE_AFTER, \ + PAGE_BOTH + except ImportError: + pass + class SofImport(OooImport): """ From 696c413ceed630cd1c67713c1ecb42d1fa958bcb Mon Sep 17 00:00:00 2001 From: andreas Date: Sat, 26 Jun 2010 18:08:38 +0200 Subject: [PATCH 08/12] Improved delete button behaviour --- openlp/core/ui/serviceitemeditform.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/openlp/core/ui/serviceitemeditform.py b/openlp/core/ui/serviceitemeditform.py index 4355ab797..098701ef1 100644 --- a/openlp/core/ui/serviceitemeditform.py +++ b/openlp/core/ui/serviceitemeditform.py @@ -88,9 +88,13 @@ class ServiceItemEditForm(QtGui.QDialog, Ui_ServiceItemEditDialog): """ items = self.listWidget.selectedItems() for item in items: - row = self.listWidget.row(item) + row = self.listWidget.row(item) self.itemList.remove(self.itemList[row]) self.loadData() + if row == self.listWidget.count(): + self.listWidget.setCurrentRow(row - 1) + else: + self.listWidget.setCurrentRow(row) def onItemUp(self): """ From 9c4f565776e5ec5fd2382573f2563250051e122f Mon Sep 17 00:00:00 2001 From: andreas Date: Sat, 26 Jun 2010 18:13:52 +0200 Subject: [PATCH 09/12] fixed double spaces --- openlp/core/ui/serviceitemeditform.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/openlp/core/ui/serviceitemeditform.py b/openlp/core/ui/serviceitemeditform.py index 098701ef1..6a95e875e 100644 --- a/openlp/core/ui/serviceitemeditform.py +++ b/openlp/core/ui/serviceitemeditform.py @@ -102,7 +102,7 @@ class ServiceItemEditForm(QtGui.QDialog, Ui_ServiceItemEditDialog): """ items = self.listWidget.selectedItems() for item in items: - row = self.listWidget.row(item) + row = self.listWidget.row(item) if row > 0: temp = self.itemList[row] self.itemList.remove(self.itemList[row]) @@ -116,7 +116,7 @@ class ServiceItemEditForm(QtGui.QDialog, Ui_ServiceItemEditDialog): """ items = self.listWidget.selectedItems() for item in items: - row = self.listWidget.row(item) + row = self.listWidget.row(item) if row < len(self.itemList) and row is not -1: temp = self.itemList[row] self.itemList.remove(self.itemList[row]) From 7cf31532b84feb51a15c3d88c57342f1d54cf8c5 Mon Sep 17 00:00:00 2001 From: Jonathan Corwin Date: Sat, 26 Jun 2010 21:34:26 +0100 Subject: [PATCH 10/12] Remove error trace if no impress --- .../presentations/lib/impresscontroller.py | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/openlp/plugins/presentations/lib/impresscontroller.py b/openlp/plugins/presentations/lib/impresscontroller.py index 52de42ca7..4cbadc9dd 100644 --- a/openlp/plugins/presentations/lib/impresscontroller.py +++ b/openlp/plugins/presentations/lib/impresscontroller.py @@ -42,9 +42,13 @@ from openlp.core.lib import resize_image if os.name == u'nt': from win32com.client import Dispatch else: - import uno - from com.sun.star.beans import PropertyValue - + try: + import uno + from com.sun.star.beans import PropertyValue + uno_available = True + except ImportError: + uno_available = False + from PyQt4 import QtCore from presentationcontroller import PresentationController, PresentationDocument @@ -78,9 +82,7 @@ class ImpressController(PresentationController): if os.name == u'nt': return self.get_com_servicemanager() is not None else: - # If not windows, and we've got this far then probably - # installed else the import uno would likely have failed - return True + return uno_available def start_process(self): """ @@ -322,7 +324,10 @@ class ImpressDocument(PresentationDocument): Returns true if screen is blank """ log.debug(u'is blank OpenOffice') - return self.control.isPaused() + if self.control: + return self.control.isPaused() + else: + return False def stop_presentation(self): log.debug(u'stop presentation OpenOffice') From b188592c327dee9c9f22c9785682fbabec7e3f32 Mon Sep 17 00:00:00 2001 From: Raoul Snyman Date: Sun, 27 Jun 2010 14:49:01 +0200 Subject: [PATCH 11/12] Fixed up problems with version checking. --- openlp/.version | 2 +- openlp/core/ui/mainwindow.py | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/openlp/.version b/openlp/.version index 2007f03af..8fdcf3869 100644 --- a/openlp/.version +++ b/openlp/.version @@ -1 +1 @@ -1.9.1-bzr821 +1.9.2 diff --git a/openlp/core/ui/mainwindow.py b/openlp/core/ui/mainwindow.py index 0f21b7307..7f1c0408b 100644 --- a/openlp/core/ui/mainwindow.py +++ b/openlp/core/ui/mainwindow.py @@ -63,7 +63,7 @@ class VersionThread(QtCore.QThread): self.parent = parent self.app_version = app_version self.version_splitter = re.compile( - r'([0-9]+).([0-9]+).([0-9]+)(?:-bzr([0-9]+))') + r'([0-9]+).([0-9]+).([0-9]+)(?:-bzr([0-9]+))?') def run(self): """ @@ -79,14 +79,14 @@ class VersionThread(QtCore.QThread): remote_version[u'major'] = int(match.group(1)) remote_version[u'minor'] = int(match.group(2)) remote_version[u'release'] = int(match.group(3)) - if len(match.groups()) > 3: + if len(match.groups()) > 3 and match.group(4): remote_version[u'revision'] = int(match.group(4)) match = self.version_splitter.match(self.app_version[u'full']) if match: local_version[u'major'] = int(match.group(1)) local_version[u'minor'] = int(match.group(2)) local_version[u'release'] = int(match.group(3)) - if len(match.groups()) > 3: + if len(match.groups()) > 3 and match.group(4): local_version[u'revision'] = int(match.group(4)) if remote_version[u'major'] > local_version[u'major'] or \ remote_version[u'minor'] > local_version[u'minor'] or \ From 9a2b05f830fcad1135c298288466c7b065166223 Mon Sep 17 00:00:00 2001 From: Jonathan Corwin Date: Sun, 27 Jun 2010 23:34:33 +0100 Subject: [PATCH 12/12] Prevent crash if OpenOffice not installed on Windows --- openlp/plugins/presentations/lib/impresscontroller.py | 1 + 1 file changed, 1 insertion(+) diff --git a/openlp/plugins/presentations/lib/impresscontroller.py b/openlp/plugins/presentations/lib/impresscontroller.py index 4cbadc9dd..c4250f27a 100644 --- a/openlp/plugins/presentations/lib/impresscontroller.py +++ b/openlp/plugins/presentations/lib/impresscontroller.py @@ -41,6 +41,7 @@ from openlp.core.lib import resize_image if os.name == u'nt': from win32com.client import Dispatch + import pywintypes else: try: import uno