mirror of
https://github.com/ciromattia/kcc
synced 2025-12-15 18:56:28 +00:00
3
.gitignore
vendored
3
.gitignore
vendored
@@ -12,5 +12,6 @@ kindlegen*
|
|||||||
*.spec
|
*.spec
|
||||||
setup.bat
|
setup.bat
|
||||||
setup.sh
|
setup.sh
|
||||||
kcc/sentry.py
|
kindlecomicconverter/sentry.py
|
||||||
build/
|
build/
|
||||||
|
.python-version
|
||||||
|
|||||||
@@ -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-2016 Paweł Jastrzębski <pawelj@iosphe.re>
|
Copyright (c) 2013-2017 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
|
||||||
|
|||||||
@@ -163,6 +163,13 @@ The app relies and includes the following scripts:
|
|||||||
* [Kobo Aura ONE](http://kcc.iosphe.re/Samples/Ubunchu-KoAO.kepub.epub)
|
* [Kobo Aura ONE](http://kcc.iosphe.re/Samples/Ubunchu-KoAO.kepub.epub)
|
||||||
|
|
||||||
## CHANGELOG
|
## 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:
|
####5.2.1:
|
||||||
* Improved directory parsing
|
* Improved directory parsing
|
||||||
* Tweaked margin detection algorithm
|
* 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).
|
Please check [wiki page](https://github.com/ciromattia/kcc/wiki/Known-issues).
|
||||||
|
|
||||||
## COPYRIGHT
|
## 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.
|
**KCC** is released under ISC LICENSE; see LICENSE.txt for further details.
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
set -e
|
set -e
|
||||||
|
|
||||||
pip3 install --upgrade pip setuptools wheel
|
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
|
gem install fpm
|
||||||
|
|
||||||
cd /app
|
cd /app
|
||||||
|
|||||||
@@ -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 "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 "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 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 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 testing install python3 python3-dev python3-pyqt5
|
||||||
RUN apt-get -y -t unstable install python3-pyqt5
|
|
||||||
RUN curl https://bootstrap.pypa.io/get-pip.py | python3
|
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/*
|
RUN apt-get clean -y && apt-get autoclean -y && apt-get autoremove -y && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
|
||||||
|
|
||||||
|
|||||||
57
gui/KCC.ui
57
gui/KCC.ui
@@ -47,7 +47,7 @@
|
|||||||
<item row="2" column="0" colspan="2">
|
<item row="2" column="0" colspan="2">
|
||||||
<widget class="QListWidget" name="jobList">
|
<widget class="QListWidget" name="jobList">
|
||||||
<property name="styleSheet">
|
<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>
|
||||||
<property name="selectionMode">
|
<property name="selectionMode">
|
||||||
<enum>QAbstractItemView::NoSelection</enum>
|
<enum>QAbstractItemView::NoSelection</enum>
|
||||||
@@ -66,16 +66,7 @@
|
|||||||
<bool>false</bool>
|
<bool>false</bool>
|
||||||
</property>
|
</property>
|
||||||
<layout class="QGridLayout" name="gridLayout_3">
|
<layout class="QGridLayout" name="gridLayout_3">
|
||||||
<property name="leftMargin">
|
<property name="margin">
|
||||||
<number>0</number>
|
|
||||||
</property>
|
|
||||||
<property name="topMargin">
|
|
||||||
<number>0</number>
|
|
||||||
</property>
|
|
||||||
<property name="rightMargin">
|
|
||||||
<number>0</number>
|
|
||||||
</property>
|
|
||||||
<property name="bottomMargin">
|
|
||||||
<number>0</number>
|
<number>0</number>
|
||||||
</property>
|
</property>
|
||||||
<item row="0" column="2">
|
<item row="0" column="2">
|
||||||
@@ -136,16 +127,7 @@
|
|||||||
<item row="4" column="0" colspan="2">
|
<item row="4" column="0" colspan="2">
|
||||||
<widget class="QWidget" name="optionWidget" native="true">
|
<widget class="QWidget" name="optionWidget" native="true">
|
||||||
<layout class="QGridLayout" name="gridLayout_2">
|
<layout class="QGridLayout" name="gridLayout_2">
|
||||||
<property name="leftMargin">
|
<property name="margin">
|
||||||
<number>0</number>
|
|
||||||
</property>
|
|
||||||
<property name="topMargin">
|
|
||||||
<number>0</number>
|
|
||||||
</property>
|
|
||||||
<property name="rightMargin">
|
|
||||||
<number>0</number>
|
|
||||||
</property>
|
|
||||||
<property name="bottomMargin">
|
|
||||||
<number>0</number>
|
<number>0</number>
|
||||||
</property>
|
</property>
|
||||||
<item row="0" column="0">
|
<item row="0" column="0">
|
||||||
@@ -256,16 +238,7 @@
|
|||||||
<bool>false</bool>
|
<bool>false</bool>
|
||||||
</property>
|
</property>
|
||||||
<layout class="QHBoxLayout" name="horizontalLayout_2">
|
<layout class="QHBoxLayout" name="horizontalLayout_2">
|
||||||
<property name="leftMargin">
|
<property name="margin">
|
||||||
<number>0</number>
|
|
||||||
</property>
|
|
||||||
<property name="topMargin">
|
|
||||||
<number>0</number>
|
|
||||||
</property>
|
|
||||||
<property name="rightMargin">
|
|
||||||
<number>0</number>
|
|
||||||
</property>
|
|
||||||
<property name="bottomMargin">
|
|
||||||
<number>0</number>
|
<number>0</number>
|
||||||
</property>
|
</property>
|
||||||
<item>
|
<item>
|
||||||
@@ -294,16 +267,7 @@
|
|||||||
<item row="0" column="0" colspan="2">
|
<item row="0" column="0" colspan="2">
|
||||||
<widget class="QWidget" name="toolWidget" native="true">
|
<widget class="QWidget" name="toolWidget" native="true">
|
||||||
<layout class="QHBoxLayout" name="horizontalLayout">
|
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||||
<property name="leftMargin">
|
<property name="margin">
|
||||||
<number>0</number>
|
|
||||||
</property>
|
|
||||||
<property name="topMargin">
|
|
||||||
<number>0</number>
|
|
||||||
</property>
|
|
||||||
<property name="rightMargin">
|
|
||||||
<number>0</number>
|
|
||||||
</property>
|
|
||||||
<property name="bottomMargin">
|
|
||||||
<number>0</number>
|
<number>0</number>
|
||||||
</property>
|
</property>
|
||||||
<item>
|
<item>
|
||||||
@@ -352,16 +316,7 @@
|
|||||||
</sizepolicy>
|
</sizepolicy>
|
||||||
</property>
|
</property>
|
||||||
<layout class="QGridLayout" name="gridLayout_4">
|
<layout class="QGridLayout" name="gridLayout_4">
|
||||||
<property name="leftMargin">
|
<property name="margin">
|
||||||
<number>0</number>
|
|
||||||
</property>
|
|
||||||
<property name="topMargin">
|
|
||||||
<number>0</number>
|
|
||||||
</property>
|
|
||||||
<property name="rightMargin">
|
|
||||||
<number>0</number>
|
|
||||||
</property>
|
|
||||||
<property name="bottomMargin">
|
|
||||||
<number>0</number>
|
<number>0</number>
|
||||||
</property>
|
</property>
|
||||||
<item row="0" column="0">
|
<item row="0" column="0">
|
||||||
|
|||||||
@@ -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-2016 Pawel Jastrzebski <pawelj@iosphe.re>
|
# Copyright (c) 2013-2017 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
|
||||||
@@ -23,12 +23,12 @@ if sys.version_info[0] != 3:
|
|||||||
print('ERROR: This is Python 3 script!')
|
print('ERROR: This is Python 3 script!')
|
||||||
exit(1)
|
exit(1)
|
||||||
|
|
||||||
from kcc.shared import dependencyCheck
|
from kindlecomicconverter.shared import dependencyCheck
|
||||||
dependencyCheck(2)
|
dependencyCheck(2)
|
||||||
|
|
||||||
from multiprocessing import freeze_support
|
from multiprocessing import freeze_support
|
||||||
from kcc import __version__
|
from kindlecomicconverter import __version__
|
||||||
from kcc.comic2ebook import main
|
from kindlecomicconverter.comic2ebook import main
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
freeze_support()
|
freeze_support()
|
||||||
|
|||||||
@@ -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-2016 Pawel Jastrzebski <pawelj@iosphe.re>
|
# Copyright (c) 2013-2017 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
|
||||||
@@ -23,12 +23,12 @@ if sys.version_info[0] != 3:
|
|||||||
print('ERROR: This is Python 3 script!')
|
print('ERROR: This is Python 3 script!')
|
||||||
exit(1)
|
exit(1)
|
||||||
|
|
||||||
from kcc.shared import dependencyCheck
|
from kindlecomicconverter.shared import dependencyCheck
|
||||||
dependencyCheck(1)
|
dependencyCheck(1)
|
||||||
|
|
||||||
from multiprocessing import freeze_support
|
from multiprocessing import freeze_support
|
||||||
from kcc import __version__
|
from kindlecomicconverter import __version__
|
||||||
from kcc.comic2panel import main
|
from kindlecomicconverter.comic2panel import main
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
freeze_support()
|
freeze_support()
|
||||||
|
|||||||
4
kcc.iss
4
kcc.iss
@@ -1,5 +1,5 @@
|
|||||||
#define MyAppName "Kindle Comic Converter"
|
#define MyAppName "Kindle Comic Converter"
|
||||||
#define MyAppVersion "5.2.1"
|
#define MyAppVersion "5.3.0"
|
||||||
#define MyAppPublisher "Ciro Mattia Gonano, Paweł Jastrzębski"
|
#define MyAppPublisher "Ciro Mattia Gonano, Paweł Jastrzębski"
|
||||||
#define MyAppURL "http://kcc.iosphe.re/"
|
#define MyAppURL "http://kcc.iosphe.re/"
|
||||||
#define MyAppExeName "KCC.exe"
|
#define MyAppExeName "KCC.exe"
|
||||||
@@ -12,7 +12,7 @@ AppPublisher={#MyAppPublisher}
|
|||||||
AppPublisherURL={#MyAppURL}
|
AppPublisherURL={#MyAppURL}
|
||||||
AppSupportURL={#MyAppURL}
|
AppSupportURL={#MyAppURL}
|
||||||
AppUpdatesURL={#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
|
ArchitecturesAllowed=x64
|
||||||
DefaultDirName={pf}\{#MyAppName}
|
DefaultDirName={pf}\{#MyAppName}
|
||||||
DefaultGroupName={#MyAppName}
|
DefaultGroupName={#MyAppName}
|
||||||
|
|||||||
8
kcc.py
8
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-2016 Pawel Jastrzebski <pawelj@iosphe.re>
|
# Copyright (c) 2013-2017 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
|
||||||
@@ -59,15 +59,15 @@ elif sys.platform.startswith('win'):
|
|||||||
# Load additional Sentry configuration
|
# Load additional Sentry configuration
|
||||||
if getattr(sys, 'frozen', False):
|
if getattr(sys, 'frozen', False):
|
||||||
try:
|
try:
|
||||||
import kcc.sentry
|
import kindlecomicconverter.sentry
|
||||||
except:
|
except:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
from kcc.shared import dependencyCheck
|
from kindlecomicconverter.shared import dependencyCheck
|
||||||
dependencyCheck(3)
|
dependencyCheck(3)
|
||||||
|
|
||||||
from multiprocessing import freeze_support
|
from multiprocessing import freeze_support
|
||||||
from kcc import KCC_gui
|
from kindlecomicconverter import KCC_gui
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
freeze_support()
|
freeze_support()
|
||||||
|
|||||||
@@ -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-2016 Pawel Jastrzebski <pawelj@iosphe.re>
|
# Copyright (c) 2013-2017 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
|
||||||
@@ -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
|
# We still fill original text field with transparent content to trigger creation of horizontal scrollbar
|
||||||
item.setForeground(QtGui.QColor('transparent'))
|
item.setForeground(QtGui.QColor('transparent'))
|
||||||
label = QtWidgets.QLabel(message)
|
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)
|
label.setOpenExternalLinks(True)
|
||||||
GUI.jobList.addItem(item)
|
GUI.jobList.addItem(item)
|
||||||
GUI.jobList.setItemWidget(item, label)
|
GUI.jobList.setItemWidget(item, label)
|
||||||
@@ -934,7 +934,7 @@ class KCCGUI(KCC_ui.Ui_mainWindow):
|
|||||||
'DefaultUpscale': False, 'Label': 'K1'},
|
'DefaultUpscale': False, 'Label': 'K1'},
|
||||||
"Kindle 2": {'PVOptions': False, 'ForceExpert': False, 'DefaultFormat': 0,
|
"Kindle 2": {'PVOptions': False, 'ForceExpert': False, 'DefaultFormat': 0,
|
||||||
'DefaultUpscale': False, 'Label': 'K2'},
|
'DefaultUpscale': False, 'Label': 'K2'},
|
||||||
"Kindle 3": {'PVOptions': False, 'ForceExpert': False, 'DefaultFormat': 0,
|
"Kindle 3": {'PVOptions': True, 'ForceExpert': False, 'DefaultFormat': 0,
|
||||||
'DefaultUpscale': False, 'Label': 'K3'},
|
'DefaultUpscale': False, 'Label': 'K3'},
|
||||||
}
|
}
|
||||||
profilesGUI = [
|
profilesGUI = [
|
||||||
@@ -31,7 +31,7 @@ class Ui_mainWindow(object):
|
|||||||
self.progressBar.setObjectName("progressBar")
|
self.progressBar.setObjectName("progressBar")
|
||||||
self.gridLayout.addWidget(self.progressBar, 1, 0, 1, 2)
|
self.gridLayout.addWidget(self.progressBar, 1, 0, 1, 2)
|
||||||
self.jobList = QtWidgets.QListWidget(self.centralWidget)
|
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.setSelectionMode(QtWidgets.QAbstractItemView.NoSelection)
|
||||||
self.jobList.setVerticalScrollMode(QtWidgets.QAbstractItemView.ScrollPerPixel)
|
self.jobList.setVerticalScrollMode(QtWidgets.QAbstractItemView.ScrollPerPixel)
|
||||||
self.jobList.setHorizontalScrollMode(QtWidgets.QAbstractItemView.ScrollPerPixel)
|
self.jobList.setHorizontalScrollMode(QtWidgets.QAbstractItemView.ScrollPerPixel)
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
__version__ = '5.2.1'
|
__version__ = '5.3.0'
|
||||||
__license__ = 'ISC'
|
__license__ = 'ISC'
|
||||||
__copyright__ = '2012-2016, Ciro Mattia Gonano <ciromattia@gmail.com>, Pawel Jastrzebski <pawelj@iosphe.re>'
|
__copyright__ = '2012-2017, 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-2016 Pawel Jastrzebski <pawelj@iosphe.re>
|
# Copyright (c) 2013-2017 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
|
||||||
@@ -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-2016 Pawel Jastrzebski <pawelj@iosphe.re>
|
# Copyright (c) 2013-2017 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
|
||||||
@@ -106,6 +106,7 @@ def buildHTML(path, imgfile, imgfilepath):
|
|||||||
if not os.path.exists(htmlpath):
|
if not os.path.exists(htmlpath):
|
||||||
os.makedirs(htmlpath)
|
os.makedirs(htmlpath)
|
||||||
htmlfile = os.path.join(htmlpath, filename[0] + '.xhtml')
|
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 = open(htmlfile, "w", encoding='UTF-8')
|
||||||
f.writelines(["<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n",
|
f.writelines(["<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n",
|
||||||
"<!DOCTYPE html>\n",
|
"<!DOCTYPE html>\n",
|
||||||
@@ -116,14 +117,15 @@ def buildHTML(path, imgfile, imgfilepath):
|
|||||||
"<meta name=\"viewport\" "
|
"<meta name=\"viewport\" "
|
||||||
"content=\"width=" + str(deviceres[0]) + ", height=" + str(deviceres[1]) + "\"/>\n"
|
"content=\"width=" + str(deviceres[0]) + ", height=" + str(deviceres[1]) + "\"/>\n"
|
||||||
"</head>\n",
|
"</head>\n",
|
||||||
"<body style=\"background-image: ",
|
"<body style=\"" + additionalStyle + "\">\n",
|
||||||
"url('", "../" * backref, "Images/", postfix, imgfile, "'); " + 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:
|
if options.iskindle and options.panelview:
|
||||||
sizeTmp = Image.open(os.path.join(head, "Images", postfix, imgfile)).size
|
|
||||||
if options.autoscale:
|
if options.autoscale:
|
||||||
size = (getPanelViewResolution(sizeTmp, deviceres))
|
size = (getPanelViewResolution(imgsize, deviceres))
|
||||||
else:
|
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:
|
if size[0] - deviceres[0] < deviceres[0] * 0.01:
|
||||||
noHorizontalPV = True
|
noHorizontalPV = True
|
||||||
else:
|
else:
|
||||||
@@ -356,9 +358,6 @@ def buildEPUB(path, chapterNames, tomeNumber):
|
|||||||
"display: block;\n",
|
"display: block;\n",
|
||||||
"margin: 0;\n",
|
"margin: 0;\n",
|
||||||
"padding: 0;\n",
|
"padding: 0;\n",
|
||||||
"background-position: center center;\n",
|
|
||||||
"background-repeat: no-repeat;\n",
|
|
||||||
"background-size: auto auto;\n",
|
|
||||||
"}\n",
|
"}\n",
|
||||||
"#PV {\n",
|
"#PV {\n",
|
||||||
"position: absolute;\n",
|
"position: absolute;\n",
|
||||||
@@ -671,6 +670,11 @@ def getDirectorySize(start_path='.'):
|
|||||||
return total_size
|
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):
|
def getPanelViewResolution(imageSize, deviceRes):
|
||||||
scale = float(deviceRes[0]) / float(imageSize[0])
|
scale = float(deviceRes[0]) / float(imageSize[0])
|
||||||
return int(deviceRes[0]), int(scale * imageSize[1])
|
return int(deviceRes[0]), int(scale * imageSize[1])
|
||||||
@@ -820,10 +824,10 @@ def detectCorruption(tmpPath, orgPath):
|
|||||||
else:
|
else:
|
||||||
saferRemove(os.path.join(root, name))
|
saferRemove(os.path.join(root, name))
|
||||||
if imageSmaller > imageNumber * 0.25 and not options.upscale and not options.stretch:
|
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.")
|
"Consider enabling stretching or upscaling to improve readability.")
|
||||||
if GUI:
|
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('Consider enabling stretching or upscaling to improve readability.', 'warning', False)
|
||||||
GUI.addMessage.emit('', '', False)
|
GUI.addMessage.emit('', '', False)
|
||||||
|
|
||||||
@@ -943,8 +947,8 @@ def checkOptions():
|
|||||||
# Splitting MOBI is not optional
|
# Splitting MOBI is not optional
|
||||||
if options.format == 'MOBI' and options.batchsplit != 2:
|
if options.format == 'MOBI' and options.batchsplit != 2:
|
||||||
options.batchsplit = 1
|
options.batchsplit = 1
|
||||||
# Older Kindle don't need higher resolution files due lack of Panel View.
|
# Older Kindle models don't support Panel View.
|
||||||
if options.profile == 'K1' or options.profile == 'K2' or options.profile == 'K3' or options.profile == 'KDX':
|
if options.profile == 'K1' or options.profile == 'K2' or options.profile == 'KDX':
|
||||||
options.panelview = False
|
options.panelview = False
|
||||||
# Webtoon mode mandatory options
|
# Webtoon mode mandatory options
|
||||||
if options.webtoon:
|
if options.webtoon:
|
||||||
@@ -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-2016 Pawel Jastrzebski <pawelj@iosphe.re>
|
# Copyright (c) 2013-2017 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
|
||||||
@@ -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-2016 Pawel Jastrzebski <pawelj@iosphe.re>
|
# Changes for KCC Copyright (C) 2014-2017 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
|
||||||
@@ -2,7 +2,7 @@
|
|||||||
# Copyright (C) 2011 Stanislav (proDOOMman) Kosolapov <prodoomman@gmail.com>
|
# Copyright (C) 2011 Stanislav (proDOOMman) Kosolapov <prodoomman@gmail.com>
|
||||||
# Copyright (c) 2016 Alberto Planas <aplanas@gmail.com>
|
# Copyright (c) 2016 Alberto Planas <aplanas@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-2016 Pawel Jastrzebski <pawelj@iosphe.re>
|
# Copyright (c) 2013-2017 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
|
||||||
@@ -119,15 +119,15 @@ class ComicPageParser:
|
|||||||
def splitCheck(self):
|
def splitCheck(self):
|
||||||
width, height = self.image.size
|
width, height = self.image.size
|
||||||
dstwidth, dstheight = self.size
|
dstwidth, dstheight = self.size
|
||||||
# Only split if origin is not oriented the same as target
|
if (width > height) != (dstwidth > dstheight) and width <= dstheight and height <= dstwidth \
|
||||||
if (width > height) != (dstwidth > dstheight) and not self.opt.webtoon:
|
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 self.opt.splitter != 1:
|
||||||
if width > height:
|
if width > height:
|
||||||
# Source is landscape, so split by the width
|
|
||||||
leftbox = (0, 0, int(width / 2), height)
|
leftbox = (0, 0, int(width / 2), height)
|
||||||
rightbox = (int(width / 2), 0, width, height)
|
rightbox = (int(width / 2), 0, width, height)
|
||||||
else:
|
else:
|
||||||
# Source is portrait and target is landscape, so split by the height
|
|
||||||
leftbox = (0, 0, width, int(height / 2))
|
leftbox = (0, 0, width, int(height / 2))
|
||||||
rightbox = (0, int(height / 2), width, height)
|
rightbox = (0, int(height / 2), width, height)
|
||||||
if self.opt.righttoleft:
|
if self.opt.righttoleft:
|
||||||
@@ -345,34 +345,20 @@ class Cover:
|
|||||||
source = urlopen(Request(quote(self.options.remoteCovers[self.tomeNumber]).replace('%3A', ':', 1),
|
source = urlopen(Request(quote(self.options.remoteCovers[self.tomeNumber]).replace('%3A', ':', 1),
|
||||||
headers={'User-Agent': 'KindleComicConverter/' + __version__})).read()
|
headers={'User-Agent': 'KindleComicConverter/' + __version__})).read()
|
||||||
self.image = Image.open(BytesIO(source))
|
self.image = Image.open(BytesIO(source))
|
||||||
self.processExternal()
|
|
||||||
except Exception:
|
except Exception:
|
||||||
self.image = Image.open(source)
|
self.image = Image.open(source)
|
||||||
self.processInternal()
|
|
||||||
else:
|
else:
|
||||||
self.image = Image.open(source)
|
self.image = Image.open(source)
|
||||||
self.processInternal()
|
self.process()
|
||||||
|
|
||||||
def processInternal(self):
|
def process(self):
|
||||||
self.image = self.image.convert('RGB')
|
|
||||||
self.image = self.trim()
|
|
||||||
self.save()
|
|
||||||
|
|
||||||
def processExternal(self):
|
|
||||||
self.image = self.image.convert('RGB')
|
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.image.thumbnail(self.options.profileData[1], Image.LANCZOS)
|
||||||
self.save()
|
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):
|
def save(self):
|
||||||
try:
|
try:
|
||||||
self.image.save(self.target, "JPEG", optimize=1, quality=80)
|
self.image.save(self.target, "JPEG", optimize=1, quality=80)
|
||||||
@@ -380,7 +366,7 @@ class Cover:
|
|||||||
raise RuntimeError('Failed to process downloaded cover.')
|
raise RuntimeError('Failed to process downloaded cover.')
|
||||||
|
|
||||||
def saveToKindle(self, kindle, asin):
|
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:
|
try:
|
||||||
self.image.save(os.path.join(kindle.path.split('documents')[0], 'system', 'thumbnails',
|
self.image.save(os.path.join(kindle.path.split('documents')[0], 'system', 'thumbnails',
|
||||||
'thumbnail_' + asin + '_EBOK_portrait.jpg'), 'JPEG')
|
'thumbnail_' + asin + '_EBOK_portrait.jpg'), 'JPEG')
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
#
|
#
|
||||||
# Copyright (c) 2013-2016 Pawel Jastrzebski <pawelj@iosphe.re>
|
# Copyright (c) 2013-2017 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
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
#
|
#
|
||||||
# Copyright (c) 2013-2016 Pawel Jastrzebski <pawelj@iosphe.re>
|
# Copyright (c) 2013-2017 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
|
||||||
@@ -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-2016 Pawel Jastrzebski <pawelj@iosphe.re>
|
# Copyright (c) 2013-2017 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)
|
||||||
@@ -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-2016 Pawel Jastrzebski <pawelj@iosphe.re>
|
# Copyright (c) 2013-2017 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
|
||||||
@@ -6,10 +6,31 @@
|
|||||||
<string>English</string>
|
<string>English</string>
|
||||||
<key>CFBundleDisplayName</key>
|
<key>CFBundleDisplayName</key>
|
||||||
<string>Kindle Comic Converter</string>
|
<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>
|
<key>CFBundleExecutable</key>
|
||||||
<string>MacOS/Kindle Comic Converter</string>
|
<string>MacOS/Kindle Comic Converter</string>
|
||||||
<key>CFBundleGetInfoString</key>
|
<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>
|
<key>CFBundleIconFile</key>
|
||||||
<string>comic2ebook.icns</string>
|
<string>comic2ebook.icns</string>
|
||||||
<key>CFBundleIdentifier</key>
|
<key>CFBundleIdentifier</key>
|
||||||
@@ -21,11 +42,11 @@
|
|||||||
<key>CFBundlePackageType</key>
|
<key>CFBundlePackageType</key>
|
||||||
<string>APPL</string>
|
<string>APPL</string>
|
||||||
<key>CFBundleShortVersionString</key>
|
<key>CFBundleShortVersionString</key>
|
||||||
<string>5.2.1</string>
|
<string>5.3.0</string>
|
||||||
<key>CFBundleSignature</key>
|
<key>CFBundleSignature</key>
|
||||||
<string>????</string>
|
<string>????</string>
|
||||||
<key>CFBundleVersion</key>
|
<key>CFBundleVersion</key>
|
||||||
<string>5.2.1</string>
|
<string>5.3.0</string>
|
||||||
<key>LSEnvironment</key>
|
<key>LSEnvironment</key>
|
||||||
<dict>
|
<dict>
|
||||||
<key>PATH</key>
|
<key>PATH</key>
|
||||||
|
|||||||
18
setup.py
18
setup.py
@@ -15,7 +15,7 @@ import shutil
|
|||||||
import setuptools
|
import setuptools
|
||||||
import distutils.cmd
|
import distutils.cmd
|
||||||
from distutils.command.build import build
|
from distutils.command.build import build
|
||||||
from kcc import __version__
|
from kindlecomicconverter import __version__
|
||||||
|
|
||||||
NAME = 'KindleComicConverter'
|
NAME = 'KindleComicConverter'
|
||||||
MAIN = 'kcc.py'
|
MAIN = 'kcc.py'
|
||||||
@@ -38,7 +38,10 @@ class BuildBinaryCommand(distutils.cmd.Command):
|
|||||||
|
|
||||||
def run(self):
|
def run(self):
|
||||||
if sys.platform == 'darwin':
|
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/7za', 'dist/Kindle Comic Converter.app/Contents/Resources')
|
||||||
shutil.copy('other/osx/unrar', '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')
|
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')
|
os.system('appdmg kcc.json dist/KindleComicConverter_osx_' + VERSION + '.dmg')
|
||||||
exit(0)
|
exit(0)
|
||||||
elif sys.platform == 'win32':
|
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'):
|
if os.path.isfile('setup.bat'):
|
||||||
os.system('setup.bat')
|
os.system('setup.bat')
|
||||||
exit(0)
|
exit(0)
|
||||||
@@ -59,19 +65,19 @@ class BuildBinaryCommand(distutils.cmd.Command):
|
|||||||
if self.pyz:
|
if self.pyz:
|
||||||
script = '''
|
script = '''
|
||||||
cp kcc.py __main__.py
|
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
|
echo "#!/usr/bin/env python3" > kcc-bin
|
||||||
cat kcc.zip >> kcc-bin
|
cat kcc.zip >> kcc-bin
|
||||||
chmod +x kcc-bin
|
chmod +x kcc-bin
|
||||||
|
|
||||||
cp kcc-c2e.py __main__.py
|
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
|
echo "#!/usr/bin/env python3" > kcc-c2e-bin
|
||||||
cat kcc-c2e.zip >> kcc-c2e-bin
|
cat kcc-c2e.zip >> kcc-c2e-bin
|
||||||
chmod +x kcc-c2e-bin
|
chmod +x kcc-c2e-bin
|
||||||
|
|
||||||
cp kcc-c2p.py __main__.py
|
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
|
echo "#!/usr/bin/env python3" > kcc-c2p-bin
|
||||||
cat kcc-c2p.zip >> kcc-c2p-bin
|
cat kcc-c2p.zip >> kcc-c2p-bin
|
||||||
chmod +x kcc-c2p-bin
|
chmod +x kcc-c2p-bin
|
||||||
|
|||||||
Reference in New Issue
Block a user