diff --git a/src/calibre/gui2/__init__.py b/src/calibre/gui2/__init__.py index c27c004ba2..e6d4ccaac0 100644 --- a/src/calibre/gui2/__init__.py +++ b/src/calibre/gui2/__init__.py @@ -104,6 +104,7 @@ gprefs.defaults['worker_max_time'] = 0 gprefs.defaults['show_files_after_save'] = True gprefs.defaults['auto_add_path'] = None gprefs.defaults['auto_add_check_for_duplicates'] = False +gprefs.defaults['blocked_auto_formats'] = [] # }}} NONE = QVariant() #: Null value to return from the data function of item models diff --git a/src/calibre/gui2/auto_add.py b/src/calibre/gui2/auto_add.py index 74c3ec2bdd..a0be1b72fb 100644 --- a/src/calibre/gui2/auto_add.py +++ b/src/calibre/gui2/auto_add.py @@ -17,6 +17,8 @@ from calibre.ptempfile import PersistentTemporaryDirectory from calibre.ebooks import BOOK_EXTENSIONS from calibre.gui2 import question_dialog, gprefs +AUTO_ADDED = frozenset(BOOK_EXTENSIONS) - {'pdr', 'mbp', 'tan'} + class Worker(Thread): def __init__(self, path, callback): @@ -26,7 +28,7 @@ class Worker(Thread): self.wake_up = Event() self.path, self.callback = path, callback self.staging = set() - self.be = frozenset(BOOK_EXTENSIONS) - {'pdr', 'mbp', 'tan'} + self.allowed = AUTO_ADDED - frozenset(gprefs['blocked_auto_formats']) def run(self): self.tdir = PersistentTemporaryDirectory('_auto_adder') @@ -56,7 +58,7 @@ class Worker(Thread): # Must have read and write permissions and os.access(os.path.join(self.path, x), os.R_OK|os.W_OK) # Must be a known ebook file type - and os.path.splitext(x)[1][1:].lower() in self.be + and os.path.splitext(x)[1][1:].lower() in self.allowed ] data = {} # Give any in progress copies time to complete diff --git a/src/calibre/gui2/preferences/adding.py b/src/calibre/gui2/preferences/adding.py index d35df2a183..1e8395b4f3 100644 --- a/src/calibre/gui2/preferences/adding.py +++ b/src/calibre/gui2/preferences/adding.py @@ -7,11 +7,14 @@ __docformat__ = 'restructuredtext en' import os +from PyQt4.Qt import Qt + from calibre.gui2.preferences import ConfigWidgetBase, test_widget, \ CommaSeparatedList, AbortCommit from calibre.gui2.preferences.adding_ui import Ui_Form from calibre.utils.config import prefs from calibre.gui2.widgets import FilenamePattern +from calibre.gui2.auto_add import AUTO_ADDED from calibre.gui2 import gprefs, choose_dir, error_dialog, question_dialog class ConfigWidget(ConfigWidgetBase, Ui_Form): @@ -38,6 +41,9 @@ class ConfigWidget(ConfigWidgetBase, Ui_Form): self.metadata_box.layout().insertWidget(0, self.filename_pattern) self.filename_pattern.changed_signal.connect(self.changed_signal.emit) self.auto_add_browse_button.clicked.connect(self.choose_aa_path) + for signal in ('Activated', 'Changed', 'DoubleClicked', 'Clicked'): + signal = getattr(self.opt_blocked_auto_formats, 'item'+signal) + signal.connect(self.blocked_auto_formats_changed) def choose_aa_path(self): path = choose_dir(self, 'auto add path choose', @@ -50,11 +56,47 @@ class ConfigWidget(ConfigWidgetBase, Ui_Form): self.filename_pattern.blockSignals(True) self.filename_pattern.initialize() self.filename_pattern.blockSignals(False) + self.init_blocked_auto_formats() self.opt_automerge.setEnabled(self.opt_add_formats_to_existing.isChecked()) + # Blocked auto formats {{{ + def blocked_auto_formats_changed(self, *args): + fmts = self.current_blocked_auto_formats + old = gprefs['blocked_auto_formats'] + if set(fmts) != set(old): + self.changed_signal.emit() + + def init_blocked_auto_formats(self, defaults=False): + if defaults: + fmts = gprefs.defaults['blocked_auto_formats'] + else: + fmts = gprefs['blocked_auto_formats'] + viewer = self.opt_blocked_auto_formats + viewer.blockSignals(True) + exts = set(AUTO_ADDED) + viewer.clear() + for ext in sorted(exts): + viewer.addItem(ext) + item = viewer.item(viewer.count()-1) + item.setFlags(Qt.ItemIsEnabled|Qt.ItemIsUserCheckable) + item.setCheckState(Qt.Checked if + ext in fmts else Qt.Unchecked) + viewer.blockSignals(False) + + @property + def current_blocked_auto_formats(self): + fmts = [] + viewer = self.opt_blocked_auto_formats + for i in range(viewer.count()): + if viewer.item(i).checkState() == Qt.Checked: + fmts.append(unicode(viewer.item(i).text())) + return fmts + # }}} + def restore_defaults(self): ConfigWidgetBase.restore_defaults(self) self.filename_pattern.initialize(defaults=True) + self.init_blocked_auto_formats(defaults=True) def commit(self): path = unicode(self.opt_auto_add_path.text()).strip() @@ -80,7 +122,13 @@ class ConfigWidget(ConfigWidgetBase, Ui_Form): return pattern = self.filename_pattern.commit() prefs['filename_pattern'] = pattern - return ConfigWidgetBase.commit(self) + fmts = self.current_blocked_auto_formats + old = gprefs['blocked_auto_formats'] + changed = set(fmts) != set(old) + if changed: + gprefs['blocked_auto_formats'] = self.current_blocked_auto_formats + ret = ConfigWidgetBase.commit(self) + return changed or ret if __name__ == '__main__': from PyQt4.Qt import QApplication diff --git a/src/calibre/gui2/preferences/adding.ui b/src/calibre/gui2/preferences/adding.ui index 73d305631d..900ed62103 100644 --- a/src/calibre/gui2/preferences/adding.ui +++ b/src/calibre/gui2/preferences/adding.ui @@ -150,8 +150,8 @@ Author matching is exact. &Automatic Adding - - + + Specify a folder. Any files you put into this folder will be automatically added to calibre (restart required). @@ -161,7 +161,46 @@ Author matching is exact. - + + + + <b>WARNING:</b> Files in the above folder will be deleted after being added to calibre. + + + + + + + Ignore files with the following extensions when automatically adding + + + + + + true + + + QAbstractItemView::NoSelection + + + + + + + + + + Qt::Horizontal + + + + 272 + 20 + + + + + @@ -179,21 +218,14 @@ Author matching is exact. ... - + :/images/document_open.png:/images/document_open.png - - - - <b>WARNING:</b> Files in the above folder will be deleted after being added to calibre. - - - - + If set, this option will causes calibre to check if a file @@ -206,19 +238,6 @@ Author matching is exact. - - - - Qt::Vertical - - - - 20 - 40 - - - - @@ -226,7 +245,7 @@ Author matching is exact. - +