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.
-
+