mirror of
https://github.com/ciromattia/kcc
synced 2026-01-31 01:17:50 +00:00
@@ -44,10 +44,10 @@ You can find the latest released binary at the following links:
|
||||
|
||||
### For running from source:
|
||||
- Python 3.3+
|
||||
- [PyQt5](http://www.riverbankcomputing.co.uk/software/pyqt/download5) 5.2.0+
|
||||
- [PyQt](http://www.riverbankcomputing.co.uk/software/pyqt/download5) 5.2.0+
|
||||
- [Pillow](http://pypi.python.org/pypi/Pillow/) 2.7.0+
|
||||
- [psutil](https://pypi.python.org/pypi/psutil) 2.0+
|
||||
- [python-slugify](http://pypi.python.org/pypi/python-slugify)
|
||||
- [python-slugify](http://pypi.python.org/pypi/python-slugify) 0.1.0+
|
||||
|
||||
On Debian based distributions these two commands should install all dependencies:
|
||||
```
|
||||
@@ -158,6 +158,10 @@ The app relies and includes the following scripts:
|
||||
* [Kobo Aura H2O](http://kcc.iosphe.re/Samples/Ubunchu!-KoAH2O.cbz)
|
||||
|
||||
## CHANGELOG
|
||||
####4.4.1:
|
||||
* Fixed problems with OSX GUI
|
||||
* Added one missing DLL to Windows installer
|
||||
|
||||
####4.4:
|
||||
* Improved speed and quality of conversion
|
||||
* Added RAR5 support
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
# PERFORMANCE OF THIS SOFTWARE.
|
||||
|
||||
__version__ = '4.4'
|
||||
__version__ = '4.4.1'
|
||||
__license__ = 'ISC'
|
||||
__copyright__ = '2012-2015, Ciro Mattia Gonano <ciromattia@gmail.com>, Pawel Jastrzebski <pawelj@iosphe.re>'
|
||||
__docformat__ = 'restructuredtext en'
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
# PERFORMANCE OF THIS SOFTWARE.
|
||||
|
||||
__version__ = '4.4'
|
||||
__version__ = '4.4.1'
|
||||
__license__ = 'ISC'
|
||||
__copyright__ = '2012-2015, Ciro Mattia Gonano <ciromattia@gmail.com>, Pawel Jastrzebski <pawelj@iosphe.re>'
|
||||
__docformat__ = 'restructuredtext en'
|
||||
|
||||
2
kcc.iss
2
kcc.iss
@@ -1,5 +1,5 @@
|
||||
#define MyAppName "Kindle Comic Converter"
|
||||
#define MyAppVersion "4.4"
|
||||
#define MyAppVersion "4.4.1"
|
||||
#define MyAppPublisher "Ciro Mattia Gonano, Paweł Jastrzębski"
|
||||
#define MyAppURL "http://kcc.iosphe.re/"
|
||||
#define MyAppExeName "KCC.exe"
|
||||
|
||||
2
kcc.py
2
kcc.py
@@ -18,7 +18,7 @@
|
||||
# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
# PERFORMANCE OF THIS SOFTWARE.
|
||||
|
||||
__version__ = '4.4'
|
||||
__version__ = '4.4.1'
|
||||
__license__ = 'ISC'
|
||||
__copyright__ = '2012-2015, Ciro Mattia Gonano <ciromattia@gmail.com>, Pawel Jastrzebski <pawelj@iosphe.re>'
|
||||
__docformat__ = 'restructuredtext en'
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
# PERFORMANCE OF THIS SOFTWARE.
|
||||
|
||||
__version__ = '4.4'
|
||||
__version__ = '4.4.1'
|
||||
__license__ = 'ISC'
|
||||
__copyright__ = '2012-2015, Ciro Mattia Gonano <ciromattia@gmail.com>, Pawel Jastrzebski <pawelj@iosphe.re>'
|
||||
__docformat__ = 'restructuredtext en'
|
||||
@@ -37,6 +37,7 @@ from PyQt5 import QtGui, QtCore, QtWidgets, QtNetwork
|
||||
from xml.dom.minidom import parse
|
||||
from psutil import Popen, Process
|
||||
from copy import copy
|
||||
from distutils.version import StrictVersion
|
||||
from .shared import md5Checksum, HTMLStripper
|
||||
from . import comic2ebook
|
||||
from . import KCC_rc_web
|
||||
@@ -103,7 +104,6 @@ class QMainWindowKCC(QtWidgets.QMainWindow):
|
||||
showDialog = QtCore.pyqtSignal(str, str)
|
||||
hideProgressBar = QtCore.pyqtSignal()
|
||||
forceShutdown = QtCore.pyqtSignal()
|
||||
dialogAnswer = QtCore.pyqtSignal(int)
|
||||
|
||||
|
||||
class Icons:
|
||||
@@ -233,6 +233,8 @@ class VersionThread(QtCore.QThread):
|
||||
QtCore.QThread.__init__(self)
|
||||
self.newVersion = ''
|
||||
self.md5 = ''
|
||||
self.barProgress = 0
|
||||
self.answer = None
|
||||
|
||||
def __del__(self):
|
||||
self.wait()
|
||||
@@ -244,22 +246,28 @@ class VersionThread(QtCore.QThread):
|
||||
except Exception:
|
||||
return
|
||||
latestVersion = XML.childNodes[0].getElementsByTagName('latest')[0].childNodes[0].toxml()
|
||||
if tuple(map(int, (latestVersion.split(".")))) > tuple(map(int, (__version__.split(".")))):
|
||||
if StrictVersion(latestVersion) > StrictVersion(__version__):
|
||||
if sys.platform.startswith('win'):
|
||||
self.newVersion = latestVersion
|
||||
self.md5 = XML.childNodes[0].getElementsByTagName('WindowsMD5')[0].childNodes[0].toxml()
|
||||
MW.showDialog.emit('<b>New version released!</b> <a href="https://github.com/ciromattia/kcc/releases/">'
|
||||
'See changelog.</a><<br/><br/>Installed version: ' + __version__ +
|
||||
'See changelog.</a><br/><br/>Installed version: ' + __version__ +
|
||||
'<br/>Current version: ' + latestVersion +
|
||||
'<br/><br/>Would you like to start automatic update?', 'question')
|
||||
self.getNewVersion()
|
||||
else:
|
||||
MW.addMessage.emit('<a href="http://kcc.iosphe.re/">'
|
||||
'<b>New version is available!</b></a> '
|
||||
'(<a href="https://github.com/ciromattia/kcc/releases/">'
|
||||
'Changelog</a>)', 'warning', False)
|
||||
|
||||
def getNewVersion(self, dialogAnswer):
|
||||
if dialogAnswer == QtWidgets.QMessageBox.Yes:
|
||||
def setAnswer(self, dialogAnswer):
|
||||
self.answer = dialogAnswer
|
||||
|
||||
def getNewVersion(self):
|
||||
while self.answer is None:
|
||||
sleep(1)
|
||||
if self.answer == QtWidgets.QMessageBox.Yes:
|
||||
try:
|
||||
MW.modeConvert.emit(-1)
|
||||
MW.progressBarTick.emit('Downloading update')
|
||||
@@ -278,9 +286,12 @@ class VersionThread(QtCore.QThread):
|
||||
MW.modeConvert.emit(1)
|
||||
|
||||
def getNewVersionTick(self, size, blockSize, totalSize):
|
||||
progress = int((size / (totalSize // blockSize)) * 100)
|
||||
if size == 0:
|
||||
MW.progressBarTick.emit(str(int(totalSize / blockSize)))
|
||||
MW.progressBarTick.emit('tick')
|
||||
MW.progressBarTick.emit('100')
|
||||
if progress > self.barProgress:
|
||||
self.barProgress = progress
|
||||
MW.progressBarTick.emit('tick')
|
||||
|
||||
|
||||
class ProgressThread(QtCore.QThread):
|
||||
@@ -884,9 +895,9 @@ class KCCGUI(KCC_ui.Ui_KCC):
|
||||
if kind == 'error':
|
||||
QtWidgets.QMessageBox.critical(MW, 'KCC - Error', message, QtWidgets.QMessageBox.Ok)
|
||||
elif kind == 'question':
|
||||
dialogResponse = QtWidgets.QMessageBox.question(MW, 'KCC - Question', message,
|
||||
QtWidgets.QMessageBox.Yes, QtWidgets.QMessageBox.No)
|
||||
MW.dialogAnswer.emit(dialogResponse)
|
||||
GUI.versionCheck.setAnswer(QtWidgets.QMessageBox.question(MW, 'KCC - Question', message,
|
||||
QtWidgets.QMessageBox.Yes,
|
||||
QtWidgets.QMessageBox.No))
|
||||
|
||||
def updateProgressbar(self, command):
|
||||
if command == 'tick':
|
||||
@@ -1045,11 +1056,9 @@ class KCCGUI(KCC_ui.Ui_KCC):
|
||||
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(".")))):
|
||||
if StrictVersion(versionCheck) < StrictVersion('2.9'):
|
||||
self.addMessage('Your <a href="http://www.amazon.com/gp/feature.html?ie=UTF8&docId='
|
||||
'1000765211">KindleGen</a> is outdated! Creating MOBI might fail.'
|
||||
' Please update <a href="http://www.amazon.com/gp/feature.html?ie=UTF8&docId='
|
||||
'1000765211">KindleGen</a> from Amazon\'s website.', 'warning')
|
||||
'1000765211">KindleGen</a> is outdated! MOBI conversion might fail.', 'warning')
|
||||
break
|
||||
else:
|
||||
self.KindleGen = False
|
||||
@@ -1068,16 +1077,10 @@ class KCCGUI(KCC_ui.Ui_KCC):
|
||||
MW = KCCWindow
|
||||
GUI = self
|
||||
self.setupUi(MW)
|
||||
# User settings will be reverted to default ones if were created in one of the following versions
|
||||
# Empty string cover all versions before this system was implemented
|
||||
purgeSettingsVersions = ['']
|
||||
self.icons = Icons()
|
||||
self.webContent = KCC_rc_web.WebContent()
|
||||
self.settings = QtCore.QSettings('KindleComicConverter', 'KindleComicConverter')
|
||||
self.settingsVersion = self.settings.value('settingsVersion', '', type=str)
|
||||
if self.settingsVersion in purgeSettingsVersions:
|
||||
QtCore.QSettings.clear(self.settings)
|
||||
self.settingsVersion = self.settings.value('settingsVersion', '', type=str)
|
||||
self.lastPath = self.settings.value('lastPath', '', type=str)
|
||||
self.lastDevice = self.settings.value('lastDevice', 0, type=int)
|
||||
self.currentMode = self.settings.value('currentMode', 1, type=int)
|
||||
@@ -1231,7 +1234,6 @@ class KCCGUI(KCC_ui.Ui_KCC):
|
||||
MW.showDialog.connect(self.showDialog)
|
||||
MW.hideProgressBar.connect(self.hideProgressBar)
|
||||
MW.forceShutdown.connect(self.forceShutdown)
|
||||
MW.dialogAnswer.connect(self.versionCheck.getNewVersion)
|
||||
MW.closeEvent = self.saveSettings
|
||||
MW.addTrayMessage.connect(self.tray.addTrayMessage)
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
__version__ = '4.4'
|
||||
__version__ = '4.4.1'
|
||||
__license__ = 'ISC'
|
||||
__copyright__ = '2012-2015, Ciro Mattia Gonano <ciromattia@gmail.com>, Pawel Jastrzebski <pawelj@iosphe.re>'
|
||||
__docformat__ = 'restructuredtext en'
|
||||
@@ -18,7 +18,7 @@
|
||||
# PERFORMANCE OF THIS SOFTWARE.
|
||||
#
|
||||
|
||||
__version__ = '4.4'
|
||||
__version__ = '4.4.1'
|
||||
__license__ = 'ISC'
|
||||
__copyright__ = '2012-2015, Ciro Mattia Gonano <ciromattia@gmail.com>, Pawel Jastrzebski <pawelj@iosphe.re>'
|
||||
__docformat__ = 'restructuredtext en'
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
# PERFORMANCE OF THIS SOFTWARE.
|
||||
#
|
||||
|
||||
__version__ = '4.4'
|
||||
__version__ = '4.4.1'
|
||||
__license__ = 'ISC'
|
||||
__copyright__ = '2012-2015, Ciro Mattia Gonano <ciromattia@gmail.com>, Pawel Jastrzebski <pawelj@iosphe.re>'
|
||||
__docformat__ = 'restructuredtext en'
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
__version__ = '4.4'
|
||||
__version__ = '4.4.1'
|
||||
__license__ = 'ISC'
|
||||
__copyright__ = '2012-2015, Ciro Mattia Gonano <ciromattia@gmail.com>, Pawel Jastrzebski <pawelj@iosphe.re>'
|
||||
__docformat__ = 'restructuredtext en'
|
||||
|
||||
@@ -23,6 +23,7 @@ __docformat__ = 'restructuredtext en'
|
||||
import os
|
||||
from hashlib import md5
|
||||
from html.parser import HTMLParser
|
||||
from distutils.version import StrictVersion
|
||||
|
||||
|
||||
class HTMLStripper(HTMLParser):
|
||||
@@ -81,25 +82,27 @@ def dependencyCheck(level):
|
||||
missing = []
|
||||
if level > 2:
|
||||
try:
|
||||
from PyQt5 import QtCore, QtNetwork, QtWidgets
|
||||
if tuple(map(int, ('5.2.0'.split(".")))) > tuple(map(int, (QtCore.qVersion().split(".")))):
|
||||
missing.append('PyQt5 5.2.0+')
|
||||
from PyQt5.QtCore import qVersion as qtVersion
|
||||
if StrictVersion('5.2.0') > StrictVersion(qtVersion()):
|
||||
missing.append('PyQt 5.2.0+')
|
||||
except ImportError:
|
||||
missing.append('PyQt5 5.2.0+')
|
||||
missing.append('PyQt 5.2.0+')
|
||||
if level > 1:
|
||||
try:
|
||||
import psutil
|
||||
if tuple(map(int, ('2.0.0'.split(".")))) > tuple(map(int, psutil.version_info)):
|
||||
from psutil import __version__ as psutilVersion
|
||||
if StrictVersion('2.0.0') > StrictVersion(psutilVersion):
|
||||
missing.append('psutil 2.0.0+')
|
||||
except ImportError:
|
||||
missing.append('psutil 2.0.0+')
|
||||
try:
|
||||
import slugify
|
||||
from slugify import __version__ as slugifyVersion
|
||||
if StrictVersion('0.1.0') > StrictVersion(slugifyVersion):
|
||||
missing.append('python-slugify 0.1.0+')
|
||||
except ImportError:
|
||||
missing.append('python-slugify')
|
||||
missing.append('python-slugify 0.1.0+')
|
||||
try:
|
||||
import PIL
|
||||
if tuple(map(int, ('2.7.0'.split(".")))) > tuple(map(int, (PIL.PILLOW_VERSION.split(".")))):
|
||||
from PIL import PILLOW_VERSION as pillowVersion
|
||||
if StrictVersion('2.7.0') > StrictVersion(pillowVersion):
|
||||
missing.append('Pillow 2.7.0+')
|
||||
except ImportError:
|
||||
missing.append('Pillow 2.7.0+')
|
||||
|
||||
8
setup.py
8
setup.py
@@ -14,7 +14,7 @@ if version_info[0] != 3:
|
||||
exit(1)
|
||||
|
||||
NAME = "KindleComicConverter"
|
||||
VERSION = "4.4"
|
||||
VERSION = "4.4.1"
|
||||
MAIN = "kcc.py"
|
||||
|
||||
if platform == "darwin":
|
||||
@@ -26,8 +26,7 @@ if platform == "darwin":
|
||||
py2app=dict(
|
||||
argv_emulation=True,
|
||||
iconfile='icons/comic2ebook.icns',
|
||||
includes=['PIL', 'sip', 'PyQt5', 'PyQt5.QtCore', 'PyQt5.QtGui', 'PyQt5.QtNetwork', 'PyQt5.QtWidgets',
|
||||
'PyQt5.QtPrintSupport'],
|
||||
includes=['sip', 'PyQt5.QtPrintSupport'],
|
||||
resources=['LICENSE.txt', 'other/qt.conf', 'other/Additional-LICENSE.txt', 'other/unrar', 'other/7za'],
|
||||
plist=dict(
|
||||
CFBundleName=NAME,
|
||||
@@ -35,8 +34,6 @@ if platform == "darwin":
|
||||
CFBundleGetInfoString=NAME + " " + VERSION +
|
||||
", written 2012-2015 by Ciro Mattia Gonano and Pawel Jastrzebski",
|
||||
CFBundleExecutable=NAME,
|
||||
CFBundleIdentifier='com.github.ciromattia.kcc',
|
||||
CFBundleSignature='dplt',
|
||||
CFBundleDocumentTypes=[
|
||||
dict(
|
||||
CFBundleTypeExtensions=['cbz', 'cbr', 'cb7', 'zip', 'rar', '7z', 'pdf'],
|
||||
@@ -69,6 +66,7 @@ elif platform == "win32":
|
||||
'other\\7za.exe',
|
||||
'other\\UnRAR.exe',
|
||||
'other\\Additional-LICENSE.txt',
|
||||
'C:\Python34' + suffix + '\Lib\site-packages\PyQt5\libGLESv2.dll',
|
||||
'C:\Python34' + suffix + '\Lib\site-packages\PyQt5\libEGL.dll'])]
|
||||
extra_options = dict(
|
||||
options={'py2exe': {"bundle_files": 1,
|
||||
|
||||
Reference in New Issue
Block a user