1
0
mirror of https://github.com/ciromattia/kcc synced 2026-05-28 02:03:20 +00:00

Conversion can be now interrupted

This commit is contained in:
Paweł Jastrzębski
2013-07-21 20:18:04 +02:00
parent f64fb1bee1
commit 08244e7fdc
2 changed files with 70 additions and 18 deletions
+66 -18
View File
@@ -27,6 +27,7 @@ import sys
import shutil import shutil
import traceback import traceback
import urllib2 import urllib2
import time
import comic2ebook import comic2ebook
import kindlestrip import kindlestrip
from image import ProfileData from image import ProfileData
@@ -101,6 +102,15 @@ class WorkerThread(QtCore.QThread):
def __del__(self): def __del__(self):
self.wait() self.wait()
def sync(self):
self.conversionAlive = self.parent.conversionAlive
def clean(self):
self.parent.needClean = True
self.emit(QtCore.SIGNAL("hideProgressBar"))
self.emit(QtCore.SIGNAL("addMessage"), '<b>Conversion interrupted.</b>', 'error')
self.emit(QtCore.SIGNAL("modeConvert"), True)
def run(self): def run(self):
self.emit(QtCore.SIGNAL("modeConvert"), False) self.emit(QtCore.SIGNAL("modeConvert"), False)
profile = ProfileData.ProfileLabels[str(GUI.DeviceBox.currentText())] profile = ProfileData.ProfileLabels[str(GUI.DeviceBox.currentText())]
@@ -138,8 +148,11 @@ class WorkerThread(QtCore.QThread):
argv.append("--forcecolor") argv.append("--forcecolor")
for i in range(GUI.JobList.count()): for i in range(GUI.JobList.count()):
currentJobs.append(str(GUI.JobList.item(i).text())) currentJobs.append(str(GUI.JobList.item(i).text()))
GUI.JobList.clear()
for job in currentJobs: for job in currentJobs:
time.sleep(1)
if not self.conversionAlive:
self.clean()
return
self.errors = False self.errors = False
self.emit(QtCore.SIGNAL("addMessage"), '<b>Source:</b> ' + job, 'info') self.emit(QtCore.SIGNAL("addMessage"), '<b>Source:</b> ' + job, 'info')
if str(GUI.FormatBox.currentText()) == 'CBZ': if str(GUI.FormatBox.currentText()) == 'CBZ':
@@ -152,15 +165,23 @@ class WorkerThread(QtCore.QThread):
outputPath = comic2ebook.main(jobargv, self) outputPath = comic2ebook.main(jobargv, self)
self.emit(QtCore.SIGNAL("hideProgressBar")) self.emit(QtCore.SIGNAL("hideProgressBar"))
except UserWarning as warn: except UserWarning as warn:
self.errors = True if not self.conversionAlive:
self.emit(QtCore.SIGNAL("addMessage"), str(warn), 'warning') self.clean()
self.emit(QtCore.SIGNAL("addMessage"), 'KCC failed to create output file!', 'warning') return
else:
self.errors = True
self.emit(QtCore.SIGNAL("addMessage"), str(warn), 'warning')
self.emit(QtCore.SIGNAL("addMessage"), 'KCC failed to create output file!', 'warning')
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()
self.emit(QtCore.SIGNAL("showDialog"), "Error during conversion %s:\n\n%s\n\nTraceback:\n%s" self.emit(QtCore.SIGNAL("showDialog"), "Error during conversion %s:\n\n%s\n\nTraceback:\n%s"
% (jobargv[-1], str(err), traceback.format_tb(traceback_))) % (jobargv[-1], str(err), traceback.format_tb(traceback_)))
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.conversionAlive:
os.remove(outputPath)
self.clean()
return
if not self.errors: if not self.errors:
if str(GUI.FormatBox.currentText()) == 'CBZ': if str(GUI.FormatBox.currentText()) == 'CBZ':
self.emit(QtCore.SIGNAL("addMessage"), 'Creating CBZ file... Done!', 'info', True) self.emit(QtCore.SIGNAL("addMessage"), 'Creating CBZ file... Done!', 'info', True)
@@ -188,6 +209,11 @@ class WorkerThread(QtCore.QThread):
# ERROR: Unknown generic error # ERROR: Unknown generic error
self.kindlegenErrorCode = 1 self.kindlegenErrorCode = 1
continue continue
if not self.conversionAlive:
os.remove(outputPath)
os.remove(outputPath.replace('.epub', '.mobi'))
self.clean()
return
if self.kindlegenErrorCode == 0: if self.kindlegenErrorCode == 0:
self.emit(QtCore.SIGNAL("addMessage"), 'Creating MOBI file... Done!', 'info', True) self.emit(QtCore.SIGNAL("addMessage"), 'Creating MOBI file... Done!', 'info', True)
self.emit(QtCore.SIGNAL("addMessage"), 'Removing SRCS header...', 'info') self.emit(QtCore.SIGNAL("addMessage"), 'Removing SRCS header...', 'info')
@@ -343,19 +369,33 @@ class Ui_KCC(object):
GUI.ClearButton.setEnabled(enable) GUI.ClearButton.setEnabled(enable)
GUI.FileButton.setEnabled(enable) GUI.FileButton.setEnabled(enable)
GUI.DeviceBox.setEnabled(enable) GUI.DeviceBox.setEnabled(enable)
GUI.ConvertButton.setEnabled(enable)
GUI.FormatBox.setEnabled(enable) GUI.FormatBox.setEnabled(enable)
GUI.OptionsBasic.setEnabled(enable) GUI.OptionsBasic.setEnabled(enable)
GUI.OptionsAdvanced.setEnabled(enable) GUI.OptionsAdvanced.setEnabled(enable)
GUI.OptionsAdvancedGamma.setEnabled(enable) GUI.OptionsAdvancedGamma.setEnabled(enable)
GUI.OptionsExpert.setEnabled(enable) GUI.OptionsExpert.setEnabled(enable)
if enable: if enable:
self.conversionAlive = False
self.worker.sync()
icon = QtGui.QIcon()
icon.addPixmap(QtGui.QPixmap(":/Other/icons/convert.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
GUI.ConvertButton.setIcon(icon)
GUI.ConvertButton.setText('Convert')
GUI.ConvertButton.setEnabled(True)
if self.currentMode == 1: if self.currentMode == 1:
self.modeBasic() self.modeBasic()
elif self.currentMode == 2: elif self.currentMode == 2:
self.modeAdvanced() self.modeAdvanced()
elif self.currentMode == 3: elif self.currentMode == 3:
self.modeExpert() self.modeExpert()
else:
self.conversionAlive = True
self.worker.sync()
icon = QtGui.QIcon()
icon.addPixmap(QtGui.QPixmap(":/Other/icons/clear.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
GUI.ConvertButton.setIcon(icon)
GUI.ConvertButton.setText('Abort')
GUI.ConvertButton.setEnabled(True)
def changeGamma(self, value): def changeGamma(self, value):
value = float(value) value = float(value)
@@ -441,19 +481,25 @@ class Ui_KCC(object):
GUI.ProgressBar.setValue(GUI.ProgressBar.value() + 1) GUI.ProgressBar.setValue(GUI.ProgressBar.value() + 1)
def convertStart(self): def convertStart(self):
if self.needClean: if self.conversionAlive:
self.needClean = False GUI.ConvertButton.setEnabled(False)
GUI.JobList.clear() self.addMessage('Process will be interrupted. Please wait.', 'warning')
if GUI.JobList.count() == 0: self.conversionAlive = False
self.addMessage('No files selected! Please choose files to convert.', 'error') self.worker.sync()
self.needClean = True else:
return if self.needClean:
if self.currentMode > 2 and (str(GUI.customWidth.text()) == '' or str(GUI.customHeight.text()) == ''): self.needClean = False
GUI.JobList.clear() GUI.JobList.clear()
self.addMessage('Target resolution is not set!', 'error') if GUI.JobList.count() == 0:
self.needClean = True self.addMessage('No files selected! Please choose files to convert.', 'error')
return self.needClean = True
self.worker.start() return
if self.currentMode > 2 and (str(GUI.customWidth.text()) == '' or str(GUI.customHeight.text()) == ''):
GUI.JobList.clear()
self.addMessage('Target resolution is not set!', 'error')
self.needClean = True
return
self.worker.start()
def hideProgressBar(self): def hideProgressBar(self):
GUI.ProgressBar.hide() GUI.ProgressBar.hide()
@@ -494,6 +540,7 @@ class Ui_KCC(object):
self.options = self.options.toPyObject() self.options = self.options.toPyObject()
self.worker = WorkerThread(self) self.worker = WorkerThread(self)
self.versionCheck = VersionThread(self) self.versionCheck = VersionThread(self)
self.conversionAlive = False
self.needClean = True self.needClean = True
self.addMessage('<b>Welcome!</b>', 'info') self.addMessage('<b>Welcome!</b>', 'info')
@@ -577,3 +624,4 @@ class Ui_KCC(object):
self.versionCheck.start() self.versionCheck.start()
self.hideProgressBar() self.hideProgressBar()
self.changeDevice(self.lastDevice) self.changeDevice(self.lastDevice)
self.worker.sync()
+4
View File
@@ -364,6 +364,10 @@ def dirImgProcess(path):
queue.get(True, 1) queue.get(True, 1)
except: except:
pass pass
if not GUI.conversionAlive:
pool.terminate()
rmtree(path)
raise UserWarning("Conversion interrupted.")
GUI.emit(QtCore.SIGNAL("progressBarTick")) GUI.emit(QtCore.SIGNAL("progressBarTick"))
pool.join() pool.join()
queue.close() queue.close()