about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--LICENSE.txt2
-rwxr-xr-xkcc-c2e.py39
-rwxr-xr-xkcc-c2p.py29
-rw-r--r--kcc.iss2
-rwxr-xr-xkcc.py124
-rw-r--r--kcc/KCC_gui.py80
-rw-r--r--kcc/__init__.py2
-rw-r--r--kcc/cbxarchive.py4
-rwxr-xr-xkcc/comic2ebook.py4
-rw-r--r--kcc/comic2panel.py4
-rw-r--r--kcc/dualmetafix.py2
-rwxr-xr-xkcc/image.py4
-rw-r--r--kcc/pdfjpgextract.py4
-rw-r--r--kcc/shared.py61
-rwxr-xr-xsetup.py4
15 files changed, 157 insertions, 208 deletions
diff --git a/LICENSE.txt b/LICENSE.txt
index c32421a..b0eadda 100644
--- a/LICENSE.txt
+++ b/LICENSE.txt
@@ -1,7 +1,7 @@
 ISC LICENSE
 
 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
 any purpose with or without fee is hereby granted, provided that the
diff --git a/kcc-c2e.py b/kcc-c2e.py
index bbc22b2..5bc3680 100755
--- a/kcc-c2e.py
+++ b/kcc-c2e.py
@@ -2,7 +2,7 @@
 # -*- coding: utf-8 -*-
 #
 # 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
 # any purpose with or without fee is hereby granted, provided that the
@@ -20,7 +20,7 @@
 
 __version__ = '4.3.1'
 __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'
 
 import sys
@@ -28,39 +28,8 @@ if sys.version_info[0] != 3:
     print('ERROR: This is Python 3 script!')
     exit(1)
 
-# Dependency check
-missing = []
-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 kcc.shared import dependencyCheck
+dependencyCheck(2)
 
 from multiprocessing import freeze_support
 from kcc.comic2ebook import main
diff --git a/kcc-c2p.py b/kcc-c2p.py
index 7388f7f..53216a4 100755
--- a/kcc-c2p.py
+++ b/kcc-c2p.py
@@ -2,7 +2,7 @@
 # -*- coding: utf-8 -*-
 #
 # 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
 # any purpose with or without fee is hereby granted, provided that the
@@ -20,7 +20,7 @@
 
 __version__ = '4.3.1'
 __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'
 
 import sys
@@ -28,33 +28,14 @@ if sys.version_info[0] != 3:
     print('ERROR: This is Python 3 script!')
     exit(1)
 
-# Dependency check
-missing = []
-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 kcc.shared import dependencyCheck
+dependencyCheck(1)
 
 from multiprocessing import freeze_support
 from kcc.comic2panel import main
 
 if __name__ == "__main__":
     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:])
     sys.exit(0)
