mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Implement #777001 (Add Preview ePub button to Tweak ePub dialog)
This commit is contained in:
parent
1400f54107
commit
fe90a1b04f
@ -7,16 +7,16 @@ __copyright__ = '2010, Kovid Goyal <kovid@kovidgoyal.net>'
|
|||||||
__docformat__ = 'restructuredtext en'
|
__docformat__ = 'restructuredtext en'
|
||||||
|
|
||||||
import os, shutil
|
import os, shutil
|
||||||
from contextlib import closing
|
|
||||||
from zipfile import ZipFile, ZIP_DEFLATED, ZIP_STORED
|
from zipfile import ZipFile, ZIP_DEFLATED, ZIP_STORED
|
||||||
|
|
||||||
from PyQt4.Qt import QDialog
|
from PyQt4.Qt import QDialog
|
||||||
|
|
||||||
from calibre.constants import isosx
|
from calibre.constants import isosx
|
||||||
from calibre.gui2 import open_local_file
|
from calibre.gui2 import open_local_file, error_dialog
|
||||||
from calibre.gui2.dialogs.tweak_epub_ui import Ui_Dialog
|
from calibre.gui2.dialogs.tweak_epub_ui import Ui_Dialog
|
||||||
from calibre.libunzip import extract as zipextract
|
from calibre.libunzip import extract as zipextract
|
||||||
from calibre.ptempfile import PersistentTemporaryDirectory
|
from calibre.ptempfile import (PersistentTemporaryDirectory,
|
||||||
|
PersistentTemporaryFile)
|
||||||
|
|
||||||
class TweakEpub(QDialog, Ui_Dialog):
|
class TweakEpub(QDialog, Ui_Dialog):
|
||||||
'''
|
'''
|
||||||
@ -37,11 +37,15 @@ class TweakEpub(QDialog, Ui_Dialog):
|
|||||||
self.cancel_button.clicked.connect(self.reject)
|
self.cancel_button.clicked.connect(self.reject)
|
||||||
self.explode_button.clicked.connect(self.explode)
|
self.explode_button.clicked.connect(self.explode)
|
||||||
self.rebuild_button.clicked.connect(self.rebuild)
|
self.rebuild_button.clicked.connect(self.rebuild)
|
||||||
|
self.preview_button.clicked.connect(self.preview)
|
||||||
|
|
||||||
# Position update dialog overlaying top left of app window
|
# Position update dialog overlaying top left of app window
|
||||||
parent_loc = parent.pos()
|
parent_loc = parent.pos()
|
||||||
self.move(parent_loc.x(),parent_loc.y())
|
self.move(parent_loc.x(),parent_loc.y())
|
||||||
|
|
||||||
|
self.gui = parent
|
||||||
|
self._preview_files = []
|
||||||
|
|
||||||
def cleanup(self):
|
def cleanup(self):
|
||||||
if isosx:
|
if isosx:
|
||||||
try:
|
try:
|
||||||
@ -55,6 +59,11 @@ class TweakEpub(QDialog, Ui_Dialog):
|
|||||||
# Delete directory containing exploded ePub
|
# Delete directory containing exploded ePub
|
||||||
if self._exploded is not None:
|
if self._exploded is not None:
|
||||||
shutil.rmtree(self._exploded, ignore_errors=True)
|
shutil.rmtree(self._exploded, ignore_errors=True)
|
||||||
|
for x in self._preview_files:
|
||||||
|
try:
|
||||||
|
os.remove(x)
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
|
||||||
def display_exploded(self):
|
def display_exploded(self):
|
||||||
'''
|
'''
|
||||||
@ -71,9 +80,8 @@ class TweakEpub(QDialog, Ui_Dialog):
|
|||||||
self.rebuild_button.setEnabled(True)
|
self.rebuild_button.setEnabled(True)
|
||||||
self.explode_button.setEnabled(False)
|
self.explode_button.setEnabled(False)
|
||||||
|
|
||||||
def rebuild(self, *args):
|
def do_rebuild(self, src):
|
||||||
self._output = os.path.join(self._exploded, 'rebuilt.epub')
|
with ZipFile(src, 'w', compression=ZIP_DEFLATED) as zf:
|
||||||
with closing(ZipFile(self._output, 'w', compression=ZIP_DEFLATED)) as zf:
|
|
||||||
# Write mimetype
|
# Write mimetype
|
||||||
zf.write(os.path.join(self._exploded,'mimetype'), 'mimetype', compress_type=ZIP_STORED)
|
zf.write(os.path.join(self._exploded,'mimetype'), 'mimetype', compress_type=ZIP_STORED)
|
||||||
# Write everything else
|
# Write everything else
|
||||||
@ -86,5 +94,23 @@ class TweakEpub(QDialog, Ui_Dialog):
|
|||||||
zfn = os.path.relpath(absfn,
|
zfn = os.path.relpath(absfn,
|
||||||
self._exploded).replace(os.sep, '/')
|
self._exploded).replace(os.sep, '/')
|
||||||
zf.write(absfn, zfn)
|
zf.write(absfn, zfn)
|
||||||
|
|
||||||
|
def preview(self):
|
||||||
|
if not self._exploded:
|
||||||
|
return error_dialog(self, _('Cannot preview'),
|
||||||
|
_('You must first explode the epub before previewing.'),
|
||||||
|
show=True)
|
||||||
|
|
||||||
|
tf = PersistentTemporaryFile('.epub')
|
||||||
|
tf.close()
|
||||||
|
self._preview_files.append(tf.name)
|
||||||
|
|
||||||
|
self.do_rebuild(tf.name)
|
||||||
|
|
||||||
|
self.gui.iactions['View']._view_file(tf.name)
|
||||||
|
|
||||||
|
def rebuild(self, *args):
|
||||||
|
self._output = os.path.join(self._exploded, 'rebuilt.epub')
|
||||||
|
self.do_rebuild(self._output)
|
||||||
return QDialog.accept(self)
|
return QDialog.accept(self)
|
||||||
|
|
||||||
|
@ -23,6 +23,16 @@
|
|||||||
<bool>false</bool>
|
<bool>false</bool>
|
||||||
</property>
|
</property>
|
||||||
<layout class="QGridLayout" name="gridLayout">
|
<layout class="QGridLayout" name="gridLayout">
|
||||||
|
<item row="0" column="0" colspan="2">
|
||||||
|
<widget class="QLabel" name="label">
|
||||||
|
<property name="text">
|
||||||
|
<string><p>Explode the ePub to display contents in a file browser window. To tweak individual files, right-click, then 'Open with...' your editor of choice. When tweaks are complete, close the file browser window <b>and the editor windows you used to edit files in the epub</b>.</p><p>Rebuild the ePub, updating your calibre library.</p></string>
|
||||||
|
</property>
|
||||||
|
<property name="wordWrap">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
<item row="1" column="0">
|
<item row="1" column="0">
|
||||||
<widget class="QPushButton" name="explode_button">
|
<widget class="QPushButton" name="explode_button">
|
||||||
<property name="statusTip">
|
<property name="statusTip">
|
||||||
@ -37,23 +47,6 @@
|
|||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="2" column="0">
|
|
||||||
<widget class="QPushButton" name="rebuild_button">
|
|
||||||
<property name="enabled">
|
|
||||||
<bool>false</bool>
|
|
||||||
</property>
|
|
||||||
<property name="statusTip">
|
|
||||||
<string>Rebuild ePub from exploded contents</string>
|
|
||||||
</property>
|
|
||||||
<property name="text">
|
|
||||||
<string>&Rebuild ePub</string>
|
|
||||||
</property>
|
|
||||||
<property name="icon">
|
|
||||||
<iconset resource="../../../../resources/images.qrc">
|
|
||||||
<normaloff>:/images/exec.png</normaloff>:/images/exec.png</iconset>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="3" column="0">
|
<item row="3" column="0">
|
||||||
<widget class="QPushButton" name="cancel_button">
|
<widget class="QPushButton" name="cancel_button">
|
||||||
<property name="statusTip">
|
<property name="statusTip">
|
||||||
@ -68,13 +61,31 @@
|
|||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="0" column="0">
|
<item row="3" column="1">
|
||||||
<widget class="QLabel" name="label">
|
<widget class="QPushButton" name="rebuild_button">
|
||||||
<property name="text">
|
<property name="enabled">
|
||||||
<string><p>Explode the ePub to display contents in a file browser window. To tweak individual files, right-click, then 'Open with...' your editor of choice. When tweaks are complete, close the file browser window <b>and the editor windows you used to edit files in the epub</b>.</p><p>Rebuild the ePub, updating your calibre library.</p></string>
|
<bool>false</bool>
|
||||||
</property>
|
</property>
|
||||||
<property name="wordWrap">
|
<property name="statusTip">
|
||||||
<bool>true</bool>
|
<string>Rebuild ePub from exploded contents</string>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>&Rebuild ePub</string>
|
||||||
|
</property>
|
||||||
|
<property name="icon">
|
||||||
|
<iconset resource="../../../../resources/images.qrc">
|
||||||
|
<normaloff>:/images/exec.png</normaloff>:/images/exec.png</iconset>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="1">
|
||||||
|
<widget class="QPushButton" name="preview_button">
|
||||||
|
<property name="text">
|
||||||
|
<string>&Preview ePub</string>
|
||||||
|
</property>
|
||||||
|
<property name="icon">
|
||||||
|
<iconset resource="../../../../resources/images.qrc">
|
||||||
|
<normaloff>:/images/view.png</normaloff>:/images/view.png</iconset>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user