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:
Kovid Goyal 2012-08-23 19:28:56 +05:30
parent 755d262b67
commit 259ea7b4c6
2 changed files with 14 additions and 5 deletions

View File

@ -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:

View File

@ -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)