about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--.gitignore3
-rw-r--r--LICENSE.txt2
-rw-r--r--README.md9
-rwxr-xr-xdocker/Build2
-rw-r--r--docker/Dockerfile5
-rw-r--r--gui/KCC.ui57
-rwxr-xr-xkcc-c2e.py8
-rwxr-xr-xkcc-c2p.py8
-rw-r--r--kcc.iss4
-rwxr-xr-xkcc.py8
-rw-r--r--kindlecomicconverter/KCC_gui.py (renamed from kcc/KCC_gui.py)6
-rw-r--r--kindlecomicconverter/KCC_rc.py (renamed from kcc/KCC_rc.py)0
-rw-r--r--kindlecomicconverter/KCC_ui.py (renamed from kcc/KCC_ui.py)2
-rw-r--r--kindlecomicconverter/KCC_ui_editor.py (renamed from kcc/KCC_ui_editor.py)0
-rw-r--r--kindlecomicconverter/__init__.py (renamed from kcc/__init__.py)4
-rw-r--r--kindlecomicconverter/cbxarchive.py (renamed from kcc/cbxarchive.py)2
-rwxr-xr-xkindlecomicconverter/comic2ebook.py (renamed from kcc/comic2ebook.py)30
-rw-r--r--kindlecomicconverter/comic2panel.py (renamed from kcc/comic2panel.py)2
-rw-r--r--kindlecomicconverter/dualmetafix.py (renamed from kcc/dualmetafix.py)2
-rwxr-xr-xkindlecomicconverter/image.py (renamed from kcc/image.py)36
-rw-r--r--kindlecomicconverter/kindle.py (renamed from kcc/kindle.py)2
-rw-r--r--kindlecomicconverter/metadata.py (renamed from kcc/metadata.py)2
-rw-r--r--kindlecomicconverter/pdfjpgextract.py (renamed from kcc/pdfjpgextract.py)2
-rw-r--r--kindlecomicconverter/rarfile.py (renamed from kcc/rarfile.py)0
-rw-r--r--kindlecomicconverter/shared.py (renamed from kcc/shared.py)2
-rw-r--r--other/osx/Info.plist27
-rwxr-xr-xsetup.py18
27 files changed, 110 insertions, 133 deletions
diff --git a/.gitignore b/.gitignore
index b28f15b..9e0e197 100644
--- a/.gitignore
+++ b/.gitignore
@@ -12,5 +12,6 @@ kindlegen*
 *.spec
 setup.bat
 setup.sh
-kcc/sentry.py
+kindlecomicconverter/sentry.py
 build/
+.python-version
diff --git a/LICENSE.txt b/LICENSE.txt
index cfe3e84..5d0945e 100644
--- a/LICENSE.txt
+++ b/LICENSE.txt
@@ -1,7 +1,7 @@
 ISC LICENSE
 
 Copyright (c) 2012-2014 Ciro Mattia Gonano <[email protected]>
-Copyright (c) 2013-2016 Paweł Jastrzębski <[email protected]>
+Copyright (c) 2013-2017 Paweł Jastrzębski <[email protected]>
 
 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/README.md b/README.md
