From 30de0d9916325cc9339da356f28ab9ecffec94eb Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Thu, 24 Mar 2011 21:37:02 +0100 Subject: [PATCH 1/3] fixed ticket 65 --- openlp/core/ui/servicemanager.py | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/openlp/core/ui/servicemanager.py b/openlp/core/ui/servicemanager.py index 56aa1bea1..01e64cebf 100644 --- a/openlp/core/ui/servicemanager.py +++ b/openlp/core/ui/servicemanager.py @@ -481,16 +481,14 @@ class ServiceManager(QtGui.QWidget): # 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) + log.debug(u'ServiceManager.saveFile - allowZip64 is %s' % allow_zip_64) zip = None try: zip = zipfile.ZipFile(path_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.writestr(service_file_name.encode(u'utf-8'), service_content) # Finally add all the listed media files. for path_from in write_list: zip.write(path_from, path_from.encode(u'utf-8')) @@ -566,24 +564,27 @@ class ServiceManager(QtGui.QWidget): Receiver.send_message(u'%s_service_load' % serviceItem.name.lower(), serviceItem) delete_file(p_file) + self.setFileName(fileName) + self.mainwindow.addRecentFile(fileName) + self.setModified(False) + QtCore.QSettings().setValue( + 'service/last file', QtCore.QVariant(fileName)) Receiver.send_message(u'cursor_normal') else: critical_error_message_box( message=translate('OpenLP.ServiceManager', 'File is not a valid service.')) log.exception(u'File contains no service data') - except (IOError, NameError): + except (IOError, NameError, zipfile.BadZipfile): + critical_error_message_box( + message=translate('OpenLP.ServiceManager', + 'File could not be opened because it is corrupt.')) log.exception(u'Problem loading service file %s' % fileName) finally: if fileTo: fileTo.close() if zip: zip.close() - self.setFileName(fileName) - self.mainwindow.addRecentFile(fileName) - self.setModified(False) - QtCore.QSettings(). \ - setValue(u'service/last file', QtCore.QVariant(fileName)) def loadLastFile(self): """ @@ -1256,4 +1257,5 @@ class ServiceManager(QtGui.QWidget): Print a Service Order Sheet. """ settingDialog = PrintServiceForm(self.mainwindow, self) - settingDialog.exec_() \ No newline at end of file + settingDialog.exec_() + From a9cd8db787df4a521cb83b05203a5a533b47f190 Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Thu, 24 Mar 2011 22:13:51 +0100 Subject: [PATCH 2/3] do not show error message when file does not exist, fixed return --- openlp/core/ui/servicemanager.py | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/openlp/core/ui/servicemanager.py b/openlp/core/ui/servicemanager.py index ae77f8aee..cc6ee2b3b 100644 --- a/openlp/core/ui/servicemanager.py +++ b/openlp/core/ui/servicemanager.py @@ -483,6 +483,7 @@ class ServiceManager(QtGui.QWidget): allow_zip_64 = (total_size > 2147483648 + len(service_content)) log.debug(u'ServiceManager.saveFile - allowZip64 is %s' % allow_zip_64) zip = None + success = True try: zip = zipfile.ZipFile(path_file_name, 'w', zipfile.ZIP_STORED, allow_zip_64) @@ -494,13 +495,16 @@ class ServiceManager(QtGui.QWidget): zip.write(path_from, path_from.encode(u'utf-8')) except IOError: log.exception(u'Failed to save service to disk') - return False + success = False finally: if zip: zip.close() - self.mainwindow.addRecentFile(path_file_name) - self.setModified(False) - return True + if success: + self.mainwindow.addRecentFile(path_file_name) + self.setModified(False) + else: + delete_file(path_file_name) + return success def saveFileAs(self): """ @@ -525,8 +529,9 @@ class ServiceManager(QtGui.QWidget): def loadFile(self, fileName): if not fileName: return False - else: - fileName = unicode(fileName) + fileName = unicode(fileName) + if not os.path.exists(fileName): + return False zip = None fileTo = None try: From 8aac2f77242895a94f06c1a4edd248d9d180d15b Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Fri, 25 Mar 2011 19:45:39 +0100 Subject: [PATCH 3/3] fixed exception --- openlp/core/lib/__init__.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/openlp/core/lib/__init__.py b/openlp/core/lib/__init__.py index 0d56d1ddd..ddb1ae9b1 100644 --- a/openlp/core/lib/__init__.py +++ b/openlp/core/lib/__init__.py @@ -316,8 +316,11 @@ def check_directory_exists(dir): Theme directory to make sure exists """ log.debug(u'check_directory_exists %s' % dir) - if not os.path.exists(dir): - os.makedirs(dir) + try: + if not os.path.exists(dir): + os.makedirs(dir) + except IOError: + pass from listwidgetwithdnd import ListWidgetWithDnD from displaytags import DisplayTags