- show a dialog when a corrupted service file is opened. http://support.openlp.org/issues/65

- removed the return from the except and attempt to remove service files when saving fails.

bzr-revno: 1424
This commit is contained in:
Andreas Preikschat 2011-03-26 19:22:28 +01:00
commit 29a013ee40
2 changed files with 27 additions and 18 deletions

View File

@ -316,8 +316,11 @@ def check_directory_exists(dir):
Theme directory to make sure exists Theme directory to make sure exists
""" """
log.debug(u'check_directory_exists %s' % dir) log.debug(u'check_directory_exists %s' % dir)
try:
if not os.path.exists(dir): if not os.path.exists(dir):
os.makedirs(dir) os.makedirs(dir)
except IOError:
pass
from listwidgetwithdnd import ListWidgetWithDnD from listwidgetwithdnd import ListWidgetWithDnD
from displaytags import DisplayTags from displaytags import DisplayTags

View File

@ -481,28 +481,30 @@ class ServiceManager(QtGui.QWidget):
# Usual Zip file cannot exceed 2GiB, file with Zip64 cannot be # Usual Zip file cannot exceed 2GiB, file with Zip64 cannot be
# extracted using unzip in UNIX. # extracted using unzip in UNIX.
allow_zip_64 = (total_size > 2147483648 + len(service_content)) allow_zip_64 = (total_size > 2147483648 + len(service_content))
log.debug(u'ServiceManager.saveFile - allowZip64 is %s' % log.debug(u'ServiceManager.saveFile - allowZip64 is %s' % allow_zip_64)
allow_zip_64)
zip = None zip = None
success = True
try: try:
zip = zipfile.ZipFile(path_file_name, 'w', zipfile.ZIP_STORED, zip = zipfile.ZipFile(path_file_name, 'w', zipfile.ZIP_STORED,
allow_zip_64) allow_zip_64)
# First we add service contents. # First we add service contents.
# We save ALL filenames into ZIP using UTF-8. # We save ALL filenames into ZIP using UTF-8.
zip.writestr(service_file_name.encode(u'utf-8'), zip.writestr(service_file_name.encode(u'utf-8'), service_content)
service_content)
# Finally add all the listed media files. # Finally add all the listed media files.
for path_from in write_list: for path_from in write_list:
zip.write(path_from, path_from.encode(u'utf-8')) zip.write(path_from, path_from.encode(u'utf-8'))
except IOError: except IOError:
log.exception(u'Failed to save service to disk') log.exception(u'Failed to save service to disk')
return False success = False
finally: finally:
if zip: if zip:
zip.close() zip.close()
if success:
self.mainwindow.addRecentFile(path_file_name) self.mainwindow.addRecentFile(path_file_name)
self.setModified(False) self.setModified(False)
return True else:
delete_file(path_file_name)
return success
def saveFileAs(self): def saveFileAs(self):
""" """
@ -527,8 +529,9 @@ class ServiceManager(QtGui.QWidget):
def loadFile(self, fileName): def loadFile(self, fileName):
if not fileName: if not fileName:
return False return False
else:
fileName = unicode(fileName) fileName = unicode(fileName)
if not os.path.exists(fileName):
return False
zip = None zip = None
fileTo = None fileTo = None
try: try:
@ -566,24 +569,27 @@ class ServiceManager(QtGui.QWidget):
Receiver.send_message(u'%s_service_load' % Receiver.send_message(u'%s_service_load' %
serviceItem.name.lower(), serviceItem) serviceItem.name.lower(), serviceItem)
delete_file(p_file) 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') Receiver.send_message(u'cursor_normal')
else: else:
critical_error_message_box( critical_error_message_box(
message=translate('OpenLP.ServiceManager', message=translate('OpenLP.ServiceManager',
'File is not a valid service.')) 'File is not a valid service.'))
log.exception(u'File contains no service data') 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) log.exception(u'Problem loading service file %s' % fileName)
finally: finally:
if fileTo: if fileTo:
fileTo.close() fileTo.close()
if zip: if zip:
zip.close() 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): def loadLastFile(self):
""" """