mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
PDF Output: Handle input epub documents with filenames starting with a dot. Also do not hang if there is an unhandled error. Fixes #1040603 (Hangs when converting from epub to pdf)
This commit is contained in:
parent
755d262b67
commit
259ea7b4c6
@ -35,6 +35,8 @@ def load_html(path, view, codec='utf-8', mime_type=None,
|
|||||||
from PyQt4.Qt import QUrl, QByteArray
|
from PyQt4.Qt import QUrl, QByteArray
|
||||||
if mime_type is None:
|
if mime_type is None:
|
||||||
mime_type = guess_type(path)[0]
|
mime_type = guess_type(path)[0]
|
||||||
|
if not mime_type:
|
||||||
|
mime_type = 'text/html'
|
||||||
if path_is_html:
|
if path_is_html:
|
||||||
html = path
|
html = path
|
||||||
else:
|
else:
|
||||||
|
@ -151,16 +151,22 @@ class PDFWriter(QObject): # {{{
|
|||||||
self.combine_queue = []
|
self.combine_queue = []
|
||||||
self.out_stream = out_stream
|
self.out_stream = out_stream
|
||||||
|
|
||||||
|
self.render_succeeded = False
|
||||||
QMetaObject.invokeMethod(self, "_render_book", Qt.QueuedConnection)
|
QMetaObject.invokeMethod(self, "_render_book", Qt.QueuedConnection)
|
||||||
self.loop.exec_()
|
self.loop.exec_()
|
||||||
|
if not self.render_succeeded:
|
||||||
|
raise Exception('Rendering HTML to PDF failed')
|
||||||
|
|
||||||
@QtCore.pyqtSignature('_render_book()')
|
@QtCore.pyqtSignature('_render_book()')
|
||||||
def _render_book(self):
|
def _render_book(self):
|
||||||
if len(self.render_queue) == 0:
|
try:
|
||||||
self._write()
|
if len(self.render_queue) == 0:
|
||||||
else:
|
self._write()
|
||||||
self._render_next()
|
else:
|
||||||
|
self._render_next()
|
||||||
|
except:
|
||||||
|
self.logger.exception('Rendering failed')
|
||||||
|
self.loop.exit(1)
|
||||||
|
|
||||||
def _render_next(self):
|
def _render_next(self):
|
||||||
item = unicode(self.render_queue.pop(0))
|
item = unicode(self.render_queue.pop(0))
|
||||||
@ -252,6 +258,7 @@ class PDFWriter(QObject): # {{{
|
|||||||
for page in inputPDF.pages:
|
for page in inputPDF.pages:
|
||||||
outPDF.addPage(page)
|
outPDF.addPage(page)
|
||||||
outPDF.write(self.out_stream)
|
outPDF.write(self.out_stream)
|
||||||
|
self.render_succeeded = True
|
||||||
finally:
|
finally:
|
||||||
self._delete_tmpdir()
|
self._delete_tmpdir()
|
||||||
self.loop.exit(0)
|
self.loop.exit(0)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user