mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Allow viewing of ebooks on the device as well as in the library.
This commit is contained in:
parent
14ee55ebaa
commit
78f01f5be3
@ -124,3 +124,13 @@ class DeviceManager(QObject):
|
||||
self.device.get_file(path, f)
|
||||
f.close()
|
||||
return save_books
|
||||
|
||||
def view_book_func(self):
|
||||
'''Copy book from device to local hdd for viewing'''
|
||||
def view_book(updater, path, target):
|
||||
self.device.set_progress_reporter(updater)
|
||||
f = open(target, 'wb')
|
||||
self.device.get_file(path, f)
|
||||
f.close()
|
||||
return target
|
||||
return view_book
|
||||
|
@ -751,14 +751,24 @@ class Main(MainWindow, Ui_MainWindow):
|
||||
pt.write(self.library_view.model().db.format(row, format))
|
||||
pt.close()
|
||||
self.persistent_files.append(pt)
|
||||
if format.upper() == 'LRF':
|
||||
args = ['lrfviewer', pt.name]
|
||||
self._view_file(pt.name)
|
||||
|
||||
def book_downloaded_for_viewing(self, id, description, result, exception, formatted_traceback):
|
||||
if exception:
|
||||
self.device_job_exception(id, description, exception, formatted_traceback)
|
||||
return
|
||||
print result
|
||||
self._view_file(result)
|
||||
|
||||
def _view_file(self, name):
|
||||
if name.upper().endswith('.LRF'):
|
||||
args = ['lrfviewer', name]
|
||||
self.job_manager.process_server.run('viewer%d'%self.viewer_job_id,
|
||||
'lrfviewer', kwdargs=dict(args=args),
|
||||
monitor=False)
|
||||
self.viewer_job_id += 1
|
||||
else:
|
||||
launch(pt.name)
|
||||
launch(name)
|
||||
time.sleep(2) # User feedback
|
||||
|
||||
def view_specific_format(self, triggered):
|
||||
@ -779,35 +789,44 @@ class Main(MainWindow, Ui_MainWindow):
|
||||
return
|
||||
|
||||
def view_book(self, triggered):
|
||||
rows = self.library_view.selectionModel().selectedRows()
|
||||
if not rows or len(rows) == 0:
|
||||
d = error_dialog(self, _('Cannot view'), _('No book selected'))
|
||||
d.exec_()
|
||||
return
|
||||
|
||||
row = rows[0].row()
|
||||
formats = self.library_view.model().db.formats(row).upper().split(',')
|
||||
title = self.library_view.model().db.title(row)
|
||||
id = self.library_view.model().db.id(row)
|
||||
format = None
|
||||
if len(formats) == 1:
|
||||
format = formats[0]
|
||||
if 'LRF' in formats:
|
||||
format = 'LRF'
|
||||
if not formats:
|
||||
d = error_dialog(self, _('Cannot view'),
|
||||
_('%s has no available formats.')%(title,))
|
||||
d.exec_()
|
||||
return
|
||||
if format is None:
|
||||
d = ChooseFormatDialog(self, _('Choose the format to view'), formats)
|
||||
d.exec_()
|
||||
if d.result() == QDialog.Accepted:
|
||||
format = d.format()
|
||||
else:
|
||||
rows = self.current_view().selectionModel().selectedRows()
|
||||
if self.current_view() is self.library_view:
|
||||
if not rows or len(rows) == 0:
|
||||
d = error_dialog(self, _('Cannot view'), _('No book selected'))
|
||||
d.exec_()
|
||||
return
|
||||
|
||||
row = rows[0].row()
|
||||
formats = self.library_view.model().db.formats(row).upper().split(',')
|
||||
title = self.library_view.model().db.title(row)
|
||||
id = self.library_view.model().db.id(row)
|
||||
format = None
|
||||
if len(formats) == 1:
|
||||
format = formats[0]
|
||||
if 'LRF' in formats:
|
||||
format = 'LRF'
|
||||
if not formats:
|
||||
d = error_dialog(self, _('Cannot view'),
|
||||
_('%s has no available formats.')%(title,))
|
||||
d.exec_()
|
||||
return
|
||||
if format is None:
|
||||
d = ChooseFormatDialog(self, _('Choose the format to view'), formats)
|
||||
d.exec_()
|
||||
if d.result() == QDialog.Accepted:
|
||||
format = d.format()
|
||||
else:
|
||||
return
|
||||
|
||||
self.view_format(row, format)
|
||||
else:
|
||||
paths = self.current_view().model().paths(rows)
|
||||
pt = PersistentTemporaryFile('_viewer_'+os.path.splitext(paths[0])[1])
|
||||
self.persistent_files.append(pt)
|
||||
pt.close()
|
||||
self.job_manager.run_device_job(self.book_downloaded_for_viewing,
|
||||
self.device_manager.view_book_func(), paths[0], pt.name)
|
||||
|
||||
self.view_format(row, format)
|
||||
|
||||
|
||||
############################################################################
|
||||
@ -907,12 +926,12 @@ class Main(MainWindow, Ui_MainWindow):
|
||||
self.action_sync.setEnabled(True)
|
||||
self.action_edit.setEnabled(True)
|
||||
self.action_convert.setEnabled(True)
|
||||
self.action_view.setEnabled(True)
|
||||
self.view_menu.actions()[1].setEnabled(True)
|
||||
else:
|
||||
self.action_sync.setEnabled(False)
|
||||
self.action_edit.setEnabled(False)
|
||||
self.action_convert.setEnabled(False)
|
||||
self.action_view.setEnabled(False)
|
||||
self.view_menu.actions()[1].setEnabled(False)
|
||||
|
||||
def device_job_exception(self, id, description, exception, formatted_traceback):
|
||||
'''
|
||||
|
Loading…
x
Reference in New Issue
Block a user