diff --git a/kcc/KCC_gui.py b/kcc/KCC_gui.py index d00f4dc..4c1c4d7 100644 --- a/kcc/KCC_gui.py +++ b/kcc/KCC_gui.py @@ -205,6 +205,30 @@ class VersionThread(QtCore.QThread): 'Changelog)', 'warning') +class ProgressThread(QtCore.QThread): + def __init__(self): + QtCore.QThread.__init__(self) + self.running = False + self.content = None + self.progress = 0 + + def __del__(self): + self.wait() + + def run(self): + self.running = True + while self.running: + sleep(1) + if self.content: + self.emit(QtCore.SIGNAL("addMessage"), self.content + self.progress * '.', 'info', True) + self.progress += 1 + if self.progress == 4: + self.progress = 0 + + def stop(self): + self.running = False + + class WorkerSignals(QtCore.QObject): result = QtCore.pyqtSignal(list) @@ -296,6 +320,7 @@ class WorkerThread(QtCore.QThread): self.conversionAlive = GUIMain.conversionAlive def clean(self): + GUIMain.progress.content = '' GUIMain.needClean = True self.emit(QtCore.SIGNAL("hideProgressBar")) self.emit(QtCore.SIGNAL("addMessage"), 'Conversion interrupted.', 'error') @@ -359,9 +384,11 @@ class WorkerThread(QtCore.QThread): self.errors = False self.emit(QtCore.SIGNAL("addMessage"), 'Source: ' + job, 'info') if str(GUI.FormatBox.currentText()) == 'CBZ': - self.emit(QtCore.SIGNAL("addMessage"), 'Creating CBZ file...', 'info') + self.emit(QtCore.SIGNAL("addMessage"), 'Creating CBZ files', 'info') + GUIMain.progress.content = 'Creating CBZ files' else: - self.emit(QtCore.SIGNAL("addMessage"), 'Creating EPUB file...', 'info') + self.emit(QtCore.SIGNAL("addMessage"), 'Creating EPUB files', 'info') + GUIMain.progress.content = 'Creating EPUB files' jobargv = list(argv) jobargv.append(job) try: @@ -372,10 +399,12 @@ class WorkerThread(QtCore.QThread): self.clean() return else: + GUIMain.progress.content = '' self.errors = True self.emit(QtCore.SIGNAL("addMessage"), str(warn), 'warning') self.emit(QtCore.SIGNAL("addMessage"), 'Failed to create output file!', 'warning') except Exception as err: + GUIMain.progress.content = '' self.errors = True type_, value_, traceback_ = sys.exc_info() self.emit(QtCore.SIGNAL("showDialog"), "Error during conversion %s:\n\n%s\n\nTraceback:\n%s" @@ -388,15 +417,17 @@ class WorkerThread(QtCore.QThread): self.clean() return if not self.errors: + GUIMain.progress.content = '' if str(GUI.FormatBox.currentText()) == 'CBZ': - self.emit(QtCore.SIGNAL("addMessage"), 'Creating CBZ file... Done!', 'info', True) + self.emit(QtCore.SIGNAL("addMessage"), 'Creating CBZ files... Done!', 'info', True) else: - self.emit(QtCore.SIGNAL("addMessage"), 'Creating EPUB file... Done!', 'info', True) + self.emit(QtCore.SIGNAL("addMessage"), 'Creating EPUB files... Done!', 'info', True) if str(GUI.FormatBox.currentText()) == 'MOBI': self.emit(QtCore.SIGNAL("progressBarTick"), 'status', 'Creating MOBI files') self.emit(QtCore.SIGNAL("progressBarTick"), len(outputPath)*2+1) self.emit(QtCore.SIGNAL("progressBarTick")) - self.emit(QtCore.SIGNAL("addMessage"), 'Creating MOBI file...', 'info') + self.emit(QtCore.SIGNAL("addMessage"), 'Creating MOBI files', 'info') + GUIMain.progress.content = 'Creating MOBI files' self.workerOutput = [] # Number of KindleGen threads depends on the size of RAM self.pool.setMaxThreadCount(self.threadNumber) @@ -420,8 +451,10 @@ class WorkerThread(QtCore.QThread): self.clean() return if self.kindlegenErrorCode[0] == 0: - self.emit(QtCore.SIGNAL("addMessage"), 'Creating MOBI file... Done!', 'info', True) - self.emit(QtCore.SIGNAL("addMessage"), 'Cleaning MOBI file...', 'info') + GUIMain.progress.content = '' + self.emit(QtCore.SIGNAL("addMessage"), 'Creating MOBI files... Done!', 'info', True) + self.emit(QtCore.SIGNAL("addMessage"), 'Cleaning MOBI files', 'info') + GUIMain.progress.content = 'Cleaning MOBI files' self.workerOutput = [] # Multithreading KindleUnpack in current form is a waste of resources. # Unless we higly optimise KindleUnpack or drop 32bit support this will not change. @@ -438,13 +471,15 @@ class WorkerThread(QtCore.QThread): break if not self.errors: for item in outputPath: + GUIMain.progress.content = '' mobiPath = item.replace('.epub', '.mobi') os.remove(mobiPath + '_toclean') GUIMain.completedWork[os.path.basename(mobiPath).encode('utf-8')] = \ mobiPath.encode('utf-8') - self.emit(QtCore.SIGNAL("addMessage"), 'Cleaning MOBI file... Done!', 'info', + self.emit(QtCore.SIGNAL("addMessage"), 'Cleaning MOBI files... Done!', 'info', True) else: + GUIMain.progress.content = '' for item in outputPath: mobiPath = item.replace('.epub', '.mobi') if os.path.exists(mobiPath): @@ -453,6 +488,7 @@ class WorkerThread(QtCore.QThread): os.remove(mobiPath + '_toclean') self.emit(QtCore.SIGNAL("addMessage"), 'KindleUnpack failed to clean MOBI file!', 'error') else: + GUIMain.progress.content = '' epubSize = (os.path.getsize(self.kindlegenErrorCode[2]))/1024/1024 for item in outputPath: if os.path.exists(item): @@ -471,6 +507,7 @@ class WorkerThread(QtCore.QThread): else: for item in outputPath: GUIMain.completedWork[os.path.basename(item).encode('utf-8')] = item.encode('utf-8') + GUIMain.progress.content = '' self.emit(QtCore.SIGNAL("hideProgressBar")) GUIMain.needClean = True self.emit(QtCore.SIGNAL("addMessage"), 'All jobs completed.', 'info') @@ -796,6 +833,7 @@ class Ui_KCC(object): if not GUI.ConvertButton.isEnabled(): event.ignore() self.contentServer.stop() + self.progress.stop() self.settings.setValue('settingsVersion', __version__) self.settings.setValue('lastPath', self.lastPath) self.settings.setValue('lastDevice', GUI.DeviceBox.currentIndex()) @@ -868,6 +906,7 @@ class Ui_KCC(object): self.worker = WorkerThread() self.versionCheck = VersionThread() self.contentServer = WebServerThread() + self.progress = ProgressThread() self.conversionAlive = False self.needClean = True self.QualityBoxDisabled = False @@ -941,6 +980,7 @@ class Ui_KCC(object): KCC.connect(self.worker, QtCore.SIGNAL("hideProgressBar"), self.hideProgressBar) KCC.connect(self.versionCheck, QtCore.SIGNAL("addMessage"), self.addMessage) KCC.connect(self.contentServer, QtCore.SIGNAL("addMessage"), self.addMessage) + KCC.connect(self.progress, QtCore.SIGNAL("addMessage"), self.addMessage) KCC.closeEvent = self.saveSettings for f in formats: @@ -983,5 +1023,6 @@ class Ui_KCC(object): self.changeFormat() self.versionCheck.start() self.contentServer.start() + self.progress.start() self.hideProgressBar() self.worker.sync()