mirror of
https://github.com/ciromattia/kcc
synced 2025-12-13 09:46:25 +00:00
Code cleanup
This commit is contained in:
@@ -1,7 +1,7 @@
|
|||||||
ISC LICENSE
|
ISC LICENSE
|
||||||
|
|
||||||
Copyright (c) 2012-2014 Ciro Mattia Gonano <ciromattia@gmail.com>
|
Copyright (c) 2012-2014 Ciro Mattia Gonano <ciromattia@gmail.com>
|
||||||
Copyright (c) 2013-2014 Paweł Jastrzębski <pawelj@iosphe.re>
|
Copyright (c) 2013-2015 Paweł Jastrzębski <pawelj@iosphe.re>
|
||||||
|
|
||||||
Permission to use, copy, modify, and/or distribute this software for
|
Permission to use, copy, modify, and/or distribute this software for
|
||||||
any purpose with or without fee is hereby granted, provided that the
|
any purpose with or without fee is hereby granted, provided that the
|
||||||
|
|||||||
39
kcc-c2e.py
39
kcc-c2e.py
@@ -2,7 +2,7 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
#
|
#
|
||||||
# Copyright (c) 2012-2014 Ciro Mattia Gonano <ciromattia@gmail.com>
|
# Copyright (c) 2012-2014 Ciro Mattia Gonano <ciromattia@gmail.com>
|
||||||
# Copyright (c) 2013-2014 Pawel Jastrzebski <pawelj@iosphe.re>
|
# Copyright (c) 2013-2015 Pawel Jastrzebski <pawelj@iosphe.re>
|
||||||
#
|
#
|
||||||
# Permission to use, copy, modify, and/or distribute this software for
|
# Permission to use, copy, modify, and/or distribute this software for
|
||||||
# any purpose with or without fee is hereby granted, provided that the
|
# any purpose with or without fee is hereby granted, provided that the
|
||||||
@@ -20,7 +20,7 @@
|
|||||||
|
|
||||||
__version__ = '4.3.1'
|
__version__ = '4.3.1'
|
||||||
__license__ = 'ISC'
|
__license__ = 'ISC'
|
||||||
__copyright__ = '2012-2014, Ciro Mattia Gonano <ciromattia@gmail.com>, Pawel Jastrzebski <pawelj@iosphe.re>'
|
__copyright__ = '2012-2015, Ciro Mattia Gonano <ciromattia@gmail.com>, Pawel Jastrzebski <pawelj@iosphe.re>'
|
||||||
__docformat__ = 'restructuredtext en'
|
__docformat__ = 'restructuredtext en'
|
||||||
|
|
||||||
import sys
|
import sys
|
||||||
@@ -28,39 +28,8 @@ if sys.version_info[0] != 3:
|
|||||||
print('ERROR: This is Python 3 script!')
|
print('ERROR: This is Python 3 script!')
|
||||||
exit(1)
|
exit(1)
|
||||||
|
|
||||||
# Dependency check
|
from kcc.shared import dependencyCheck
|
||||||
missing = []
|
dependencyCheck(2)
|
||||||
try:
|
|
||||||
# noinspection PyUnresolvedReferences
|
|
||||||
import psutil
|
|
||||||
if tuple(map(int, ('2.0.0'.split(".")))) > tuple(map(int, psutil.version_info)):
|
|
||||||
missing.append('psutil 2.0.0+')
|
|
||||||
except ImportError:
|
|
||||||
missing.append('psutil 2.0.0+')
|
|
||||||
try:
|
|
||||||
# noinspection PyUnresolvedReferences
|
|
||||||
import PIL
|
|
||||||
if tuple(map(int, ('2.7.0'.split(".")))) > tuple(map(int, (PIL.PILLOW_VERSION.split(".")))):
|
|
||||||
missing.append('Pillow 2.7.0+')
|
|
||||||
except ImportError:
|
|
||||||
missing.append('Pillow 2.7.0+')
|
|
||||||
try:
|
|
||||||
# noinspection PyUnresolvedReferences
|
|
||||||
import slugify
|
|
||||||
except ImportError:
|
|
||||||
missing.append('python-slugify')
|
|
||||||
if len(missing) > 0:
|
|
||||||
try:
|
|
||||||
# noinspection PyUnresolvedReferences
|
|
||||||
import tkinter
|
|
||||||
# noinspection PyUnresolvedReferences
|
|
||||||
import tkinter.messagebox
|
|
||||||
importRoot = tkinter.Tk()
|
|
||||||
importRoot.withdraw()
|
|
||||||
tkinter.messagebox.showerror('KCC - Error', 'ERROR: ' + ', '.join(missing) + ' is not installed!')
|
|
||||||
except ImportError:
|
|
||||||
print('ERROR: ' + ', '.join(missing) + ' is not installed!')
|
|
||||||
exit(1)
|
|
||||||
|
|
||||||
from multiprocessing import freeze_support
|
from multiprocessing import freeze_support
|
||||||
from kcc.comic2ebook import main
|
from kcc.comic2ebook import main
|
||||||
|
|||||||
29
kcc-c2p.py
29
kcc-c2p.py
@@ -2,7 +2,7 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
#
|
#
|
||||||
# Copyright (c) 2012-2014 Ciro Mattia Gonano <ciromattia@gmail.com>
|
# Copyright (c) 2012-2014 Ciro Mattia Gonano <ciromattia@gmail.com>
|
||||||
# Copyright (c) 2013-2014 Pawel Jastrzebski <pawelj@iosphe.re>
|
# Copyright (c) 2013-2015 Pawel Jastrzebski <pawelj@iosphe.re>
|
||||||
#
|
#
|
||||||
# Permission to use, copy, modify, and/or distribute this software for
|
# Permission to use, copy, modify, and/or distribute this software for
|
||||||
# any purpose with or without fee is hereby granted, provided that the
|
# any purpose with or without fee is hereby granted, provided that the
|
||||||
@@ -20,7 +20,7 @@
|
|||||||
|
|
||||||
__version__ = '4.3.1'
|
__version__ = '4.3.1'
|
||||||
__license__ = 'ISC'
|
__license__ = 'ISC'
|
||||||
__copyright__ = '2012-2014, Ciro Mattia Gonano <ciromattia@gmail.com>, Pawel Jastrzebski <pawelj@iosphe.re>'
|
__copyright__ = '2012-2015, Ciro Mattia Gonano <ciromattia@gmail.com>, Pawel Jastrzebski <pawelj@iosphe.re>'
|
||||||
__docformat__ = 'restructuredtext en'
|
__docformat__ = 'restructuredtext en'
|
||||||
|
|
||||||
import sys
|
import sys
|
||||||
@@ -28,33 +28,14 @@ if sys.version_info[0] != 3:
|
|||||||
print('ERROR: This is Python 3 script!')
|
print('ERROR: This is Python 3 script!')
|
||||||
exit(1)
|
exit(1)
|
||||||
|
|
||||||
# Dependency check
|
from kcc.shared import dependencyCheck
|
||||||
missing = []
|
dependencyCheck(1)
|
||||||
try:
|
|
||||||
# noinspection PyUnresolvedReferences
|
|
||||||
import PIL
|
|
||||||
if tuple(map(int, ('2.7.0'.split(".")))) > tuple(map(int, (PIL.PILLOW_VERSION.split(".")))):
|
|
||||||
missing.append('Pillow 2.7.0+')
|
|
||||||
except ImportError:
|
|
||||||
missing.append('Pillow 2.7.0+')
|
|
||||||
if len(missing) > 0:
|
|
||||||
try:
|
|
||||||
# noinspection PyUnresolvedReferences
|
|
||||||
import tkinter
|
|
||||||
# noinspection PyUnresolvedReferences
|
|
||||||
import tkinter.messagebox
|
|
||||||
importRoot = tkinter.Tk()
|
|
||||||
importRoot.withdraw()
|
|
||||||
tkinter.messagebox.showerror('KCC - Error', 'ERROR: ' + ', '.join(missing) + ' is not installed!')
|
|
||||||
except ImportError:
|
|
||||||
print('ERROR: ' + ', '.join(missing) + ' is not installed!')
|
|
||||||
exit(1)
|
|
||||||
|
|
||||||
from multiprocessing import freeze_support
|
from multiprocessing import freeze_support
|
||||||
from kcc.comic2panel import main
|
from kcc.comic2panel import main
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
freeze_support()
|
freeze_support()
|
||||||
print(('comic2ebook v%(__version__)s. Written by Ciro Mattia Gonano and Pawel Jastrzebski.' % globals()))
|
print(('comic2panel v%(__version__)s. Written by Ciro Mattia Gonano and Pawel Jastrzebski.' % globals()))
|
||||||
main(sys.argv[1:])
|
main(sys.argv[1:])
|
||||||
sys.exit(0)
|
sys.exit(0)
|
||||||
2
kcc.iss
2
kcc.iss
@@ -12,7 +12,7 @@ AppPublisher={#MyAppPublisher}
|
|||||||
AppPublisherURL={#MyAppURL}
|
AppPublisherURL={#MyAppURL}
|
||||||
AppSupportURL={#MyAppURL}
|
AppSupportURL={#MyAppURL}
|
||||||
AppUpdatesURL={#MyAppURL}
|
AppUpdatesURL={#MyAppURL}
|
||||||
AppCopyright=Copyright (C) 2012-2014 Ciro Mattia Gonano and Paweł Jastrzębski
|
AppCopyright=Copyright (C) 2012-2015 Ciro Mattia Gonano and Paweł Jastrzębski
|
||||||
DefaultDirName={pf}\{#MyAppName}
|
DefaultDirName={pf}\{#MyAppName}
|
||||||
DefaultGroupName={#MyAppName}
|
DefaultGroupName={#MyAppName}
|
||||||
AllowNoIcons=yes
|
AllowNoIcons=yes
|
||||||
|
|||||||
124
kcc.py
124
kcc.py
@@ -2,7 +2,7 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
#
|
#
|
||||||
# Copyright (c) 2012-2014 Ciro Mattia Gonano <ciromattia@gmail.com>
|
# Copyright (c) 2012-2014 Ciro Mattia Gonano <ciromattia@gmail.com>
|
||||||
# Copyright (c) 2013-2014 Pawel Jastrzebski <pawelj@iosphe.re>
|
# Copyright (c) 2013-2015 Pawel Jastrzebski <pawelj@iosphe.re>
|
||||||
#
|
#
|
||||||
# Permission to use, copy, modify, and/or distribute this software for
|
# Permission to use, copy, modify, and/or distribute this software for
|
||||||
# any purpose with or without fee is hereby granted, provided that the
|
# any purpose with or without fee is hereby granted, provided that the
|
||||||
@@ -20,16 +20,16 @@
|
|||||||
|
|
||||||
__version__ = '4.3.1'
|
__version__ = '4.3.1'
|
||||||
__license__ = 'ISC'
|
__license__ = 'ISC'
|
||||||
__copyright__ = '2012-2014, Ciro Mattia Gonano <ciromattia@gmail.com>, Pawel Jastrzebski <pawelj@iosphe.re>'
|
__copyright__ = '2012-2015, Ciro Mattia Gonano <ciromattia@gmail.com>, Pawel Jastrzebski <pawelj@iosphe.re>'
|
||||||
__docformat__ = 'restructuredtext en'
|
__docformat__ = 'restructuredtext en'
|
||||||
|
|
||||||
import sys
|
import sys
|
||||||
import os
|
|
||||||
if sys.version_info[0] != 3:
|
if sys.version_info[0] != 3:
|
||||||
print('ERROR: This is Python 3 script!')
|
print('ERROR: This is Python 3 script!')
|
||||||
exit(1)
|
exit(1)
|
||||||
|
|
||||||
# OS specific PATH variable workarounds
|
# OS specific PATH variable workarounds
|
||||||
|
import os
|
||||||
if sys.platform.startswith('darwin') and 'RESOURCEPATH' not in os.environ:
|
if sys.platform.startswith('darwin') and 'RESOURCEPATH' not in os.environ:
|
||||||
os.environ['PATH'] = os.path.dirname(os.path.abspath(__file__)) + '/other/:' + os.environ['PATH']
|
os.environ['PATH'] = os.path.dirname(os.path.abspath(__file__)) + '/other/:' + os.environ['PATH']
|
||||||
elif sys.platform.startswith('win'):
|
elif sys.platform.startswith('win'):
|
||||||
@@ -49,123 +49,23 @@ elif sys.platform.startswith('win'):
|
|||||||
os.environ['PATH'] = os.path.dirname(os.path.abspath(__file__)) + '/other/;' + os.environ['PATH']
|
os.environ['PATH'] = os.path.dirname(os.path.abspath(__file__)) + '/other/;' + os.environ['PATH']
|
||||||
os.chdir(os.path.dirname(os.path.abspath(__file__)))
|
os.chdir(os.path.dirname(os.path.abspath(__file__)))
|
||||||
|
|
||||||
# Dependency check
|
from kcc.shared import dependencyCheck
|
||||||
missing = []
|
dependencyCheck(3)
|
||||||
try:
|
|
||||||
# noinspection PyUnresolvedReferences
|
|
||||||
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+')
|
|
||||||
except ImportError:
|
|
||||||
missing.append('PyQt5 5.2.0+')
|
|
||||||
try:
|
|
||||||
# noinspection PyUnresolvedReferences
|
|
||||||
import psutil
|
|
||||||
if tuple(map(int, ('2.0.0'.split(".")))) > tuple(map(int, psutil.version_info)):
|
|
||||||
missing.append('psutil 2.0.0+')
|
|
||||||
except ImportError:
|
|
||||||
missing.append('psutil 2.0.0+')
|
|
||||||
try:
|
|
||||||
# noinspection PyUnresolvedReferences
|
|
||||||
import PIL
|
|
||||||
if tuple(map(int, ('2.7.0'.split(".")))) > tuple(map(int, (PIL.PILLOW_VERSION.split(".")))):
|
|
||||||
missing.append('Pillow 2.7.0+')
|
|
||||||
except ImportError:
|
|
||||||
missing.append('Pillow 2.7.0+')
|
|
||||||
try:
|
|
||||||
# noinspection PyUnresolvedReferences
|
|
||||||
import slugify
|
|
||||||
except ImportError:
|
|
||||||
missing.append('python-slugify')
|
|
||||||
if len(missing) > 0:
|
|
||||||
try:
|
|
||||||
# noinspection PyUnresolvedReferences
|
|
||||||
import tkinter
|
|
||||||
# noinspection PyUnresolvedReferences
|
|
||||||
import tkinter.messagebox
|
|
||||||
importRoot = tkinter.Tk()
|
|
||||||
importRoot.withdraw()
|
|
||||||
tkinter.messagebox.showerror('KCC - Error', 'ERROR: ' + ', '.join(missing) + ' is not installed!')
|
|
||||||
except ImportError:
|
|
||||||
print('ERROR: ' + ', '.join(missing) + ' is not installed!')
|
|
||||||
exit(1)
|
|
||||||
|
|
||||||
from multiprocessing import freeze_support
|
from multiprocessing import freeze_support
|
||||||
from kcc import KCC_gui
|
from kcc import KCC_gui
|
||||||
|
|
||||||
|
|
||||||
# Implementing detection of already running KCC instance and forwarding argv to it
|
|
||||||
class QApplicationMessaging(QtWidgets.QApplication):
|
|
||||||
messageFromOtherInstance = QtCore.pyqtSignal(bytes)
|
|
||||||
|
|
||||||
def __init__(self, argv):
|
|
||||||
QtWidgets.QApplication.__init__(self, argv)
|
|
||||||
self._key = 'KCC'
|
|
||||||
self._timeout = 1000
|
|
||||||
self._locked = False
|
|
||||||
socket = QtNetwork.QLocalSocket(self)
|
|
||||||
socket.connectToServer(self._key, QtCore.QIODevice.WriteOnly)
|
|
||||||
if not socket.waitForConnected(self._timeout):
|
|
||||||
self._server = QtNetwork.QLocalServer(self)
|
|
||||||
# noinspection PyUnresolvedReferences
|
|
||||||
self._server.newConnection.connect(self.handleMessage)
|
|
||||||
self._server.listen(self._key)
|
|
||||||
else:
|
|
||||||
self._locked = True
|
|
||||||
socket.disconnectFromServer()
|
|
||||||
|
|
||||||
def __del__(self):
|
|
||||||
if not self._locked:
|
|
||||||
self._server.close()
|
|
||||||
|
|
||||||
def event(self, e):
|
|
||||||
if e.type() == QtCore.QEvent.FileOpen:
|
|
||||||
self.messageFromOtherInstance.emit(bytes(e.file(), 'UTF-8'))
|
|
||||||
return True
|
|
||||||
else:
|
|
||||||
return QtWidgets.QApplication.event(self, e)
|
|
||||||
|
|
||||||
def isRunning(self):
|
|
||||||
return self._locked
|
|
||||||
|
|
||||||
def handleMessage(self):
|
|
||||||
socket = self._server.nextPendingConnection()
|
|
||||||
if socket.waitForReadyRead(self._timeout):
|
|
||||||
self.messageFromOtherInstance.emit(socket.readAll().data())
|
|
||||||
|
|
||||||
def sendMessage(self, message):
|
|
||||||
socket = QtNetwork.QLocalSocket(self)
|
|
||||||
socket.connectToServer(self._key, QtCore.QIODevice.WriteOnly)
|
|
||||||
socket.waitForConnected(self._timeout)
|
|
||||||
socket.write(bytes(message, 'UTF-8'))
|
|
||||||
socket.waitForBytesWritten(self._timeout)
|
|
||||||
socket.disconnectFromServer()
|
|
||||||
|
|
||||||
|
|
||||||
# Adding signals to QMainWindow
|
|
||||||
class QMainWindowKCC(QtWidgets.QMainWindow):
|
|
||||||
progressBarTick = QtCore.pyqtSignal(str)
|
|
||||||
modeConvert = QtCore.pyqtSignal(int)
|
|
||||||
addMessage = QtCore.pyqtSignal(str, str, bool)
|
|
||||||
addTrayMessage = QtCore.pyqtSignal(str, str)
|
|
||||||
showDialog = QtCore.pyqtSignal(str, str)
|
|
||||||
hideProgressBar = QtCore.pyqtSignal()
|
|
||||||
forceShutdown = QtCore.pyqtSignal()
|
|
||||||
dialogAnswer = QtCore.pyqtSignal(int)
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
freeze_support()
|
freeze_support()
|
||||||
KCCAplication = QApplicationMessaging(sys.argv)
|
KCCAplication = KCC_gui.QApplicationMessaging(sys.argv)
|
||||||
if KCCAplication.isRunning():
|
if KCCAplication.isRunning():
|
||||||
if len(sys.argv) > 1:
|
if len(sys.argv) > 1:
|
||||||
KCCAplication.sendMessage(sys.argv[1])
|
KCCAplication.sendMessage(sys.argv[1])
|
||||||
sys.exit(0)
|
|
||||||
else:
|
else:
|
||||||
KCCAplication.sendMessage('ARISE')
|
KCCAplication.sendMessage('ARISE')
|
||||||
sys.exit(0)
|
else:
|
||||||
KCCWindow = QMainWindowKCC()
|
KCCWindow = KCC_gui.QMainWindowKCC()
|
||||||
KCCUI = KCC_gui.KCCGUI(KCCAplication, KCCWindow)
|
KCCUI = KCC_gui.KCCGUI(KCCAplication, KCCWindow)
|
||||||
if len(sys.argv) > 1:
|
if len(sys.argv) > 1:
|
||||||
KCCUI.handleMessage(sys.argv[1])
|
KCCUI.handleMessage(sys.argv[1])
|
||||||
sys.exit(KCCAplication.exec_())
|
sys.exit(KCCAplication.exec_())
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
#
|
#
|
||||||
# Copyright (c) 2012-2014 Ciro Mattia Gonano <ciromattia@gmail.com>
|
# Copyright (c) 2012-2014 Ciro Mattia Gonano <ciromattia@gmail.com>
|
||||||
# Copyright (c) 2013-2014 Pawel Jastrzebski <pawelj@iosphe.re>
|
# Copyright (c) 2013-2015 Pawel Jastrzebski <pawelj@iosphe.re>
|
||||||
#
|
#
|
||||||
# Permission to use, copy, modify, and/or distribute this software for
|
# Permission to use, copy, modify, and/or distribute this software for
|
||||||
# any purpose with or without fee is hereby granted, provided that the
|
# any purpose with or without fee is hereby granted, provided that the
|
||||||
@@ -19,7 +19,7 @@
|
|||||||
|
|
||||||
__version__ = '4.3.1'
|
__version__ = '4.3.1'
|
||||||
__license__ = 'ISC'
|
__license__ = 'ISC'
|
||||||
__copyright__ = '2012-2014, Ciro Mattia Gonano <ciromattia@gmail.com>, Pawel Jastrzebski <pawelj@iosphe.re>'
|
__copyright__ = '2012-2015, Ciro Mattia Gonano <ciromattia@gmail.com>, Pawel Jastrzebski <pawelj@iosphe.re>'
|
||||||
__docformat__ = 'restructuredtext en'
|
__docformat__ = 'restructuredtext en'
|
||||||
|
|
||||||
import os
|
import os
|
||||||
@@ -33,12 +33,11 @@ from shutil import move
|
|||||||
from http.server import BaseHTTPRequestHandler, HTTPServer
|
from http.server import BaseHTTPRequestHandler, HTTPServer
|
||||||
from socketserver import ThreadingMixIn
|
from socketserver import ThreadingMixIn
|
||||||
from subprocess import STDOUT, PIPE
|
from subprocess import STDOUT, PIPE
|
||||||
from PyQt5 import QtGui, QtCore, QtWidgets
|
from PyQt5 import QtGui, QtCore, QtWidgets, QtNetwork
|
||||||
from xml.dom.minidom import parse
|
from xml.dom.minidom import parse
|
||||||
from html.parser import HTMLParser
|
|
||||||
from psutil import Popen, Process
|
from psutil import Popen, Process
|
||||||
from copy import copy
|
from copy import copy
|
||||||
from .shared import md5Checksum
|
from .shared import md5Checksum, HTMLStripper
|
||||||
from . import comic2ebook
|
from . import comic2ebook
|
||||||
from . import KCC_rc_web
|
from . import KCC_rc_web
|
||||||
if sys.platform.startswith('darwin'):
|
if sys.platform.startswith('darwin'):
|
||||||
@@ -49,6 +48,64 @@ else:
|
|||||||
from . import KCC_ui
|
from . import KCC_ui
|
||||||
|
|
||||||
|
|
||||||
|
class QApplicationMessaging(QtWidgets.QApplication):
|
||||||
|
messageFromOtherInstance = QtCore.pyqtSignal(bytes)
|
||||||
|
|
||||||
|
def __init__(self, argv):
|
||||||
|
QtWidgets.QApplication.__init__(self, argv)
|
||||||
|
self._key = 'KCC'
|
||||||
|
self._timeout = 1000
|
||||||
|
self._locked = False
|
||||||
|
socket = QtNetwork.QLocalSocket(self)
|
||||||
|
socket.connectToServer(self._key, QtCore.QIODevice.WriteOnly)
|
||||||
|
if not socket.waitForConnected(self._timeout):
|
||||||
|
self._server = QtNetwork.QLocalServer(self)
|
||||||
|
# noinspection PyUnresolvedReferences
|
||||||
|
self._server.newConnection.connect(self.handleMessage)
|
||||||
|
self._server.listen(self._key)
|
||||||
|
else:
|
||||||
|
self._locked = True
|
||||||
|
socket.disconnectFromServer()
|
||||||
|
|
||||||
|
def __del__(self):
|
||||||
|
if not self._locked:
|
||||||
|
self._server.close()
|
||||||
|
|
||||||
|
def event(self, e):
|
||||||
|
if e.type() == QtCore.QEvent.FileOpen:
|
||||||
|
self.messageFromOtherInstance.emit(bytes(e.file(), 'UTF-8'))
|
||||||
|
return True
|
||||||
|
else:
|
||||||
|
return QtWidgets.QApplication.event(self, e)
|
||||||
|
|
||||||
|
def isRunning(self):
|
||||||
|
return self._locked
|
||||||
|
|
||||||
|
def handleMessage(self):
|
||||||
|
socket = self._server.nextPendingConnection()
|
||||||
|
if socket.waitForReadyRead(self._timeout):
|
||||||
|
self.messageFromOtherInstance.emit(socket.readAll().data())
|
||||||
|
|
||||||
|
def sendMessage(self, message):
|
||||||
|
socket = QtNetwork.QLocalSocket(self)
|
||||||
|
socket.connectToServer(self._key, QtCore.QIODevice.WriteOnly)
|
||||||
|
socket.waitForConnected(self._timeout)
|
||||||
|
socket.write(bytes(message, 'UTF-8'))
|
||||||
|
socket.waitForBytesWritten(self._timeout)
|
||||||
|
socket.disconnectFromServer()
|
||||||
|
|
||||||
|
|
||||||
|
class QMainWindowKCC(QtWidgets.QMainWindow):
|
||||||
|
progressBarTick = QtCore.pyqtSignal(str)
|
||||||
|
modeConvert = QtCore.pyqtSignal(int)
|
||||||
|
addMessage = QtCore.pyqtSignal(str, str, bool)
|
||||||
|
addTrayMessage = QtCore.pyqtSignal(str, str)
|
||||||
|
showDialog = QtCore.pyqtSignal(str, str)
|
||||||
|
hideProgressBar = QtCore.pyqtSignal()
|
||||||
|
forceShutdown = QtCore.pyqtSignal()
|
||||||
|
dialogAnswer = QtCore.pyqtSignal(int)
|
||||||
|
|
||||||
|
|
||||||
class Icons:
|
class Icons:
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
self.deviceKindle = QtGui.QIcon()
|
self.deviceKindle = QtGui.QIcon()
|
||||||
@@ -76,19 +133,6 @@ class Icons:
|
|||||||
self.programIcon.addPixmap(QtGui.QPixmap(":/Icon/icons/comic2ebook.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
|
self.programIcon.addPixmap(QtGui.QPixmap(":/Icon/icons/comic2ebook.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
|
||||||
|
|
||||||
|
|
||||||
class HTMLStripper(HTMLParser):
|
|
||||||
def __init__(self):
|
|
||||||
HTMLParser.__init__(self)
|
|
||||||
self.reset()
|
|
||||||
self.fed = []
|
|
||||||
|
|
||||||
def handle_data(self, d):
|
|
||||||
self.fed.append(d)
|
|
||||||
|
|
||||||
def get_data(self):
|
|
||||||
return ''.join(self.fed)
|
|
||||||
|
|
||||||
|
|
||||||
class WebServerHandler(BaseHTTPRequestHandler):
|
class WebServerHandler(BaseHTTPRequestHandler):
|
||||||
# noinspection PyAttributeOutsideInit, PyArgumentList
|
# noinspection PyAttributeOutsideInit, PyArgumentList
|
||||||
def do_GET(self):
|
def do_GET(self):
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
__version__ = '4.3.1'
|
__version__ = '4.3.1'
|
||||||
__license__ = 'ISC'
|
__license__ = 'ISC'
|
||||||
__copyright__ = '2012-2014, Ciro Mattia Gonano <ciromattia@gmail.com>, Pawel Jastrzebski <pawelj@iosphe.re>'
|
__copyright__ = '2012-2015, Ciro Mattia Gonano <ciromattia@gmail.com>, Pawel Jastrzebski <pawelj@iosphe.re>'
|
||||||
__docformat__ = 'restructuredtext en'
|
__docformat__ = 'restructuredtext en'
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
# Copyright (c) 2012-2014 Ciro Mattia Gonano <ciromattia@gmail.com>
|
# Copyright (c) 2012-2014 Ciro Mattia Gonano <ciromattia@gmail.com>
|
||||||
# Copyright (c) 2013-2014 Pawel Jastrzebski <pawelj@iosphe.re>
|
# Copyright (c) 2013-2015 Pawel Jastrzebski <pawelj@iosphe.re>
|
||||||
#
|
#
|
||||||
# Permission to use, copy, modify, and/or distribute this software for
|
# Permission to use, copy, modify, and/or distribute this software for
|
||||||
# any purpose with or without fee is hereby granted, provided that the
|
# any purpose with or without fee is hereby granted, provided that the
|
||||||
@@ -17,7 +17,7 @@
|
|||||||
#
|
#
|
||||||
|
|
||||||
__license__ = 'ISC'
|
__license__ = 'ISC'
|
||||||
__copyright__ = '2012-2014, Ciro Mattia Gonano <ciromattia@gmail.com>, Pawel Jastrzebski <pawelj@iosphe.re>'
|
__copyright__ = '2012-2015, Ciro Mattia Gonano <ciromattia@gmail.com>, Pawel Jastrzebski <pawelj@iosphe.re>'
|
||||||
__docformat__ = 'restructuredtext en'
|
__docformat__ = 'restructuredtext en'
|
||||||
|
|
||||||
import sys
|
import sys
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
#
|
#
|
||||||
# Copyright (c) 2012-2014 Ciro Mattia Gonano <ciromattia@gmail.com>
|
# Copyright (c) 2012-2014 Ciro Mattia Gonano <ciromattia@gmail.com>
|
||||||
# Copyright (c) 2013-2014 Pawel Jastrzebski <pawelj@iosphe.re>
|
# Copyright (c) 2013-2015 Pawel Jastrzebski <pawelj@iosphe.re>
|
||||||
#
|
#
|
||||||
# Permission to use, copy, modify, and/or distribute this software for
|
# Permission to use, copy, modify, and/or distribute this software for
|
||||||
# any purpose with or without fee is hereby granted, provided that the
|
# any purpose with or without fee is hereby granted, provided that the
|
||||||
@@ -20,7 +20,7 @@
|
|||||||
|
|
||||||
__version__ = '4.3.1'
|
__version__ = '4.3.1'
|
||||||
__license__ = 'ISC'
|
__license__ = 'ISC'
|
||||||
__copyright__ = '2012-2014, Ciro Mattia Gonano <ciromattia@gmail.com>, Pawel Jastrzebski <pawelj@iosphe.re>'
|
__copyright__ = '2012-2015, Ciro Mattia Gonano <ciromattia@gmail.com>, Pawel Jastrzebski <pawelj@iosphe.re>'
|
||||||
__docformat__ = 'restructuredtext en'
|
__docformat__ = 'restructuredtext en'
|
||||||
|
|
||||||
import os
|
import os
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
#
|
#
|
||||||
# Copyright (c) 2012-2014 Ciro Mattia Gonano <ciromattia@gmail.com>
|
# Copyright (c) 2012-2014 Ciro Mattia Gonano <ciromattia@gmail.com>
|
||||||
# Copyright (c) 2013-2014 Pawel Jastrzebski <pawelj@iosphe.re>
|
# Copyright (c) 2013-2015 Pawel Jastrzebski <pawelj@iosphe.re>
|
||||||
#
|
#
|
||||||
# Permission to use, copy, modify, and/or distribute this software for
|
# Permission to use, copy, modify, and/or distribute this software for
|
||||||
# any purpose with or without fee is hereby granted, provided that the
|
# any purpose with or without fee is hereby granted, provided that the
|
||||||
@@ -20,7 +20,7 @@
|
|||||||
|
|
||||||
__version__ = '4.3.1'
|
__version__ = '4.3.1'
|
||||||
__license__ = 'ISC'
|
__license__ = 'ISC'
|
||||||
__copyright__ = '2012-2014, Ciro Mattia Gonano <ciromattia@gmail.com>, Pawel Jastrzebski <pawelj@iosphe.re>'
|
__copyright__ = '2012-2015, Ciro Mattia Gonano <ciromattia@gmail.com>, Pawel Jastrzebski <pawelj@iosphe.re>'
|
||||||
__docformat__ = 'restructuredtext en'
|
__docformat__ = 'restructuredtext en'
|
||||||
|
|
||||||
import os
|
import os
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
#
|
#
|
||||||
# Based on initial version of DualMetaFix. Copyright (C) 2013 Kevin Hendricks
|
# Based on initial version of DualMetaFix. Copyright (C) 2013 Kevin Hendricks
|
||||||
# Changes for KCC Copyright (C) 2014 Pawel Jastrzebski <pawelj@iosphe.re>
|
# Changes for KCC Copyright (C) 2014-2015 Pawel Jastrzebski <pawelj@iosphe.re>
|
||||||
#
|
#
|
||||||
# This program is free software: you can redistribute it and/or modify
|
# This program is free software: you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU General Public License as published by
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
# Copyright (C) 2010 Alex Yatskov
|
# Copyright (C) 2010 Alex Yatskov
|
||||||
# Copyright (C) 2011 Stanislav (proDOOMman) Kosolapov <prodoomman@gmail.com>
|
# Copyright (C) 2011 Stanislav (proDOOMman) Kosolapov <prodoomman@gmail.com>
|
||||||
# Copyright (c) 2012-2014 Ciro Mattia Gonano <ciromattia@gmail.com>
|
# Copyright (c) 2012-2014 Ciro Mattia Gonano <ciromattia@gmail.com>
|
||||||
# Copyright (c) 2013-2014 Pawel Jastrzebski <pawelj@iosphe.re>
|
# Copyright (c) 2013-2015 Pawel Jastrzebski <pawelj@iosphe.re>
|
||||||
#
|
#
|
||||||
# This program is free software: you can redistribute it and/or modify
|
# This program is free software: you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU General Public License as published by
|
# it under the terms of the GNU General Public License as published by
|
||||||
@@ -18,7 +18,7 @@
|
|||||||
|
|
||||||
__version__ = '4.3.1'
|
__version__ = '4.3.1'
|
||||||
__license__ = 'ISC'
|
__license__ = 'ISC'
|
||||||
__copyright__ = '2012-2014, Ciro Mattia Gonano <ciromattia@gmail.com>, Pawel Jastrzebski <pawelj@iosphe.re>'
|
__copyright__ = '2012-2015, Ciro Mattia Gonano <ciromattia@gmail.com>, Pawel Jastrzebski <pawelj@iosphe.re>'
|
||||||
__docformat__ = 'restructuredtext en'
|
__docformat__ = 'restructuredtext en'
|
||||||
|
|
||||||
import os
|
import os
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# Copyright (c) 2012-2014 Ciro Mattia Gonano <ciromattia@gmail.com>
|
# Copyright (c) 2012-2014 Ciro Mattia Gonano <ciromattia@gmail.com>
|
||||||
# Copyright (c) 2013-2014 Pawel Jastrzebski <pawelj@iosphe.re>
|
# Copyright (c) 2013-2015 Pawel Jastrzebski <pawelj@iosphe.re>
|
||||||
#
|
#
|
||||||
# Based upon the code snippet by Ned Batchelder
|
# Based upon the code snippet by Ned Batchelder
|
||||||
# (http://nedbatchelder.com/blog/200712/extracting_jpgs_from_pdfs.html)
|
# (http://nedbatchelder.com/blog/200712/extracting_jpgs_from_pdfs.html)
|
||||||
@@ -20,7 +20,7 @@
|
|||||||
#
|
#
|
||||||
|
|
||||||
__license__ = 'ISC'
|
__license__ = 'ISC'
|
||||||
__copyright__ = '2012-2014, Ciro Mattia Gonano <ciromattia@gmail.com>, Pawel Jastrzebski <pawelj@iosphe.re>'
|
__copyright__ = '2012-2015, Ciro Mattia Gonano <ciromattia@gmail.com>, Pawel Jastrzebski <pawelj@iosphe.re>'
|
||||||
__docformat__ = 'restructuredtext en'
|
__docformat__ = 'restructuredtext en'
|
||||||
|
|
||||||
import os
|
import os
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# Copyright (c) 2012-2014 Ciro Mattia Gonano <ciromattia@gmail.com>
|
# Copyright (c) 2012-2014 Ciro Mattia Gonano <ciromattia@gmail.com>
|
||||||
# Copyright (c) 2013-2014 Pawel Jastrzebski <pawelj@iosphe.re>
|
# Copyright (c) 2013-2015 Pawel Jastrzebski <pawelj@iosphe.re>
|
||||||
#
|
#
|
||||||
# Permission to use, copy, modify, and/or distribute this software for
|
# Permission to use, copy, modify, and/or distribute this software for
|
||||||
# any purpose with or without fee is hereby granted, provided that the
|
# any purpose with or without fee is hereby granted, provided that the
|
||||||
@@ -17,11 +17,27 @@
|
|||||||
#
|
#
|
||||||
|
|
||||||
__license__ = 'ISC'
|
__license__ = 'ISC'
|
||||||
__copyright__ = '2012-2014, Ciro Mattia Gonano <ciromattia@gmail.com>, Pawel Jastrzebski <pawelj@iosphe.re>'
|
__copyright__ = '2012-2015, Ciro Mattia Gonano <ciromattia@gmail.com>, Pawel Jastrzebski <pawelj@iosphe.re>'
|
||||||
__docformat__ = 'restructuredtext en'
|
__docformat__ = 'restructuredtext en'
|
||||||
|
|
||||||
import os
|
import os
|
||||||
from hashlib import md5
|
from hashlib import md5
|
||||||
|
from html.parser import HTMLParser
|
||||||
|
|
||||||
|
|
||||||
|
class HTMLStripper(HTMLParser):
|
||||||
|
def __init__(self):
|
||||||
|
HTMLParser.__init__(self)
|
||||||
|
self.reset()
|
||||||
|
self.strict = False
|
||||||
|
self.convert_charrefs = True
|
||||||
|
self.fed = []
|
||||||
|
|
||||||
|
def handle_data(self, d):
|
||||||
|
self.fed.append(d)
|
||||||
|
|
||||||
|
def get_data(self):
|
||||||
|
return ''.join(self.fed)
|
||||||
|
|
||||||
|
|
||||||
def getImageFileName(imgfile):
|
def getImageFileName(imgfile):
|
||||||
@@ -57,4 +73,43 @@ def md5Checksum(filePath):
|
|||||||
def check7ZFile(filePath):
|
def check7ZFile(filePath):
|
||||||
with open(filePath, 'rb') as fh:
|
with open(filePath, 'rb') as fh:
|
||||||
header = fh.read(6)
|
header = fh.read(6)
|
||||||
return header == b"7z\xbc\xaf'\x1c"
|
return header == b"7z\xbc\xaf'\x1c"
|
||||||
|
|
||||||
|
|
||||||
|
# noinspection PyUnresolvedReferences
|
||||||
|
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+')
|
||||||
|
except ImportError:
|
||||||
|
missing.append('PyQt5 5.2.0+')
|
||||||
|
if level > 1:
|
||||||
|
try:
|
||||||
|
import psutil
|
||||||
|
if tuple(map(int, ('2.0.0'.split(".")))) > tuple(map(int, psutil.version_info)):
|
||||||
|
missing.append('psutil 2.0.0+')
|
||||||
|
except ImportError:
|
||||||
|
missing.append('psutil 2.0.0+')
|
||||||
|
try:
|
||||||
|
import slugify
|
||||||
|
except ImportError:
|
||||||
|
missing.append('python-slugify')
|
||||||
|
try:
|
||||||
|
import PIL
|
||||||
|
if tuple(map(int, ('2.7.0'.split(".")))) > tuple(map(int, (PIL.PILLOW_VERSION.split(".")))):
|
||||||
|
missing.append('Pillow 2.7.0+')
|
||||||
|
except ImportError:
|
||||||
|
missing.append('Pillow 2.7.0+')
|
||||||
|
if len(missing) > 0:
|
||||||
|
try:
|
||||||
|
import tkinter
|
||||||
|
import tkinter.messagebox
|
||||||
|
importRoot = tkinter.Tk()
|
||||||
|
importRoot.withdraw()
|
||||||
|
tkinter.messagebox.showerror('KCC - Error', 'ERROR: ' + ', '.join(missing) + ' is not installed!')
|
||||||
|
except ImportError:
|
||||||
|
print('ERROR: ' + ', '.join(missing) + ' is not installed!')
|
||||||
|
exit(1)
|
||||||
4
setup.py
4
setup.py
@@ -33,7 +33,7 @@ if platform == "darwin":
|
|||||||
CFBundleName=NAME,
|
CFBundleName=NAME,
|
||||||
CFBundleShortVersionString=VERSION,
|
CFBundleShortVersionString=VERSION,
|
||||||
CFBundleGetInfoString=NAME + " " + VERSION +
|
CFBundleGetInfoString=NAME + " " + VERSION +
|
||||||
", written 2012-2014 by Ciro Mattia Gonano and Pawel Jastrzebski",
|
", written 2012-2015 by Ciro Mattia Gonano and Pawel Jastrzebski",
|
||||||
CFBundleExecutable=NAME,
|
CFBundleExecutable=NAME,
|
||||||
CFBundleIdentifier='com.github.ciromattia.kcc',
|
CFBundleIdentifier='com.github.ciromattia.kcc',
|
||||||
CFBundleSignature='dplt',
|
CFBundleSignature='dplt',
|
||||||
@@ -81,7 +81,7 @@ elif platform == "win32":
|
|||||||
windows=[{"script": MAIN,
|
windows=[{"script": MAIN,
|
||||||
"dest_base": "KCC",
|
"dest_base": "KCC",
|
||||||
"version": VERSION,
|
"version": VERSION,
|
||||||
"copyright": "Ciro Mattia Gonano, Pawel Jastrzebski © 2014",
|
"copyright": "Ciro Mattia Gonano, Pawel Jastrzebski © 2012-2015",
|
||||||
"legal_copyright": "ISC License (ISCL)",
|
"legal_copyright": "ISC License (ISCL)",
|
||||||
"product_version": VERSION,
|
"product_version": VERSION,
|
||||||
"product_name": "Kindle Comic Converter",
|
"product_name": "Kindle Comic Converter",
|
||||||
|
|||||||
Reference in New Issue
Block a user