mirror of
https://github.com/ciromattia/kcc
synced 2026-10-03 16:12:31 +00:00
"Crash like professional" - Improved error handling
This commit is contained in:
+6
-4
@@ -135,10 +135,8 @@ class WorkerThread(QtCore.QThread):
|
|||||||
except Exception as err:
|
except Exception as err:
|
||||||
self.errors = True
|
self.errors = True
|
||||||
type_, value_, traceback_ = sys.exc_info()
|
type_, value_, traceback_ = sys.exc_info()
|
||||||
QtGui.QMessageBox.critical(MainWindow, 'KCC Error',
|
self.emit(QtCore.SIGNAL("showDialog"), "Error on file %s:\n%s\nTraceback:\n%s"
|
||||||
"Error on file %s:\n%s\nTraceback:\n%s"
|
% (jobargv[-1], str(err), traceback.format_tb(traceback_)))
|
||||||
% (jobargv[-1], str(err), traceback.format_tb(traceback_)),
|
|
||||||
QtGui.QMessageBox.Ok)
|
|
||||||
self.emit(QtCore.SIGNAL("addMessage"), 'KCC failed to create EPUB!', 'error')
|
self.emit(QtCore.SIGNAL("addMessage"), 'KCC failed to create EPUB!', 'error')
|
||||||
if not self.errors:
|
if not self.errors:
|
||||||
if str(GUI.FormatBox.currentText()) == 'CBZ':
|
if str(GUI.FormatBox.currentText()) == 'CBZ':
|
||||||
@@ -343,6 +341,9 @@ class Ui_KCC(object):
|
|||||||
GUI.JobList.addItem(item)
|
GUI.JobList.addItem(item)
|
||||||
GUI.JobList.scrollToBottom()
|
GUI.JobList.scrollToBottom()
|
||||||
|
|
||||||
|
def showDialog(self, message):
|
||||||
|
QtGui.QMessageBox.critical(MainWindow, 'KCC Error', message, QtGui.QMessageBox.Ok)
|
||||||
|
|
||||||
def updateProgressbar(self, new=False, status=False):
|
def updateProgressbar(self, new=False, status=False):
|
||||||
if new == "status":
|
if new == "status":
|
||||||
pass
|
pass
|
||||||
@@ -413,6 +414,7 @@ class Ui_KCC(object):
|
|||||||
KCC.connect(self.worker, QtCore.SIGNAL("progressBarTick"), self.updateProgressbar)
|
KCC.connect(self.worker, QtCore.SIGNAL("progressBarTick"), self.updateProgressbar)
|
||||||
KCC.connect(self.worker, QtCore.SIGNAL("modeConvert"), self.modeConvert)
|
KCC.connect(self.worker, QtCore.SIGNAL("modeConvert"), self.modeConvert)
|
||||||
KCC.connect(self.worker, QtCore.SIGNAL("addMessage"), self.addMessage)
|
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.worker, QtCore.SIGNAL("hideProgressBar"), self.hideProgressBar)
|
||||||
KCC.connect(self.versionCheck, QtCore.SIGNAL("addMessage"), self.addMessage)
|
KCC.connect(self.versionCheck, QtCore.SIGNAL("addMessage"), self.addMessage)
|
||||||
KCC.closeEvent = self.saveSettings
|
KCC.closeEvent = self.saveSettings
|
||||||
|
|||||||
+9
-1
@@ -358,7 +358,11 @@ def dirImgProcess(path):
|
|||||||
GUI.emit(QtCore.SIGNAL("progressBarTick"))
|
GUI.emit(QtCore.SIGNAL("progressBarTick"))
|
||||||
pool.join()
|
pool.join()
|
||||||
queue.close()
|
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 = filter(None, splitpages)
|
||||||
splitpages.sort()
|
splitpages.sort()
|
||||||
for page in splitpages:
|
for page in splitpages:
|
||||||
@@ -572,6 +576,7 @@ def getWorkFolder(afile):
|
|||||||
sanitizeTreeBeforeConversion(fullPath)
|
sanitizeTreeBeforeConversion(fullPath)
|
||||||
return workdir
|
return workdir
|
||||||
except OSError:
|
except OSError:
|
||||||
|
rmtree(workdir)
|
||||||
raise
|
raise
|
||||||
elif afile.lower().endswith('.pdf'):
|
elif afile.lower().endswith('.pdf'):
|
||||||
pdf = pdfjpgextract.PdfJpgExtract(afile)
|
pdf = pdfjpgextract.PdfJpgExtract(afile)
|
||||||
@@ -582,10 +587,12 @@ def getWorkFolder(afile):
|
|||||||
try:
|
try:
|
||||||
path = cbx.extract(workdir)
|
path = cbx.extract(workdir)
|
||||||
except OSError:
|
except OSError:
|
||||||
|
rmtree(workdir)
|
||||||
print 'Unrar not found, please download from ' + \
|
print 'Unrar not found, please download from ' + \
|
||||||
'http://www.rarlab.com/download.htm and put into your PATH.'
|
'http://www.rarlab.com/download.htm and put into your PATH.'
|
||||||
sys.exit(21)
|
sys.exit(21)
|
||||||
else:
|
else:
|
||||||
|
rmtree(workdir)
|
||||||
raise TypeError
|
raise TypeError
|
||||||
move(path, path + "_temp")
|
move(path, path + "_temp")
|
||||||
move(path + "_temp", os.path.join(path, 'OEBPS', 'Images'))
|
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 root, dirs, files in os.walk(filetree, False):
|
||||||
for name in files:
|
for name in files:
|
||||||
os.chmod(os.path.join(root, name), stat.S_IWRITE | stat.S_IREAD)
|
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:
|
if os.path.getsize(os.path.join(root, name)) == 0:
|
||||||
os.remove(os.path.join(root, name))
|
os.remove(os.path.join(root, name))
|
||||||
for name in dirs:
|
for name in dirs:
|
||||||
|
|||||||
@@ -116,11 +116,18 @@ class ComicPage:
|
|||||||
self.profile_label, self.size, self.palette, self.gamma, self.panelviewsize = device
|
self.profile_label, self.size, self.palette, self.gamma, self.panelviewsize = device
|
||||||
except KeyError:
|
except KeyError:
|
||||||
raise RuntimeError('Unexpected output device %s' % device)
|
raise RuntimeError('Unexpected output device %s' % device)
|
||||||
|
# Detect corrupted files - Phase 2
|
||||||
try:
|
try:
|
||||||
self.origFileName = source
|
self.origFileName = source
|
||||||
self.image = Image.open(source)
|
self.image = Image.open(source)
|
||||||
except IOError:
|
except IOError:
|
||||||
raise RuntimeError('Cannot read image file %s' % source)
|
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')
|
self.image = self.image.convert('RGB')
|
||||||
|
|
||||||
def saveToDir(self, targetdir, forcepng, color, sufix=None):
|
def saveToDir(self, targetdir, forcepng, color, sufix=None):
|
||||||
|
|||||||
Reference in New Issue
Block a user