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:
Kovid Goyal 2011-12-04 12:08:05 +05:30
parent 46ba6f44f5
commit 681e9ba5d0

View File

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