From bfba66d47dbb766f34035fac063223376ce23df4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Jastrz=C4=99bski?= Date: Sun, 4 Jan 2015 14:23:03 +0100 Subject: [PATCH] Improved KindleGen detection --- kcc/KCC_gui.py | 75 ++++++++++++++++++++++++++++++-------------------- 1 file changed, 45 insertions(+), 30 deletions(-) diff --git a/kcc/KCC_gui.py b/kcc/KCC_gui.py index ddf1e6c..2a3780e 100644 --- a/kcc/KCC_gui.py +++ b/kcc/KCC_gui.py @@ -931,15 +931,19 @@ class KCCGUI(KCC_ui.Ui_KCC): self.addMessage('Target resolution is not set!', 'error') self.needClean = True return - if str(GUI.FormatBox.currentText()) == 'MOBI' and not GUI.KindleGen: - self.addMessage('Cannot find ' - 'KindleGen! MOBI conversion is not possible!', 'error') - if sys.platform.startswith('win'): - self.addMessage('Download it and place EXE in KCC directory.', 'error') - else: - self.addMessage('Download it, and place executable in /usr/local/bin directory.', 'error') - self.needClean = True - return + if str(GUI.FormatBox.currentText()) == 'MOBI' and not self.KindleGen: + self.detectKindleGen() + if not self.KindleGen: + GUI.JobList.clear() + self.addMessage('Cannot find KindleGen!' + ' MOBI conversion is unavailable!', 'error') + if sys.platform.startswith('win'): + self.addMessage('Download it and place EXE in KCC directory.', 'error') + else: + self.addMessage('Download it and place executable in /usr/local/bin directory.', 'error') + self.needClean = True + return self.worker.start() def hideProgressBar(self): @@ -1027,6 +1031,36 @@ class KCCGUI(KCC_ui.Ui_KCC): self.saveSettings(None) sys.exit(0) + def detectKindleGen(self, startup=False): + if not sys.platform.startswith('win'): + try: + os.chmod('/usr/local/bin/kindlegen', 0o755) + except Exception: + pass + kindleGenExitCode = Popen('kindlegen -locale en', stdout=PIPE, stderr=STDOUT, shell=True) + if kindleGenExitCode.wait() == 0: + self.KindleGen = True + versionCheck = Popen('kindlegen -locale en', stdout=PIPE, stderr=STDOUT, shell=True) + for line in versionCheck.stdout: + line = line.decode("utf-8") + if 'Amazon kindlegen' in line: + versionCheck = line.split('V')[1].split(' ')[0] + if tuple(map(int, (versionCheck.split(".")))) < tuple(map(int, ('2.9'.split(".")))): + self.addMessage('Your KindleGen is outdated! Creating MOBI might fail.' + ' Please update KindleGen from Amazon\'s website.', 'warning') + break + else: + self.KindleGen = False + if startup: + self.addMessage('Cannot find ' + 'KindleGen! MOBI conversion will be unavailable!', 'error') + if sys.platform.startswith('win'): + self.addMessage('Download it and place EXE in KCC directory.', 'error') + else: + self.addMessage('Download it and place executable in /usr/local/bin directory.', 'error') + # noinspection PyArgumentList def __init__(self, KCCAplication, KCCWindow): global APP, MW, GUI @@ -1057,6 +1091,7 @@ class KCCGUI(KCC_ui.Ui_KCC): self.tray = SystemTrayIcon() self.conversionAlive = False self.needClean = True + self.KindleGen = False self.GammaValue = 1.0 self.completedWork = {} self.targetDirectory = '' @@ -1158,27 +1193,6 @@ class KCCGUI(KCC_ui.Ui_KCC): self.addMessage('Since you are new user of KCC please see few ' 'important tips.', 'info') - if not sys.platform.startswith('win'): - try: - os.chmod('/usr/local/bin/kindlegen', 0o755) - except Exception: - pass - kindleGenExitCode = Popen('kindlegen -locale en', stdout=PIPE, stderr=STDOUT, shell=True) - if kindleGenExitCode.wait() == 0: - self.KindleGen = True - versionCheck = Popen('kindlegen -locale en', stdout=PIPE, stderr=STDOUT, shell=True) - for line in versionCheck.stdout: - line = line.decode("utf-8") - if 'Amazon kindlegen' in line: - versionCheck = line.split('V')[1].split(' ')[0] - if tuple(map(int, (versionCheck.split(".")))) < tuple(map(int, ('2.9'.split(".")))): - self.addMessage('Your kindlegen is outdated! Creating MOBI might fail.' - ' Please update kindlegen from Amazon\'s website.', 'warning') - break - else: - self.KindleGen = False rarExitCode = Popen('unrar', stdout=PIPE, stderr=STDOUT, shell=True) rarExitCode = rarExitCode.wait() if rarExitCode == 0 or rarExitCode == 7: @@ -1195,6 +1209,7 @@ class KCCGUI(KCC_ui.Ui_KCC): self.sevenza = False self.addMessage('Cannot find 7za!' ' Processing of CB7/7Z files will be disabled.', 'warning') + self.detectKindleGen(True) APP.messageFromOtherInstance.connect(self.handleMessage) GUI.BasicModeButton.clicked.connect(self.modeBasic)