From 6c2ea46ce3a62c63cc7a3355d840ad94229f7612 Mon Sep 17 00:00:00 2001 From: Charles Haley <> Date: Wed, 15 Dec 2010 10:00:10 +0000 Subject: [PATCH 1/2] Disable multiple libraries while env var CALIBRE_OVERRIDE_DATABASE_PATH is set --- src/calibre/gui2/actions/choose_library.py | 23 ++++++++++++++------- src/calibre/gui2/actions/copy_to_library.py | 9 +++++++- src/calibre/manual/portable.rst | 2 ++ 3 files changed, 26 insertions(+), 8 deletions(-) diff --git a/src/calibre/gui2/actions/choose_library.py b/src/calibre/gui2/actions/choose_library.py index eb5902be48..e789ae62e6 100644 --- a/src/calibre/gui2/actions/choose_library.py +++ b/src/calibre/gui2/actions/choose_library.py @@ -160,15 +160,17 @@ class ChooseLibraryAction(InterfaceAction): self.action_choose.triggered.connect(self.choose_library, type=Qt.QueuedConnection) self.choose_menu = QMenu(self.gui) - self.choose_menu.addAction(self.action_choose) self.qaction.setMenu(self.choose_menu) - self.quick_menu = QMenu(_('Quick switch')) - self.quick_menu_action = self.choose_menu.addMenu(self.quick_menu) - self.rename_menu = QMenu(_('Rename library')) - self.rename_menu_action = self.choose_menu.addMenu(self.rename_menu) - self.delete_menu = QMenu(_('Delete library')) - self.delete_menu_action = self.choose_menu.addMenu(self.delete_menu) + if not os.environ.get('CALIBRE_OVERRIDE_DATABASE_PATH', None): + self.choose_menu.addAction(self.action_choose) + + self.quick_menu = QMenu(_('Quick switch')) + self.quick_menu_action = self.choose_menu.addMenu(self.quick_menu) + self.rename_menu = QMenu(_('Rename library')) + self.rename_menu_action = self.choose_menu.addMenu(self.rename_menu) + self.delete_menu = QMenu(_('Delete library')) + self.delete_menu_action = self.choose_menu.addMenu(self.delete_menu) self.rename_separator = self.choose_menu.addSeparator() @@ -223,6 +225,8 @@ class ChooseLibraryAction(InterfaceAction): self.library_changed(self.gui.library_view.model().db) def build_menus(self): + if os.environ.get('CALIBRE_OVERRIDE_DATABASE_PATH', None): + return db = self.gui.library_view.model().db locations = list(self.stats.locations(db)) for ac in self.switch_actions: @@ -387,6 +391,11 @@ class ChooseLibraryAction(InterfaceAction): c.exec_() def change_library_allowed(self): + if os.environ.get('CALIBRE_OVERRIDE_DATABASE_PATH', None): + warning_dialog(self.gui, _('Not allowed'), + _('You cannot change libraries while using the environment' + ' variable CALIBRE_OVERRIDE_DATABASE_PATH.'), show=True) + return False if self.gui.job_manager.has_jobs(): warning_dialog(self.gui, _('Not allowed'), _('You cannot change libraries while jobs' diff --git a/src/calibre/gui2/actions/copy_to_library.py b/src/calibre/gui2/actions/copy_to_library.py index 47f7904841..0668baeac6 100644 --- a/src/calibre/gui2/actions/copy_to_library.py +++ b/src/calibre/gui2/actions/copy_to_library.py @@ -12,7 +12,7 @@ from threading import Thread from PyQt4.Qt import QMenu, QToolButton from calibre.gui2.actions import InterfaceAction -from calibre.gui2 import error_dialog, Dispatcher +from calibre.gui2 import error_dialog, Dispatcher, warning_dialog from calibre.gui2.dialogs.progress import ProgressDialog from calibre.utils.config import prefs, tweaks @@ -106,6 +106,9 @@ class CopyToLibraryAction(InterfaceAction): def build_menus(self): self.menu.clear() + if os.environ.get('CALIBRE_OVERRIDE_DATABASE_PATH', None): + self.menu.addAction('disabled', self.cannot_do_dialog) + return db = self.gui.library_view.model().db locations = list(self.stats.locations(db)) for name, loc in locations: @@ -160,5 +163,9 @@ class CopyToLibraryAction(InterfaceAction): self.gui.iactions['Remove Books'].library_ids_deleted( self.worker.processed, row) + def cannot_do_dialog(self): + warning_dialog(self.gui, _('Not allowed'), + _('You cannot use other libraries while using the environment' + ' variable CALIBRE_OVERRIDE_DATABASE_PATH.'), show=True) diff --git a/src/calibre/manual/portable.rst b/src/calibre/manual/portable.rst index a2c8e323d8..76776e3603 100644 --- a/src/calibre/manual/portable.rst +++ b/src/calibre/manual/portable.rst @@ -72,3 +72,5 @@ Precautions -------------- Portable media can occasionally fail so you should make periodic backups of you Calibre library. This can be done by making a copy of the CalibreLibrary folder and all its contents. There are many freely available tools around that can optimise such back processes, well known ones being RoboCopy and RichCopy. However you can simply use a Windows copy facility if you cannot be bothered to use a specialised tools. + +Using the environment variable CALIBRE_OVERRIDE_DATABASE_PATH disables multiple-library support in |app|. Avoid setting this variable in calibre-portable.bat unless you really need it. \ No newline at end of file From eaea0d2aa656630274c8b4eb18ebed7e9ae7b765 Mon Sep 17 00:00:00 2001 From: Charles Haley <> Date: Wed, 15 Dec 2010 12:48:42 +0000 Subject: [PATCH 2/2] Implement a 'remember current page' option in the viewer. --- src/calibre/gui2/viewer/config.ui | 7 +++++++ src/calibre/gui2/viewer/documentview.py | 4 ++++ src/calibre/gui2/viewer/main.py | 10 +++++++++- 3 files changed, 20 insertions(+), 1 deletion(-) diff --git a/src/calibre/gui2/viewer/config.ui b/src/calibre/gui2/viewer/config.ui index 09c38fc908..4066daada2 100644 --- a/src/calibre/gui2/viewer/config.ui +++ b/src/calibre/gui2/viewer/config.ui @@ -171,6 +171,13 @@ + + + + Remember the &current page when quitting + + + diff --git a/src/calibre/gui2/viewer/documentview.py b/src/calibre/gui2/viewer/documentview.py index 8ce0b46a6d..f5d986e757 100644 --- a/src/calibre/gui2/viewer/documentview.py +++ b/src/calibre/gui2/viewer/documentview.py @@ -50,6 +50,8 @@ def config(defaults=None): c.add_opt('hyphenate', default=False, help=_('Hyphenate text')) c.add_opt('hyphenate_default_lang', default='en', help=_('Default language for hyphenation rules')) + c.add_opt('remember_current_page', default=True, + help=_('Save the current position in the documentwhen quitting')) fonts = c.add_group('FONTS', _('Font options')) fonts('serif_family', default='Times New Roman' if iswindows else 'Liberation Serif', @@ -72,6 +74,7 @@ class ConfigDialog(QDialog, Ui_Dialog): opts = config().parse() self.opt_remember_window_size.setChecked(opts.remember_window_size) + self.opt_remember_current_page.setChecked(opts.remember_current_page) self.serif_family.setCurrentFont(QFont(opts.serif_family)) self.sans_family.setCurrentFont(QFont(opts.sans_family)) self.mono_family.setCurrentFont(QFont(opts.mono_family)) @@ -118,6 +121,7 @@ class ConfigDialog(QDialog, Ui_Dialog): c.set('fit_images', self.opt_fit_images.isChecked()) c.set('max_view_width', int(self.max_view_width.value())) c.set('hyphenate', self.hyphenate.isChecked()) + c.set('remember_current_page', self.opt_remember_current_page.isChecked()) idx = self.hyphenate_default_lang.currentIndex() c.set('hyphenate_default_lang', str(self.hyphenate_default_lang.itemData(idx).toString())) diff --git a/src/calibre/gui2/viewer/main.py b/src/calibre/gui2/viewer/main.py index 96fe758ca6..f7b8a8d401 100644 --- a/src/calibre/gui2/viewer/main.py +++ b/src/calibre/gui2/viewer/main.py @@ -328,6 +328,11 @@ class EbookViewer(MainWindow, Ui_EbookViewer): c = config().parse() self.frame.setMaximumWidth(c.max_view_width) + def get_remember_current_page_opt(self): + from calibre.gui2.viewer.documentview import config + c = config().parse() + return c.remember_current_page + def print_book(self, preview): Printing(self.iterator.spine, preview) @@ -578,7 +583,8 @@ class EbookViewer(MainWindow, Ui_EbookViewer): current_page = None self.existing_bookmarks = [] for bm in bookmarks: - if bm[0] == 'calibre_current_page_bookmark': + if bm[0] == 'calibre_current_page_bookmark' and \ + self.get_remember_current_page_opt(): current_page = bm else: self.existing_bookmarks.append(bm[0]) @@ -598,6 +604,8 @@ class EbookViewer(MainWindow, Ui_EbookViewer): self.set_bookmarks(bookmarks) def save_current_position(self): + if not self.get_remember_current_page_opt(): + return try: pos = self.view.bookmark() bookmark = '%d#%s'%(self.current_index, pos)