diff --git a/src/calibre/ebooks/metadata/meta.py b/src/calibre/ebooks/metadata/meta.py
index cbd9db3f04..b204e08bed 100644
--- a/src/calibre/ebooks/metadata/meta.py
+++ b/src/calibre/ebooks/metadata/meta.py
@@ -142,7 +142,13 @@ def metadata_from_filename(name, pat=None):
name = name.rpartition('.')[0]
mi = MetaInformation(None, None)
if pat is None:
- pat = re.compile(prefs.get('filename_pattern'))
+ pat_re = prefs.get('filename_pattern')
+ if isinstance(pat_re, list):
+ if pat_re:
+ pat_re = pat_re[0]
+ else:
+ pat_re = ''
+ pat = re.compile(pat_re)
name = name.replace('_', ' ')
match = pat.search(name)
if match is not None:
diff --git a/src/calibre/gui2/filename_pattern.ui b/src/calibre/gui2/filename_pattern.ui
index d120ca80b2..e2367c8ceb 100644
--- a/src/calibre/gui2/filename_pattern.ui
+++ b/src/calibre/gui2/filename_pattern.ui
@@ -43,7 +43,17 @@ p, li { white-space: pre-wrap; }
-
-
+
+
+ true
+
+
+ 10
+
+
+ QComboBox::InsertAtTop
+
+
@@ -94,8 +104,8 @@ p, li { white-space: pre-wrap; }
0
0
- 301
- 234
+ 277
+ 276
diff --git a/src/calibre/gui2/widgets.py b/src/calibre/gui2/widgets.py
index 9e117822e4..a433a6e5d7 100644
--- a/src/calibre/gui2/widgets.py
+++ b/src/calibre/gui2/widgets.py
@@ -67,17 +67,21 @@ class FilenamePattern(QWidget, Ui_Form):
self.setupUi(self)
self.connect(self.test_button, SIGNAL('clicked()'), self.do_test)
- self.connect(self.re, SIGNAL('returnPressed()'), self.do_test)
- self.initialize()
- self.re.textChanged.connect(lambda x: self.changed_signal.emit())
+ self.connect(self.re.lineEdit(), SIGNAL('returnPressed()'), self.do_test)
+ self.re.lineEdit().textChanged.connect(lambda x: self.changed_signal.emit())
def initialize(self, defaults=False):
if defaults:
val = prefs.defaults['filename_pattern']
else:
val = prefs['filename_pattern']
- self.re.setText(val)
-
+ if isinstance(val, list):
+ if len(val) > 0:
+ for v in val:
+ self.re.addItem(v)
+ self.re.setCurrentIndex(0)
+ else:
+ self.re.lineEdit().setText(val if val else '')
def do_test(self):
try:
@@ -110,12 +114,16 @@ class FilenamePattern(QWidget, Ui_Form):
def pattern(self):
- pat = unicode(self.re.text())
+ pat = unicode(self.re.lineEdit().text())
return re.compile(pat)
def commit(self):
- pat = self.pattern().pattern
- prefs['filename_pattern'] = pat
+ pat = []
+ patterns = [unicode(self.re.lineEdit().text())] + [unicode(self.re.itemText(i)) for i in xrange(self.re.count())]
+ for p in patterns[:14]:
+ if p not in pat:
+ pat.append(p)
+ prefs['filename_pattern'] = pat
return pat