mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
ebook-viewer: And a command line switch to specify the position at which the file should be opened. Fixes #899325 ([Enhancement] Book position argument for ebook-viewer command)
This commit is contained in:
parent
46ba6f44f5
commit
681e9ba5d0
@ -172,7 +172,7 @@ class EbookViewer(MainWindow, Ui_EbookViewer):
|
|||||||
|
|
||||||
STATE_VERSION = 1
|
STATE_VERSION = 1
|
||||||
|
|
||||||
def __init__(self, pathtoebook=None, debug_javascript=False):
|
def __init__(self, pathtoebook=None, debug_javascript=False, open_at=None):
|
||||||
MainWindow.__init__(self, None)
|
MainWindow.__init__(self, None)
|
||||||
self.setupUi(self)
|
self.setupUi(self)
|
||||||
self.view.magnification_changed.connect(self.magnification_changed)
|
self.view.magnification_changed.connect(self.magnification_changed)
|
||||||
@ -280,7 +280,7 @@ class EbookViewer(MainWindow, Ui_EbookViewer):
|
|||||||
|
|
||||||
|
|
||||||
if pathtoebook is not None:
|
if pathtoebook is not None:
|
||||||
f = functools.partial(self.load_ebook, pathtoebook)
|
f = functools.partial(self.load_ebook, pathtoebook, open_at=open_at)
|
||||||
QTimer.singleShot(50, f)
|
QTimer.singleShot(50, f)
|
||||||
self.view.setMinimumSize(100, 100)
|
self.view.setMinimumSize(100, 100)
|
||||||
self.toc.setCursor(Qt.PointingHandCursor)
|
self.toc.setCursor(Qt.PointingHandCursor)
|
||||||
@ -457,8 +457,8 @@ class EbookViewer(MainWindow, Ui_EbookViewer):
|
|||||||
def goto_end(self):
|
def goto_end(self):
|
||||||
self.goto_page(self.pos.maximum())
|
self.goto_page(self.pos.maximum())
|
||||||
|
|
||||||
def goto_page(self, new_page):
|
def goto_page(self, new_page, loaded_check=True):
|
||||||
if self.current_page is not None:
|
if self.current_page is not None or not loaded_check:
|
||||||
for page in self.iterator.spine:
|
for page in self.iterator.spine:
|
||||||
if new_page >= page.start_page and new_page <= page.max_page:
|
if new_page >= page.start_page and new_page <= page.max_page:
|
||||||
try:
|
try:
|
||||||
@ -672,7 +672,7 @@ class EbookViewer(MainWindow, Ui_EbookViewer):
|
|||||||
except:
|
except:
|
||||||
traceback.print_exc()
|
traceback.print_exc()
|
||||||
|
|
||||||
def load_ebook(self, pathtoebook):
|
def load_ebook(self, pathtoebook, open_at=None):
|
||||||
if self.iterator is not None:
|
if self.iterator is not None:
|
||||||
self.save_current_position()
|
self.save_current_position()
|
||||||
self.iterator.__exit__()
|
self.iterator.__exit__()
|
||||||
@ -731,10 +731,17 @@ class EbookViewer(MainWindow, Ui_EbookViewer):
|
|||||||
self.current_index = -1
|
self.current_index = -1
|
||||||
QApplication.instance().alert(self, 5000)
|
QApplication.instance().alert(self, 5000)
|
||||||
previous = self.set_bookmarks(self.iterator.bookmarks)
|
previous = self.set_bookmarks(self.iterator.bookmarks)
|
||||||
if previous is not None:
|
if open_at is None and previous is not None:
|
||||||
self.goto_bookmark(previous)
|
self.goto_bookmark(previous)
|
||||||
else:
|
else:
|
||||||
self.next_document()
|
if open_at is None:
|
||||||
|
self.next_document()
|
||||||
|
else:
|
||||||
|
if open_at > self.pos.maximum():
|
||||||
|
open_at = self.pos.maximum()
|
||||||
|
if open_at < self.pos.minimum():
|
||||||
|
open_at = self.pos.minimum()
|
||||||
|
self.goto_page(open_at, loaded_check=False)
|
||||||
|
|
||||||
def set_vscrollbar_value(self, pagenum):
|
def set_vscrollbar_value(self, pagenum):
|
||||||
self.vertical_scrollbar.blockSignals(True)
|
self.vertical_scrollbar.blockSignals(True)
|
||||||
@ -804,6 +811,9 @@ def config(defaults=None):
|
|||||||
help=_('Remember last used window size'))
|
help=_('Remember last used window size'))
|
||||||
c.add_opt('debug_javascript', ['--debug-javascript'], default=False,
|
c.add_opt('debug_javascript', ['--debug-javascript'], default=False,
|
||||||
help=_('Print javascript alert and console messages to the console'))
|
help=_('Print javascript alert and console messages to the console'))
|
||||||
|
c.add_opt('open_at', ['--open-at'], default=None,
|
||||||
|
help=_('The position at which to open the specified book. The position is '
|
||||||
|
'a location as displayed in the top left corner of the viewer.'))
|
||||||
|
|
||||||
return c
|
return c
|
||||||
|
|
||||||
@ -823,13 +833,17 @@ def main(args=sys.argv):
|
|||||||
parser = option_parser()
|
parser = option_parser()
|
||||||
opts, args = parser.parse_args(args)
|
opts, args = parser.parse_args(args)
|
||||||
pid = os.fork() if False and (islinux or isbsd) else -1
|
pid = os.fork() if False and (islinux or isbsd) else -1
|
||||||
|
try:
|
||||||
|
open_at = float(opts.open_at)
|
||||||
|
except:
|
||||||
|
open_at = None
|
||||||
if pid <= 0:
|
if pid <= 0:
|
||||||
app = Application(args)
|
app = Application(args)
|
||||||
app.setWindowIcon(QIcon(I('viewer.png')))
|
app.setWindowIcon(QIcon(I('viewer.png')))
|
||||||
QApplication.setOrganizationName(ORG_NAME)
|
QApplication.setOrganizationName(ORG_NAME)
|
||||||
QApplication.setApplicationName(APP_UID)
|
QApplication.setApplicationName(APP_UID)
|
||||||
main = EbookViewer(args[1] if len(args) > 1 else None,
|
main = EbookViewer(args[1] if len(args) > 1 else None,
|
||||||
debug_javascript=opts.debug_javascript)
|
debug_javascript=opts.debug_javascript, open_at=open_at)
|
||||||
sys.excepthook = main.unhandled_exception
|
sys.excepthook = main.unhandled_exception
|
||||||
main.show()
|
main.show()
|
||||||
if opts.raise_window:
|
if opts.raise_window:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user