1
0
mirror of https://github.com/ciromattia/kcc synced 2026-01-01 10:59:32 +00:00

"Crash like professional" - Improved error handling

This commit is contained in:
Paweł Jastrzębski
2013-06-18 15:52:21 +02:00
parent 8a9f11b0f5
commit 4b4424ae92
3 changed files with 22 additions and 5 deletions

View File

@@ -135,10 +135,8 @@ class WorkerThread(QtCore.QThread):
except Exception as err:
self.errors = True
type_, value_, traceback_ = sys.exc_info()
QtGui.QMessageBox.critical(MainWindow, 'KCC Error',
"Error on file %s:\n%s\nTraceback:\n%s"
% (jobargv[-1], str(err), traceback.format_tb(traceback_)),
QtGui.QMessageBox.Ok)
self.emit(QtCore.SIGNAL("showDialog"), "Error on file %s:\n%s\nTraceback:\n%s"
% (jobargv[-1], str(err), traceback.format_tb(traceback_)))
self.emit(QtCore.SIGNAL("addMessage"), 'KCC failed to create EPUB!', 'error')
if not self.errors:
if str(GUI.FormatBox.currentText()) == 'CBZ':
@@ -343,6 +341,9 @@ class Ui_KCC(object):
GUI.JobList.addItem(item)
GUI.JobList.scrollToBottom()
def showDialog(self, message):
QtGui.QMessageBox.critical(MainWindow, 'KCC Error', message, QtGui.QMessageBox.Ok)
def updateProgressbar(self, new=False, status=False):
if new == "status":
pass
@@ -413,6 +414,7 @@ class Ui_KCC(object):
KCC.connect(self.worker, QtCore.SIGNAL("progressBarTick"), self.updateProgressbar)
KCC.connect(self.worker, QtCore.SIGNAL("modeConvert"), self.modeConvert)
KCC.connect(self.worker, QtCore.SIGNAL("addMessage"), self.addMessage)
KCC.connect(self.worker, QtCore.SIGNAL("showDialog"), self.showDialog)
KCC.connect(self.worker, QtCore.SIGNAL("hideProgressBar"), self.hideProgressBar)
KCC.connect(self.versionCheck, QtCore.SIGNAL("addMessage"), self.addMessage)
KCC.closeEvent = self.saveSettings

View File

@@ -358,7 +358,11 @@ def dirImgProcess(path):
GUI.emit(QtCore.SIGNAL("progressBarTick"))
pool.join()
queue.close()
splitpages = splitpages.get()
try:
splitpages = splitpages.get()
except:
rmtree(path)
raise RuntimeError("One of workers crashed. Cause: " + str(sys.exc_info()[1]))
splitpages = filter(None, splitpages)
splitpages.sort()
for page in splitpages:
@@ -572,6 +576,7 @@ def getWorkFolder(afile):
sanitizeTreeBeforeConversion(fullPath)
return workdir
except OSError:
rmtree(workdir)
raise
elif afile.lower().endswith('.pdf'):
pdf = pdfjpgextract.PdfJpgExtract(afile)
@@ -582,10 +587,12 @@ def getWorkFolder(afile):
try:
path = cbx.extract(workdir)
except OSError:
rmtree(workdir)
print 'Unrar not found, please download from ' + \
'http://www.rarlab.com/download.htm and put into your PATH.'
sys.exit(21)
else:
rmtree(workdir)
raise TypeError
move(path, path + "_temp")
move(path + "_temp", os.path.join(path, 'OEBPS', 'Images'))
@@ -628,6 +635,7 @@ def sanitizeTreeBeforeConversion(filetree):
for root, dirs, files in os.walk(filetree, False):
for name in files:
os.chmod(os.path.join(root, name), stat.S_IWRITE | stat.S_IREAD)
# Detect corrupted files - Phase 1
if os.path.getsize(os.path.join(root, name)) == 0:
os.remove(os.path.join(root, name))
for name in dirs:

View File

@@ -116,11 +116,18 @@ class ComicPage:
self.profile_label, self.size, self.palette, self.gamma, self.panelviewsize = device
except KeyError:
raise RuntimeError('Unexpected output device %s' % device)
# Detect corrupted files - Phase 2
try:
self.origFileName = source
self.image = Image.open(source)
except IOError:
raise RuntimeError('Cannot read image file %s' % source)
# Detect corrupted files - Phase 3
try:
self.image.verify()
except:
raise RuntimeError('Image file %s is corrupted' % source)
self.image = Image.open(source)
self.image = self.image.convert('RGB')
def saveToDir(self, targetdir, forcepng, color, sufix=None):