diff options
| author | Paweł Jastrzębski <[email protected]> | 2017-02-12 09:13:12 +0100 |
|---|---|---|
| committer | GitHub <[email protected]> | 2017-02-12 09:13:12 +0100 |
| commit | 4647fd1f1dc7258a13e02591296af010af8c79e3 (patch) | |
| tree | a95a0f3f36392b5bc57bed2e0557501b2421996b | |
| parent | Merge pull request #216 from ciromattia/dev (diff) | |
| parent | Updated README + version bump (diff) | |
| download | kcc-4647fd1f1dc7258a13e02591296af010af8c79e3.tar.gz kcc-4647fd1f1dc7258a13e02591296af010af8c79e3.tar.bz2 kcc-4647fd1f1dc7258a13e02591296af010af8c79e3.zip | |
Merge pull request #224 from ciromattia/dev
5.3.0
| -rw-r--r-- | .gitignore | 3 | ||||
| -rw-r--r-- | LICENSE.txt | 2 | ||||
| -rw-r--r-- | README.md | 9 | ||||
| -rwxr-xr-x | docker/Build | 2 | ||||
| -rw-r--r-- | docker/Dockerfile | 5 | ||||
| -rw-r--r-- | gui/KCC.ui | 57 | ||||
| -rwxr-xr-x | kcc-c2e.py | 8 | ||||
| -rwxr-xr-x | kcc-c2p.py | 8 | ||||
| -rw-r--r-- | kcc.iss | 4 | ||||
| -rwxr-xr-x | kcc.py | 8 | ||||
| -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-x | kindlecomicconverter/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-x | kindlecomicconverter/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.plist | 27 | ||||
| -rwxr-xr-x | setup.py | 18 |
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 |