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)
|
self.device.get_file(path, f)
|
||||||
f.close()
|
f.close()
|
||||||
return save_books
|
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.write(self.library_view.model().db.format(row, format))
|
||||||
pt.close()
|
pt.close()
|
||||||
self.persistent_files.append(pt)
|
self.persistent_files.append(pt)
|
||||||
if format.upper() == 'LRF':
|
self._view_file(pt.name)
|
||||||
args = ['lrfviewer', 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,
|
self.job_manager.process_server.run('viewer%d'%self.viewer_job_id,
|
||||||
'lrfviewer', kwdargs=dict(args=args),
|
'lrfviewer', kwdargs=dict(args=args),
|
||||||
monitor=False)
|
monitor=False)
|
||||||
self.viewer_job_id += 1
|
self.viewer_job_id += 1
|
||||||
else:
|
else:
|
||||||
launch(pt.name)
|
launch(name)
|
||||||
time.sleep(2) # User feedback
|
time.sleep(2) # User feedback
|
||||||
|
|
||||||
def view_specific_format(self, triggered):
|
def view_specific_format(self, triggered):
|
||||||
@ -779,35 +789,44 @@ class Main(MainWindow, Ui_MainWindow):
|
|||||||
return
|
return
|
||||||
|
|
||||||
def view_book(self, triggered):
|
def view_book(self, triggered):
|
||||||
rows = self.library_view.selectionModel().selectedRows()
|
rows = self.current_view().selectionModel().selectedRows()
|
||||||
if not rows or len(rows) == 0:
|
if self.current_view() is self.library_view:
|
||||||
d = error_dialog(self, _('Cannot view'), _('No book selected'))
|
if not rows or len(rows) == 0:
|
||||||
d.exec_()
|
d = error_dialog(self, _('Cannot view'), _('No book selected'))
|
||||||
return
|
d.exec_()
|
||||||
|
|
||||||
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
|
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_sync.setEnabled(True)
|
||||||
self.action_edit.setEnabled(True)
|
self.action_edit.setEnabled(True)
|
||||||
self.action_convert.setEnabled(True)
|
self.action_convert.setEnabled(True)
|
||||||
self.action_view.setEnabled(True)
|
self.view_menu.actions()[1].setEnabled(True)
|
||||||
else:
|
else:
|
||||||
self.action_sync.setEnabled(False)
|
self.action_sync.setEnabled(False)
|
||||||
self.action_edit.setEnabled(False)
|
self.action_edit.setEnabled(False)
|
||||||
self.action_convert.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):
|
def device_job_exception(self, id, description, exception, formatted_traceback):
|
||||||
'''
|
'''
|
||||||
|
Loading…
x
Reference in New Issue
Block a user