mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Abort terminal save on error instead of quitting editor
This commit is contained in:
parent
796cba4b69
commit
ae0adc82fb
@ -12,7 +12,7 @@ from urlparse import urlparse
|
|||||||
|
|
||||||
from PyQt5.Qt import (
|
from PyQt5.Qt import (
|
||||||
QObject, QApplication, QDialog, QGridLayout, QLabel, QSize, Qt,
|
QObject, QApplication, QDialog, QGridLayout, QLabel, QSize, Qt,
|
||||||
QDialogButtonBox, QIcon, QTimer, QPixmap, QInputDialog, QUrl)
|
QDialogButtonBox, QIcon, QPixmap, QInputDialog, QUrl)
|
||||||
|
|
||||||
from calibre import prints, isbytestring
|
from calibre import prints, isbytestring
|
||||||
from calibre.ptempfile import PersistentTemporaryDirectory, TemporaryDirectory
|
from calibre.ptempfile import PersistentTemporaryDirectory, TemporaryDirectory
|
||||||
@ -76,6 +76,7 @@ class Boss(QObject):
|
|||||||
self.tdir = None
|
self.tdir = None
|
||||||
self.save_manager = SaveManager(parent, notify)
|
self.save_manager = SaveManager(parent, notify)
|
||||||
self.save_manager.report_error.connect(self.report_save_error)
|
self.save_manager.report_error.connect(self.report_save_error)
|
||||||
|
self.save_manager.check_for_completion.connect(self.check_terminal_save)
|
||||||
self.doing_terminal_save = False
|
self.doing_terminal_save = False
|
||||||
self.ignore_preview_to_editor_sync = False
|
self.ignore_preview_to_editor_sync = False
|
||||||
setup_cssutils_serialization()
|
setup_cssutils_serialization()
|
||||||
@ -951,8 +952,8 @@ class Boss(QObject):
|
|||||||
def report_save_error(self, tb):
|
def report_save_error(self, tb):
|
||||||
if self.doing_terminal_save:
|
if self.doing_terminal_save:
|
||||||
prints(tb, file=sys.stderr)
|
prints(tb, file=sys.stderr)
|
||||||
return
|
self.abort_terminal_save()
|
||||||
self.gui.action_save.setEnabled(True)
|
self.set_modified()
|
||||||
error_dialog(self.gui, _('Could not save'),
|
error_dialog(self.gui, _('Could not save'),
|
||||||
_('Saving of the book failed. Click "Show Details"'
|
_('Saving of the book failed. Click "Show Details"'
|
||||||
' for more information. You can try to save a copy'
|
' for more information. You can try to save a copy'
|
||||||
@ -1370,13 +1371,15 @@ class Boss(QObject):
|
|||||||
self.gui.blocking_job.set_msg(_('Saving, please wait...'))
|
self.gui.blocking_job.set_msg(_('Saving, please wait...'))
|
||||||
self.gui.blocking_job.start()
|
self.gui.blocking_job.start()
|
||||||
self.doing_terminal_save = True
|
self.doing_terminal_save = True
|
||||||
QTimer.singleShot(50, self.check_terminal_save)
|
|
||||||
|
def abort_terminal_save(self):
|
||||||
|
self.doing_terminal_save = False
|
||||||
|
self.gui.blocking_job.stop()
|
||||||
|
|
||||||
def check_terminal_save(self):
|
def check_terminal_save(self):
|
||||||
if self.save_manager.has_tasks:
|
if self.doing_terminal_save and not self.save_manager.has_tasks: # terminal save could have been aborted
|
||||||
return QTimer.singleShot(50, self.check_terminal_save)
|
self.shutdown()
|
||||||
self.shutdown()
|
QApplication.instance().quit()
|
||||||
QApplication.instance().quit()
|
|
||||||
|
|
||||||
def shutdown(self):
|
def shutdown(self):
|
||||||
self.gui.preview.stop_refresh_timer()
|
self.gui.preview.stop_refresh_timer()
|
||||||
|
@ -99,6 +99,7 @@ class SaveManager(QObject):
|
|||||||
start_save = pyqtSignal()
|
start_save = pyqtSignal()
|
||||||
report_error = pyqtSignal(object)
|
report_error = pyqtSignal(object)
|
||||||
save_done = pyqtSignal()
|
save_done = pyqtSignal()
|
||||||
|
check_for_completion = pyqtSignal()
|
||||||
|
|
||||||
def __init__(self, parent, notify=None):
|
def __init__(self, parent, notify=None):
|
||||||
QObject.__init__(self, parent)
|
QObject.__init__(self, parent)
|
||||||
@ -128,14 +129,17 @@ class SaveManager(QObject):
|
|||||||
self.requests.task_done()
|
self.requests.task_done()
|
||||||
self.__empty_queue()
|
self.__empty_queue()
|
||||||
break
|
break
|
||||||
|
error_occurred = True
|
||||||
try:
|
try:
|
||||||
count, tdir, container = x
|
count, tdir, container = x
|
||||||
self.process_save(count, tdir, container)
|
error_occurred = self.process_save(count, tdir, container)
|
||||||
except:
|
except:
|
||||||
import traceback
|
import traceback
|
||||||
traceback.print_exc()
|
traceback.print_exc()
|
||||||
finally:
|
finally:
|
||||||
self.requests.task_done()
|
self.requests.task_done()
|
||||||
|
if not error_occurred:
|
||||||
|
self.check_for_completion.emit()
|
||||||
|
|
||||||
def notify_calibre(self):
|
def notify_calibre(self):
|
||||||
while True:
|
while True:
|
||||||
@ -162,14 +166,17 @@ class SaveManager(QObject):
|
|||||||
return
|
return
|
||||||
self.last_saved = count
|
self.last_saved = count
|
||||||
self.start_save.emit()
|
self.start_save.emit()
|
||||||
|
error_occurred = False
|
||||||
try:
|
try:
|
||||||
self.do_save(tdir, container)
|
self.do_save(tdir, container)
|
||||||
except:
|
except:
|
||||||
import traceback
|
import traceback
|
||||||
self.report_error.emit(traceback.format_exc())
|
self.report_error.emit(traceback.format_exc())
|
||||||
|
error_occurred = True
|
||||||
self.save_done.emit()
|
self.save_done.emit()
|
||||||
if self.notify_data:
|
if self.notify_data:
|
||||||
self.notify_requests.put(True)
|
self.notify_requests.put(True)
|
||||||
|
return error_occurred
|
||||||
|
|
||||||
def do_save(self, tdir, container):
|
def do_save(self, tdir, container):
|
||||||
try:
|
try:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user