\ No newline at end of file
diff --git a/kcc.iss b/kcc.iss
index f40959d..f05ab56 100644
--- a/kcc.iss
+++ b/kcc.iss
@@ -12,7 +12,7 @@ AppPublisher={#MyAppPublisher}
 AppPublisherURL={#MyAppURL}
 AppSupportURL={#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}
 DefaultGroupName={#MyAppName}
 AllowNoIcons=yes
diff --git a/kcc.py b/kcc.py
index f7fc51f..119cd13 100755
--- a/kcc.py
+++ b/kcc.py
@@ -2,7 +2,7 @@
 # -*- coding: utf-8 -*-
 #
 # 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
 # any purpose with or without fee is hereby granted, provided that the
@@ -20,16 +20,16 @@
 
 __version__ = '4.3.1'
 __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'
 
 import sys
-import os
 if sys.version_info[0] != 3:
     print('ERROR: This is Python 3 script!')
     exit(1)
 
 # OS specific PATH variable workarounds
+import os
 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']
 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.chdir(os.path.dirname(os.path.abspath(__file__)))
 
-# Dependency check
-missing = []
-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 kcc.shared import dependencyCheck
+dependencyCheck(3)
 
 from multiprocessing import freeze_support
 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__":
     freeze_support()
-    KCCAplication = QApplicationMessaging(sys.argv)
+    KCCAplication = KCC_gui.QApplicationMessaging(sys.argv)
     if KCCAplication.isRunning():
         if len(sys.argv) > 1:
             KCCAplication.sendMessage(sys.argv[1])
-            sys.exit(0)
         else:
             KCCAplication.sendMessage('ARISE')
-            sys.exit(0)
-    KCCWindow = QMainWindowKCC()
-    KCCUI = KCC_gui.KCCGUI(KCCAplication, KCCWindow)
-    if len(sys.argv) > 1:
-        KCCUI.handleMessage(sys.argv[1])
-    sys.exit(KCCAplication.exec_())
+    else:
+        KCCWindow = KCC_gui.QMainWindowKCC()
+        KCCUI = KCC_gui.KCCGUI(KCCAplication, KCCWindow)
+        if len(sys.argv) > 1:
+            KCCUI.handleMessage(sys.argv[1])
+        sys.exit(KCCAplication.exec_())
diff --git a/kcc/KCC_gui.py b/kcc/KCC_gui.py
index 9e18389..42eb9b9 100644
--- a/kcc/KCC_gui.py
+++ b/kcc/KCC_gui.py
@@ -1,7 +1,7 @@
 # -*- coding: utf-8 -*-
 #
 # 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
 # any purpose with or without fee is hereby granted, provided that the
@@ -19,7 +19,7 @@
 
 __version__ = '4.3.1'
 __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'
 
 import os
@@ -33,12 +33,11 @@ from shutil import move
 from http.server import BaseHTTPRequestHandler, HTTPServer
 from socketserver import ThreadingMixIn
 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 html.parser import HTMLParser
 from psutil import Popen, Process
 from copy import copy
-from .shared import md5Checksum
+from .shared import md5Checksum, HTMLStripper
 from . import comic2ebook
 from . import KCC_rc_web
 if sys.platform.startswith('darwin'):
@@ -49,6 +48,64 @@ else:
     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:
     def __init__(self):
         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)
 
 
-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):
     # noinspection PyAttributeOutsideInit, PyArgumentList
     def do_GET(self):
diff --git a/kcc/__init__.py b/kcc/__init__.py
index 49174f8..72fa985 100644
--- a/kcc/__init__.py
+++ b/kcc/__init__.py
@@ -1,4 +1,4 @@
 __version__ = '4.3.1'
 __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'
\ No newline at end of file
diff --git a/kcc/cbxarchive.py b/kcc/cbxarchive.py
index 6a7c598..cdca253 100644
--- a/kcc/cbxarchive.py
+++ b/kcc/cbxarchive.py
@@ -1,5 +1,5 @@
 # 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
 # any purpose with or without fee is hereby granted, provided that the
@@ -17,7 +17,7 @@
 #
 
 __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'
 
 import sys
diff --git a/kcc/comic2ebook.py b/kcc/comic2ebook.py
index 7401e45..dfd0702 100755
--- a/kcc/comic2ebook.py
+++ b/kcc/comic2ebook.py
@@ -1,7 +1,7 @@
 # -*- coding: utf-8 -*-
 #
 # 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
 # any purpose with or without fee is hereby granted, provided that the
@@ -20,7 +20,7 @@
 
 __version__ = '4.3.1'
 __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'
 
 import os
diff --git a/kcc/comic2panel.py b/kcc/comic2panel.py
index 3b42258..22c783f 100644
--- a/kcc/comic2panel.py
+++ b/kcc/comic2panel.py
@@ -1,7 +1,7 @@
 # -*- coding: utf-8 -*-
 #
 # 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
 # any purpose with or without fee is hereby granted, provided that the
@@ -20,7 +20,7 @@
 
 __version__ = '4.3.1'
 __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'
 
 import os
diff --git a/kcc/dualmetafix.py b/kcc/dualmetafix.py
index 1c80b58..5889d68 100644
--- a/kcc/dualmetafix.py
+++ b/kcc/dualmetafix.py
@@ -1,7 +1,7 @@
 # -*- coding: utf-8 -*-
 #
 # 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
 # it under the terms of the GNU General Public License as published by
diff --git a/kcc/image.py b/kcc/image.py
index 212feda..9eff741 100755
--- a/kcc/image.py
+++ b/kcc/image.py
@@ -1,7 +1,7 @@
 # Copyright (C) 2010  Alex Yatskov
 # Copyright (C) 2011  Stanislav (proDOOMman) Kosolapov <prodoomman@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
 # it under the terms of the GNU General Public License as published by
@@ -18,7 +18,7 @@
 
 __version__ = '4.3.1'
 __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'
 
 import os
diff --git a/kcc/pdfjpgextract.py b/kcc/pdfjpgextract.py
index 4531fa7..7ebae06 100644
--- a/kcc/pdfjpgextract.py
+++ b/kcc/pdfjpgextract.py
@@ -1,5 +1,5 @@
 # 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
 # (http://nedbatchelder.com/blog/200712/extracting_jpgs_from_pdfs.html)
@@ -20,7 +20,7 @@
 #
 
 __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'
 
 import os
diff --git a/kcc/shared.py b/kcc/shared.py
index dbbdd44..b8c7334 100644
--- a/kcc/shared.py
+++ b/kcc/shared.py
@@ -1,5 +1,5 @@
 # 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
 # any purpose with or without fee is hereby granted, provided that the
@@ -17,11 +17,27 @@
 #
 
 __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'
 
 import os
 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):
@@ -57,4 +73,43 @@ def md5Checksum(filePath):
 def check7ZFile(filePath):
     with open(filePath, 'rb') as fh:
         header = fh.read(6)
-    return header == b"7z\xbc\xaf'\x1c"
\ No newline at end of file
+    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)
\ No newline at end of file
diff --git a/setup.py b/setup.py
index 9476d3e..99bd3f5 100755
--- a/setup.py
+++ b/setup.py
@@ -33,7 +33,7 @@ if platform == "darwin":
                     CFBundleName=NAME,
                     CFBundleShortVersionString=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,
                     CFBundleIdentifier='com.github.ciromattia.kcc',
                     CFBundleSignature='dplt',
@@ -81,7 +81,7 @@ elif platform == "win32":
         windows=[{"script": MAIN,
                   "dest_base": "KCC",
                   "version": VERSION,
-                  "copyright": "Ciro Mattia Gonano, Pawel Jastrzebski © 2014",
+                  "copyright": "Ciro Mattia Gonano, Pawel Jastrzebski © 2012-2015",
                   "legal_copyright": "ISC License (ISCL)",
                   "product_version": VERSION,
                   "product_name": "Kindle Comic Converter",