index 3f8b676..d1c8ea8 100644
--- a/README.md
+++ b/README.md
@@ -163,6 +163,13 @@ The app relies and includes the following scripts:
 * [Kobo Aura ONE](http://kcc.iosphe.re/Samples/Ubunchu-KoAO.kepub.epub)
 
 ## CHANGELOG
+####5.3:
+* Vastly improved output compatibility for non-Kindle devices
+* Enabled old pinch zoom for Kindle devices
+* Re-enabled Panel View support for Kindle Keyboard
+* Partially re-enabled OS X file association mechanism
+* Fixed multiple smaller issues
+
 ####5.2.1:
 * Improved directory parsing
 * Tweaked margin detection algorithm
@@ -495,5 +502,5 @@ The app relies and includes the following scripts:
 Please check [wiki page](https://github.com/ciromattia/kcc/wiki/Known-issues).
 
 ## COPYRIGHT
-Copyright (c) 2012-2016 Ciro Mattia Gonano and Paweł Jastrzębski.
+Copyright (c) 2012-2017 Ciro Mattia Gonano and Paweł Jastrzębski.
 **KCC** is released under ISC LICENSE; see LICENSE.txt for further details.
diff --git a/docker/Build b/docker/Build
index 67c7b7f..6135fb9 100755
--- a/docker/Build
+++ b/docker/Build
@@ -2,7 +2,7 @@
 set -e
 
 pip3 install --upgrade pip setuptools wheel
-pip3 install pillow python-slugify psutil pyinstaller==3.1.1 raven pyqt5 certifi
+pip3 install pillow python-slugify psutil pyinstaller raven pyqt5 certifi
 gem install fpm
 
 cd /app
diff --git a/docker/Dockerfile b/docker/Dockerfile
index 5164aff..784bfac 100644
--- a/docker/Dockerfile
+++ b/docker/Dockerfile
@@ -6,12 +6,9 @@ ADD ./Build /Build
 
 RUN printf "deb http://httpredir.debian.org/debian stretch main" > /etc/apt/sources.list.d/stretch.list
 RUN printf "Package: *\nPin: release a=testing\nPin-Priority: 400\n" > /etc/apt/preferences.d/stretch.pref
-RUN printf "deb http://httpredir.debian.org/debian sid main" > /etc/apt/sources.list.d/sid.list
-RUN printf "Package: *\nPin: release a=testing\nPin-Priority: 300\n" > /etc/apt/preferences.d/sid.pref
 RUN apt-get update && apt-get -y dist-upgrade
 RUN apt-get -y install build-essential curl ruby ruby-dev libpng-dev libjpeg-dev
-RUN apt-get -y -t testing install python3 python3-dev
-RUN apt-get -y -t unstable install python3-pyqt5
+RUN apt-get -y -t testing install python3 python3-dev python3-pyqt5
 RUN curl https://bootstrap.pypa.io/get-pip.py | python3
 RUN apt-get clean -y && apt-get autoclean -y && apt-get autoremove -y && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
 
diff --git a/gui/KCC.ui b/gui/KCC.ui
index 0b94d42..5dc8697 100644
--- a/gui/KCC.ui
+++ b/gui/KCC.ui
@@ -47,7 +47,7 @@
     <item row="2" column="0" colspan="2">
      <widget class="QListWidget" name="jobList">
       <property name="styleSheet">
-       <string notr="true">QListWidget#jobList {background:#ffffff;background-image:url(:/Other/icons/list_background.png);background-position:center center;background-repeat:no-repeat;}</string>
+       <string notr="true">QListWidget#jobList {background:#ffffff;background-image:url(:/Other/icons/list_background.png);background-position:center center;background-repeat:no-repeat;color:rgb(0,0,0);}</string>
       </property>
       <property name="selectionMode">
        <enum>QAbstractItemView::NoSelection</enum>
@@ -66,16 +66,7 @@
        <bool>false</bool>
       </property>
       <layout class="QGridLayout" name="gridLayout_3">
-       <property name="leftMargin">
-        <number>0</number>
-       </property>
-       <property name="topMargin">
-        <number>0</number>
-       </property>
-       <property name="rightMargin">
-        <number>0</number>
-       </property>
-       <property name="bottomMargin">
+       <property name="margin">
         <number>0</number>
        </property>
        <item row="0" column="2">
@@ -136,16 +127,7 @@
     <item row="4" column="0" colspan="2">
      <widget class="QWidget" name="optionWidget" native="true">
       <layout class="QGridLayout" name="gridLayout_2">
-       <property name="leftMargin">
-        <number>0</number>
-       </property>
-       <property name="topMargin">
-        <number>0</number>
-       </property>
-       <property name="rightMargin">
-        <number>0</number>
-       </property>
-       <property name="bottomMargin">
+       <property name="margin">
         <number>0</number>
        </property>
        <item row="0" column="0">
@@ -256,16 +238,7 @@
        <bool>false</bool>
       </property>
       <layout class="QHBoxLayout" name="horizontalLayout_2">
-       <property name="leftMargin">
-        <number>0</number>
-       </property>
-       <property name="topMargin">
-        <number>0</number>
-       </property>
-       <property name="rightMargin">
-        <number>0</number>
-       </property>
-       <property name="bottomMargin">
+       <property name="margin">
         <number>0</number>
        </property>
        <item>
@@ -294,16 +267,7 @@
     <item row="0" column="0" colspan="2">
      <widget class="QWidget" name="toolWidget" native="true">
       <layout class="QHBoxLayout" name="horizontalLayout">
-       <property name="leftMargin">
-        <number>0</number>
-       </property>
-       <property name="topMargin">
-        <number>0</number>
-       </property>
-       <property name="rightMargin">
-        <number>0</number>
-       </property>
-       <property name="bottomMargin">
+       <property name="margin">
         <number>0</number>
        </property>
        <item>
@@ -352,16 +316,7 @@
        </sizepolicy>
       </property>
       <layout class="QGridLayout" name="gridLayout_4">
-       <property name="leftMargin">
-        <number>0</number>
-       </property>
-       <property name="topMargin">
-        <number>0</number>
-       </property>
-       <property name="rightMargin">
-        <number>0</number>
-       </property>
-       <property name="bottomMargin">
+       <property name="margin">
         <number>0</number>
        </property>
        <item row="0" column="0">
diff --git a/kcc-c2e.py b/kcc-c2e.py
index c98ae0b..cb83188 100755
--- a/kcc-c2e.py
+++ b/kcc-c2e.py
@@ -2,7 +2,7 @@
 # -*- coding: utf-8 -*-
 #
 # Copyright (c) 2012-2014 Ciro Mattia Gonano <[email protected]>
-# Copyright (c) 2013-2016 Pawel Jastrzebski <[email protected]>
+# Copyright (c) 2013-2017 Pawel Jastrzebski <[email protected]>
 #
 # Permission to use, copy, modify, and/or distribute this software for
 # any purpose with or without fee is hereby granted, provided that the
@@ -23,12 +23,12 @@ if sys.version_info[0] != 3:
     print('ERROR: This is Python 3 script!')
     exit(1)
 
-from kcc.shared import dependencyCheck
+from kindlecomicconverter.shared import dependencyCheck
 dependencyCheck(2)
 
 from multiprocessing import freeze_support
-from kcc import __version__
-from kcc.comic2ebook import main
+from kindlecomicconverter import __version__
+from kindlecomicconverter.comic2ebook import main
 
 if __name__ == "__main__":
     freeze_support()
diff --git a/kcc-c2p.py b/kcc-c2p.py
index adab111..bc6aa6b 100755
--- a/kcc-c2p.py
+++ b/kcc-c2p.py
@@ -2,7 +2,7 @@
 # -*- coding: utf-8 -*-
 #
 # Copyright (c) 2012-2014 Ciro Mattia Gonano <[email protected]>
-# Copyright (c) 2013-2016 Pawel Jastrzebski <[email protected]>
+# Copyright (c) 2013-2017 Pawel Jastrzebski <[email protected]>
 #
 # Permission to use, copy, modify, and/or distribute this software for
 # any purpose with or without fee is hereby granted, provided that the
@@ -23,12 +23,12 @@ if sys.version_info[0] != 3:
     print('ERROR: This is Python 3 script!')
     exit(1)
 
-from kcc.shared import dependencyCheck
+from kindlecomicconverter.shared import dependencyCheck
 dependencyCheck(1)
 
 from multiprocessing import freeze_support
-from kcc import __version__
-from kcc.comic2panel import main
+from kindlecomicconverter import __version__
+from kindlecomicconverter.comic2panel import main
 
 if __name__ == "__main__":
     freeze_support()
diff --git a/kcc.iss b/kcc.iss
index 9f0e8e6..7cd7685 100644
--- a/kcc.iss
+++ b/kcc.iss
@@ -1,5 +1,5 @@
 #define MyAppName "Kindle Comic Converter"
-#define MyAppVersion "5.2.1"
+#define MyAppVersion "5.3.0"
 #define MyAppPublisher "Ciro Mattia Gonano, Paweł Jastrzębski"
 #define MyAppURL "http://kcc.iosphe.re/"
 #define MyAppExeName "KCC.exe"
@@ -12,7 +12,7 @@ AppPublisher={#MyAppPublisher}
 AppPublisherURL={#MyAppURL}
 AppSupportURL={#MyAppURL}
 AppUpdatesURL={#MyAppURL}
-AppCopyright=Copyright (C) 2012-2016 Ciro Mattia Gonano and Paweł Jastrzębski
+AppCopyright=Copyright (C) 2012-2017 Ciro Mattia Gonano and Paweł Jastrzębski
 ArchitecturesAllowed=x64 
 DefaultDirName={pf}\{#MyAppName}
 DefaultGroupName={#MyAppName}
diff --git a/kcc.py b/kcc.py
index 28045fc..a93e48f 100755
--- a/kcc.py
+++ b/kcc.py
@@ -2,7 +2,7 @@
 # -*- coding: utf-8 -*-
 #
 # Copyright (c) 2012-2014 Ciro Mattia Gonano <[email protected]>
-# Copyright (c) 2013-2016 Pawel Jastrzebski <[email protected]>
+# Copyright (c) 2013-2017 Pawel Jastrzebski <[email protected]>
 #
 # Permission to use, copy, modify, and/or distribute this software for
 # any purpose with or without fee is hereby granted, provided that the
@@ -59,15 +59,15 @@ elif sys.platform.startswith('win'):
 # Load additional Sentry configuration
 if getattr(sys, 'frozen', False):
     try:
-        import kcc.sentry
+        import kindlecomicconverter.sentry
     except:
         pass
 
-from kcc.shared import dependencyCheck
+from kindlecomicconverter.shared import dependencyCheck
 dependencyCheck(3)
 
 from multiprocessing import freeze_support
-from kcc import KCC_gui
+from kindlecomicconverter import KCC_gui
 
 if __name__ == "__main__":
     freeze_support()
diff --git a/kcc/KCC_gui.py b/kindlecomicconverter/KCC_gui.py
index b60c2be..63f004c 100644
--- a/kcc/KCC_gui.py
+++ b/kindlecomicconverter/KCC_gui.py
@@ -1,7 +1,7 @@
 # -*- coding: utf-8 -*-
 #
 # Copyright (c) 2012-2014 Ciro Mattia Gonano <[email protected]>
-# Copyright (c) 2013-2016 Pawel Jastrzebski <[email protected]>
+# Copyright (c) 2013-2017 Pawel Jastrzebski <[email protected]>
 #
 # Permission to use, copy, modify, and/or distribute this software for
 # any purpose with or without fee is hereby granted, provided that the
@@ -672,7 +672,7 @@ class KCCGUI(KCC_ui.Ui_mainWindow):
         # We still fill original text field with transparent content to trigger creation of horizontal scrollbar
         item.setForeground(QtGui.QColor('transparent'))
         label = QtWidgets.QLabel(message)
-        label.setStyleSheet('background-image:url('');background-color:rgba(0,0,0,0);')
+        label.setStyleSheet('background-image:url('');background-color:rgba(0,0,0,0);color:rgb(0,0,0);')
         label.setOpenExternalLinks(True)
         GUI.jobList.addItem(item)
         GUI.jobList.setItemWidget(item, label)
@@ -934,7 +934,7 @@ class KCCGUI(KCC_ui.Ui_mainWindow):
                          'DefaultUpscale': False, 'Label': 'K1'},
             "Kindle 2": {'PVOptions': False, 'ForceExpert': False, 'DefaultFormat': 0,
                          'DefaultUpscale': False, 'Label': 'K2'},
-            "Kindle 3": {'PVOptions': False, 'ForceExpert': False, 'DefaultFormat': 0,
+            "Kindle 3": {'PVOptions': True, 'ForceExpert': False, 'DefaultFormat': 0,
                          'DefaultUpscale': False, 'Label': 'K3'},
         }
         profilesGUI = [
diff --git a/kcc/KCC_rc.py b/kindlecomicconverter/KCC_rc.py
index e4334c8..e4334c8 100644
--- a/kcc/KCC_rc.py
+++ b/kindlecomicconverter/KCC_rc.py
diff --git a/kcc/KCC_ui.py b/kindlecomicconverter/KCC_ui.py
index 6e2ed50..71689ab 100644
--- a/kcc/KCC_ui.py
+++ b/kindlecomicconverter/KCC_ui.py
@@ -31,7 +31,7 @@ class Ui_mainWindow(object):
         self.progressBar.setObjectName("progressBar")
         self.gridLayout.addWidget(self.progressBar, 1, 0, 1, 2)
         self.jobList = QtWidgets.QListWidget(self.centralWidget)
-        self.jobList.setStyleSheet("QListWidget#jobList {background:#ffffff;background-image:url(:/Other/icons/list_background.png);background-position:center center;background-repeat:no-repeat;}")
+        self.jobList.setStyleSheet("QListWidget#jobList {background:#ffffff;background-image:url(:/Other/icons/list_background.png);background-position:center center;background-repeat:no-repeat;color:rgb(0,0,0);}")
         self.jobList.setSelectionMode(QtWidgets.QAbstractItemView.NoSelection)
         self.jobList.setVerticalScrollMode(QtWidgets.QAbstractItemView.ScrollPerPixel)
         self.jobList.setHorizontalScrollMode(QtWidgets.QAbstractItemView.ScrollPerPixel)
diff --git a/kcc/KCC_ui_editor.py b/kindlecomicconverter/KCC_ui_editor.py
index 56dc07d..56dc07d 100644
--- a/kcc/KCC_ui_editor.py
+++ b/kindlecomicconverter/KCC_ui_editor.py
diff --git a/kcc/__init__.py b/kindlecomicconverter/__init__.py
index 8fd5a24..c966b7c 100644
--- a/kcc/__init__.py
+++ b/kindlecomicconverter/__init__.py
@@ -1,4 +1,4 @@
-__version__ = '5.2.1'
+__version__ = '5.3.0'
 __license__ = 'ISC'
-__copyright__ = '2012-2016, Ciro Mattia Gonano <[email protected]>, Pawel Jastrzebski <[email protected]>'
+__copyright__ = '2012-2017, Ciro Mattia Gonano <[email protected]>, Pawel Jastrzebski <[email protected]>'
 __docformat__ = 'restructuredtext en'
diff --git a/kcc/cbxarchive.py b/kindlecomicconverter/cbxarchive.py
index 3c857e7..726432b 100644
--- a/kcc/cbxarchive.py
+++ b/kindlecomicconverter/cbxarchive.py
@@ -1,5 +1,5 @@
 # Copyright (c) 2012-2014 Ciro Mattia Gonano <[email protected]>
-# Copyright (c) 2013-2016 Pawel Jastrzebski <[email protected]>
+# Copyright (c) 2013-2017 Pawel Jastrzebski <[email protected]>
 #
 # 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/comic2ebook.py b/kindlecomicconverter/comic2ebook.py
index e16ea4f..404ca11 100755
--- a/kcc/comic2ebook.py
+++ b/kindlecomicconverter/comic2ebook.py
@@ -1,7 +1,7 @@
 # -*- coding: utf-8 -*-
 #
 # Copyright (c) 2012-2014 Ciro Mattia Gonano <[email protected]>
-# Copyright (c) 2013-2016 Pawel Jastrzebski <[email protected]>
+# Copyright (c) 2013-2017 Pawel Jastrzebski <[email protected]>
 #
 # Permission to use, copy, modify, and/or distribute this software for
 # any purpose with or without fee is hereby granted, provided that the
@@ -106,6 +106,7 @@ def buildHTML(path, imgfile, imgfilepath):
     if not os.path.exists(htmlpath):
         os.makedirs(htmlpath)
     htmlfile = os.path.join(htmlpath, filename[0] + '.xhtml')
+    imgsize = Image.open(os.path.join(head, "Images", postfix, imgfile)).size
     f = open(htmlfile, "w", encoding='UTF-8')
     f.writelines(["<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n",
                   "<!DOCTYPE html>\n",
@@ -116,14 +117,15 @@ def buildHTML(path, imgfile, imgfilepath):
                   "<meta name=\"viewport\" "
                   "content=\"width=" + str(deviceres[0]) + ", height=" + str(deviceres[1]) + "\"/>\n"
                   "</head>\n",
-                  "<body style=\"background-image: ",
-                  "url('", "../" * backref, "Images/", postfix, imgfile, "'); " + additionalStyle + "\">\n"])
+                  "<body style=\"" + additionalStyle + "\">\n",
+                  "<div style=\"text-align:center;top:" + getTopMargin(deviceres, imgsize) + "%;\">\n",
+                  "<img width=\"" + str(imgsize[0]) + "\" height=\"" + str(imgsize[1]) + "\" ",
+                  "src=\"", "../" * backref, "Images/", postfix, imgfile, "\"/>\n</div>\n"])
     if options.iskindle and options.panelview:
-        sizeTmp = Image.open(os.path.join(head, "Images", postfix, imgfile)).size
         if options.autoscale:
-            size = (getPanelViewResolution(sizeTmp, deviceres))
+            size = (getPanelViewResolution(imgsize, deviceres))
         else:
-            size = (int(sizeTmp[0] * 1.5), int(sizeTmp[1] * 1.5))
+            size = (int(imgsize[0] * 1.5), int(imgsize[1] * 1.5))
         if size[0] - deviceres[0] < deviceres[0] * 0.01:
             noHorizontalPV = True
         else:
@@ -356,9 +358,6 @@ def buildEPUB(path, chapterNames, tomeNumber):
                   "display: block;\n",
                   "margin: 0;\n",
                   "padding: 0;\n",
-                  "background-position: center center;\n",
-                  "background-repeat: no-repeat;\n",
-                  "background-size: auto auto;\n",
                   "}\n",
                   "#PV {\n",
                   "position: absolute;\n",
@@ -671,6 +670,11 @@ def getDirectorySize(start_path='.'):
     return total_size
 
 
+def getTopMargin(deviceres, size):
+    y = int((deviceres[1] - size[1]) / 2) / deviceres[1] * 100
+    return str(round(y, 1))
+
+
 def getPanelViewResolution(imageSize, deviceRes):
     scale = float(deviceRes[0]) / float(imageSize[0])
     return int(deviceRes[0]), int(scale * imageSize[1])
@@ -820,10 +824,10 @@ def detectCorruption(tmpPath, orgPath):
             else:
                 saferRemove(os.path.join(root, name))
     if imageSmaller > imageNumber * 0.25 and not options.upscale and not options.stretch:
-        print("WARNING: More than 1/4 of images are smaller than target device resolution. "
+        print("WARNING: More than 25% of images are smaller than target device resolution. "
               "Consider enabling stretching or upscaling to improve readability.")
         if GUI:
-            GUI.addMessage.emit('More than 1/4 of images are smaller than target device resolution.', 'warning', False)
+            GUI.addMessage.emit('More than 25% of images are smaller than target device resolution.', 'warning', False)
             GUI.addMessage.emit('Consider enabling stretching or upscaling to improve readability.', 'warning', False)
             GUI.addMessage.emit('', '', False)
 
@@ -943,8 +947,8 @@ def checkOptions():
     # Splitting MOBI is not optional
     if options.format == 'MOBI' and options.batchsplit != 2:
         options.batchsplit = 1
-    # Older Kindle don't need higher resolution files due lack of Panel View.
-    if options.profile == 'K1' or options.profile == 'K2' or options.profile == 'K3' or options.profile == 'KDX':
+    # Older Kindle models don't support Panel View.
+    if options.profile == 'K1' or options.profile == 'K2' or options.profile == 'KDX':
         options.panelview = False
     # Webtoon mode mandatory options
     if options.webtoon:
diff --git a/kcc/comic2panel.py b/kindlecomicconverter/comic2panel.py
index 5e2b4f9..522587c 100644
--- a/kcc/comic2panel.py
+++ b/kindlecomicconverter/comic2panel.py
@@ -1,7 +1,7 @@
 # -*- coding: utf-8 -*-
 #
 # Copyright (c) 2012-2014 Ciro Mattia Gonano <[email protected]>
-# Copyright (c) 2013-2016 Pawel Jastrzebski <[email protected]>
+# Copyright (c) 2013-2017 Pawel Jastrzebski <[email protected]>
 #
 # 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/dualmetafix.py b/kindlecomicconverter/dualmetafix.py
index ffb9890..566ceb5 100644
--- a/kcc/dualmetafix.py
+++ b/kindlecomicconverter/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-2016 Pawel Jastrzebski <[email protected]>
+# Changes for KCC Copyright (C) 2014-2017 Pawel Jastrzebski <[email protected]>
 #
 # 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/kindlecomicconverter/image.py
index 682ae45..ecc08b9 100755
--- a/kcc/image.py
+++ b/kindlecomicconverter/image.py
@@ -2,7 +2,7 @@
 # Copyright (C) 2011  Stanislav (proDOOMman) Kosolapov <[email protected]>
 # Copyright (c) 2016  Alberto Planas <[email protected]>
 # Copyright (c) 2012-2014 Ciro Mattia Gonano <[email protected]>
-# Copyright (c) 2013-2016 Pawel Jastrzebski <[email protected]>
+# Copyright (c) 2013-2017 Pawel Jastrzebski <[email protected]>
 #
 # 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
@@ -119,15 +119,15 @@ class ComicPageParser:
     def splitCheck(self):
         width, height = self.image.size
         dstwidth, dstheight = self.size
-        # Only split if origin is not oriented the same as target
-        if (width > height) != (dstwidth > dstheight) and not self.opt.webtoon:
+        if (width > height) != (dstwidth > dstheight) and width <= dstheight and height <= dstwidth \
+                and not self.opt.webtoon:
+            self.payload.append(['R', self.source, self.image.rotate(90, Image.BICUBIC, True), self.color, self.fill])
+        elif (width > height) != (dstwidth > dstheight) and not self.opt.webtoon:
             if self.opt.splitter != 1:
                 if width > height:
-                    # Source is landscape, so split by the width
                     leftbox = (0, 0, int(width / 2), height)
                     rightbox = (int(width / 2), 0, width, height)
                 else:
-                    # Source is portrait and target is landscape, so split by the height
                     leftbox = (0, 0, width, int(height / 2))
                     rightbox = (0, int(height / 2), width, height)
                 if self.opt.righttoleft:
@@ -345,34 +345,20 @@ class Cover:
                 source = urlopen(Request(quote(self.options.remoteCovers[self.tomeNumber]).replace('%3A', ':', 1),
                                          headers={'User-Agent': 'KindleComicConverter/' + __version__})).read()
                 self.image = Image.open(BytesIO(source))
-                self.processExternal()
             except Exception:
                 self.image = Image.open(source)
-                self.processInternal()
         else:
             self.image = Image.open(source)
-            self.processInternal()
+        self.process()
 
-    def processInternal(self):
-        self.image = self.image.convert('RGB')
-        self.image = self.trim()
-        self.save()
-
-    def processExternal(self):
+    def process(self):
         self.image = self.image.convert('RGB')
+        self.image = ImageOps.autocontrast(self.image)
+        if not self.options.forcecolor:
+            self.image = self.image.convert('L')
         self.image.thumbnail(self.options.profileData[1], Image.LANCZOS)
         self.save()
 
-    def trim(self):
-        bg = Image.new(self.image.mode, self.image.size, self.image.getpixel((0, 0)))
-        diff = ImageChops.difference(self.image, bg)
-        diff = ImageChops.add(diff, diff, 2.0, -100)
-        bbox = diff.getbbox()
-        if bbox:
-            return self.image.crop(bbox)
-        else:
-            return self.image
-
     def save(self):
         try:
             self.image.save(self.target, "JPEG", optimize=1, quality=80)
@@ -380,7 +366,7 @@ class Cover:
             raise RuntimeError('Failed to process downloaded cover.')
 
     def saveToKindle(self, kindle, asin):
-        self.image = self.image.resize((300, 470), Image.ANTIALIAS).convert('L')
+        self.image = self.image.resize((300, 470), Image.ANTIALIAS)
         try:
             self.image.save(os.path.join(kindle.path.split('documents')[0], 'system', 'thumbnails',
                                          'thumbnail_' + asin + '_EBOK_portrait.jpg'), 'JPEG')
diff --git a/kcc/kindle.py b/kindlecomicconverter/kindle.py
index 90e15e1..1eea63c 100644
--- a/kcc/kindle.py
+++ b/kindlecomicconverter/kindle.py
@@ -1,6 +1,6 @@
 # -*- coding: utf-8 -*-
 #
-# Copyright (c) 2013-2016 Pawel Jastrzebski <[email protected]>
+# Copyright (c) 2013-2017 Pawel Jastrzebski <[email protected]>
 #
 # 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/metadata.py b/kindlecomicconverter/metadata.py
index 2dd51c5..f2cf488 100644
--- a/kcc/metadata.py
+++ b/kindlecomicconverter/metadata.py
@@ -1,6 +1,6 @@
 # -*- coding: utf-8 -*-
 #
-# Copyright (c) 2013-2016 Pawel Jastrzebski <[email protected]>
+# Copyright (c) 2013-2017 Pawel Jastrzebski <[email protected]>
 #
 # 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/pdfjpgextract.py b/kindlecomicconverter/pdfjpgextract.py
index 06403ad..90d0643 100644
--- a/kcc/pdfjpgextract.py
+++ b/kindlecomicconverter/pdfjpgextract.py
@@ -1,5 +1,5 @@
 # Copyright (c) 2012-2014 Ciro Mattia Gonano <[email protected]>
-# Copyright (c) 2013-2016 Pawel Jastrzebski <[email protected]>
+# Copyright (c) 2013-2017 Pawel Jastrzebski <[email protected]>
 #
 # Based upon the code snippet by Ned Batchelder
 # (http://nedbatchelder.com/blog/200712/extracting_jpgs_from_pdfs.html)
diff --git a/kcc/rarfile.py b/kindlecomicconverter/rarfile.py
index afb19a7..afb19a7 100644
--- a/kcc/rarfile.py
+++ b/kindlecomicconverter/rarfile.py
diff --git a/kcc/shared.py b/kindlecomicconverter/shared.py
index c228d30..3843f39 100644
--- a/kcc/shared.py
+++ b/kindlecomicconverter/shared.py
@@ -1,5 +1,5 @@
 # Copyright (c) 2012-2014 Ciro Mattia Gonano <[email protected]>
-# Copyright (c) 2013-2016 Pawel Jastrzebski <[email protected]>
+# Copyright (c) 2013-2017 Pawel Jastrzebski <[email protected]>
 #
 # 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/other/osx/Info.plist b/other/osx/Info.plist
index 0eb9c94..7600993 100644
--- a/other/osx/Info.plist
+++ b/other/osx/Info.plist
@@ -6,10 +6,31 @@
 	<string>English</string>
 	<key>CFBundleDisplayName</key>
 	<string>Kindle Comic Converter</string>
+	<key>CFBundleDocumentTypes</key>
+	<array>
+		<dict>
+		<key>CFBundleTypeExtensions</key>
+		<array>
+			<string>cbz</string>
+			<string>cbr</string>
+			<string>cb7</string>
+			<string>zip</string>
+			<string>rar</string>
+			<string>7z</string>
+			<string>pdf</string>
+		</array>
+		<key>CFBundleTypeIconFile</key>
+		<string>comic2ebook.icns</string>
+		<key>CFBundleTypeName</key>
+		<string>Comics</string>
+		<key>CFBundleTypeRole</key>
+		<string>Editor</string>
+		</dict>
+	</array>
 	<key>CFBundleExecutable</key>
 	<string>MacOS/Kindle Comic Converter</string>
 	<key>CFBundleGetInfoString</key>
-	<string>KindleComicConverter 5.2.1, written 2012-2016 by Ciro Mattia Gonano and Pawel Jastrzebski</string>
+	<string>KindleComicConverter 5.3.0, written 2012-2017 by Ciro Mattia Gonano and Pawel Jastrzebski</string>
 	<key>CFBundleIconFile</key>
 	<string>comic2ebook.icns</string>
 	<key>CFBundleIdentifier</key>
@@ -21,11 +42,11 @@
 	<key>CFBundlePackageType</key>
 	<string>APPL</string>
 	<key>CFBundleShortVersionString</key>
-	<string>5.2.1</string>
+	<string>5.3.0</string>
 	<key>CFBundleSignature</key>
 	<string>????</string>
 	<key>CFBundleVersion</key>
-	<string>5.2.1</string>
+	<string>5.3.0</string>
 	<key>LSEnvironment</key>
 	<dict>
 		<key>PATH</key>
diff --git a/setup.py b/setup.py
index a1f1b73..d355265 100755
--- a/setup.py
+++ b/setup.py
@@ -15,7 +15,7 @@ import shutil
 import setuptools
 import distutils.cmd
 from distutils.command.build import build
-from kcc import __version__
+from kindlecomicconverter import __version__
 
 NAME = 'KindleComicConverter'
 MAIN = 'kcc.py'
@@ -38,7 +38,10 @@ class BuildBinaryCommand(distutils.cmd.Command):
 
     def run(self):
         if sys.platform == 'darwin':
-            os.system('pyinstaller -y -F -i icons/comic2ebook.icns -n "Kindle Comic Converter" -w -s --noupx kcc.py')
+            if os.path.isfile('Kindle Comic Converter.spec'):
+                os.system('pyinstaller "Kindle Comic Converter.spec"')
+            else:
+                os.system('pyinstaller -y -F -i icons/comic2ebook.icns -n "Kindle Comic Converter" -w -s --noupx kcc.py')
             shutil.copy('other/osx/7za', 'dist/Kindle Comic Converter.app/Contents/Resources')
             shutil.copy('other/osx/unrar', 'dist/Kindle Comic Converter.app/Contents/Resources')
             shutil.copy('other/osx/Info.plist', 'dist/Kindle Comic Converter.app/Contents')
@@ -51,7 +54,10 @@ class BuildBinaryCommand(distutils.cmd.Command):
             os.system('appdmg kcc.json dist/KindleComicConverter_osx_' + VERSION + '.dmg')
             exit(0)
         elif sys.platform == 'win32':
-            os.system('pyinstaller -y -F -i icons\comic2ebook.ico -n KCC -w --noupx kcc.py')
+            if os.path.isfile('KCC.spec'):
+                os.system('pyinstaller KCC.spec')
+            else:
+                os.system('pyinstaller -y -F -i icons\comic2ebook.ico -n KCC -w --noupx kcc.py')
             if os.path.isfile('setup.bat'):
                 os.system('setup.bat')
             exit(0)
@@ -59,19 +65,19 @@ class BuildBinaryCommand(distutils.cmd.Command):
             if self.pyz:
                 script = '''
                 cp kcc.py __main__.py
-                zip kcc.zip __main__.py kcc/*.py
+                zip kcc.zip __main__.py kindlecomicconverter/*.py
                 echo "#!/usr/bin/env python3" > kcc-bin
                 cat kcc.zip >> kcc-bin
                 chmod +x kcc-bin
 
                 cp kcc-c2e.py __main__.py
-                zip kcc-c2e.zip __main__.py kcc/*.py
+                zip kcc-c2e.zip __main__.py kindlecomicconverter/*.py
                 echo "#!/usr/bin/env python3" > kcc-c2e-bin
                 cat kcc-c2e.zip >> kcc-c2e-bin
                 chmod +x kcc-c2e-bin
 
                 cp kcc-c2p.py __main__.py
-                zip kcc-c2p.zip __main__.py kcc/*.py
+                zip kcc-c2p.zip __main__.py kindlecomicconverter/*.py
                 echo "#!/usr/bin/env python3" > kcc-c2p-bin
                 cat kcc-c2p.zip >> kcc-c2p-bin
                 chmod +x kcc-c2p-bin