diff --git a/anki/decks.py b/anki/decks.py
index 4edd8bba4..eec95f713 100644
--- a/anki/decks.py
+++ b/anki/decks.py
@@ -38,7 +38,7 @@ defaultDynamicDeck = {
'usn': 0,
'delays': None,
'separate': True,
- # list of (search, limit, order); we only use first element for now
+ # list of (search, limit, order); we only use first two elements for now
'terms': [["", 100, 0]],
'resched': True,
'return': True, # currently unused
diff --git a/anki/sched.py b/anki/sched.py
index 330afe148..d39302720 100644
--- a/anki/sched.py
+++ b/anki/sched.py
@@ -983,28 +983,30 @@ select id from cards where did in %s and queue = 2 and due <= ? limit ?)"""
assert deck['dyn']
# move any existing cards back first, then fill
self.emptyDyn(did)
- ids = self._fillDyn(deck)
- if not ids:
+ cnt = self._fillDyn(deck)
+ if not cnt:
return
# and change to our new deck
self.col.decks.select(did)
- return ids
+ return cnt
def _fillDyn(self, deck):
- search, limit, order = deck['terms'][0]
- orderlimit = self._dynOrder(order, limit)
- if search.strip():
- search = "(%s)" % search
- search = "%s -is:suspended -is:buried -deck:filtered" % search
- try:
- ids = self.col.findCards(search, order=orderlimit)
- except:
- ids = []
- return ids
- # move the cards over
- self.col.log(deck['id'], ids)
- self._moveToDyn(deck['id'], ids)
- return ids
+ start = -100000
+ total = 0
+ for search, limit, order in deck['terms']:
+ orderlimit = self._dynOrder(order, limit)
+ if search.strip():
+ search = "(%s)" % search
+ search = "%s -is:suspended -is:buried -deck:filtered" % search
+ try:
+ ids = self.col.findCards(search, order=orderlimit)
+ except:
+ return total
+ # move the cards over
+ self.col.log(deck['id'], ids)
+ self._moveToDyn(deck['id'], ids, start=start+total)
+ total += len(ids)
+ return total
def emptyDyn(self, did, lim=None):
if not lim:
@@ -1069,13 +1071,14 @@ group by did
t = "c.due"
return t + " limit %d" % l
- def _moveToDyn(self, did, ids):
+ def _moveToDyn(self, did, ids, start=-100000):
deck = self.col.decks.get(did)
data = []
t = intTime(); u = self.col.usn()
- for c, id in enumerate(ids):
- # start at -100000 so that reviews are all due
- data.append((did, -100000+c, u, id))
+ due = start
+ for id in ids:
+ data.append((did, due, u, id))
+ due += 1
query = """
update cards set
diff --git a/aqt/dyndeckconf.py b/aqt/dyndeckconf.py
index 1fc04639d..a1be94d05 100644
--- a/aqt/dyndeckconf.py
+++ b/aqt/dyndeckconf.py
@@ -28,7 +28,8 @@ class DeckConf(QDialog):
self.setupOrder()
self.loadConf()
if search:
- self.form.search.setText(search)
+ self.form.search.setText(search + " is:due")
+ self.form.search_2.setText(search + " is:new")
self.form.search.selectAll()
self.show()
self.exec_()
@@ -37,24 +38,51 @@ class DeckConf(QDialog):
def setupOrder(self):
import anki.consts as cs
self.form.order.addItems(list(cs.dynOrderLabels().values()))
+ self.form.order_2.addItems(list(cs.dynOrderLabels().values()))
def loadConf(self):
f = self.form
d = self.deck
+
+ f.resched.setChecked(d['resched'])
+
search, limit, order = d['terms'][0]
f.search.setText(search)
- f.resched.setChecked(d['resched'])
f.order.setCurrentIndex(order)
f.limit.setValue(limit)
+ if len(d['terms']) > 1:
+ search, limit, order = d['terms'][1]
+ f.search_2.setText(search)
+ f.order_2.setCurrentIndex(order)
+ f.limit_2.setValue(limit)
+ f.secondFilter.setChecked(True)
+ f.filter2group.setVisible(True)
+ else:
+ f.order_2.setCurrentIndex(5)
+ f.limit_2.setValue(20)
+ f.secondFilter.setChecked(False)
+ f.filter2group.setVisible(False)
+
def saveConf(self):
f = self.form
d = self.deck
- d['delays'] = None
- d['terms'][0] = [f.search.text(),
- f.limit.value(),
- f.order.currentIndex()]
d['resched'] = f.resched.isChecked()
+ d['delays'] = None
+
+ terms = [[
+ f.search.text(),
+ f.limit.value(),
+ f.order.currentIndex()]]
+
+ if f.secondFilter.isChecked():
+ terms.append([
+ f.search_2.text(),
+ f.limit_2.value(),
+ f.order_2.currentIndex()])
+
+ d['terms'] = terms
+
self.mw.col.decks.save(d)
return True
diff --git a/designer/dyndconf.ui b/designer/dyndconf.ui
index c0f8d935c..3bedbdc09 100644
--- a/designer/dyndconf.ui
+++ b/designer/dyndconf.ui
@@ -7,7 +7,7 @@
0
0
445
- 301
+ 354
@@ -66,6 +66,58 @@
+ -
+
+
+ Filter 2
+
+
+
-
+
+
+ Limit to
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ Search
+
+
+
+ -
+
+
+
+ 60
+ 16777215
+
+
+
+ 1
+
+
+ 99999
+
+
+
+ -
+
+
+ cards selected by
+
+
+
+
+
+
-
@@ -82,6 +134,13 @@
+ -
+
+
+ Enable second filter
+
+
+
@@ -114,7 +173,11 @@
search
limit
order
+ search_2
+ limit_2
+ order_2
resched
+ secondFilter
buttonBox
@@ -151,5 +214,21 @@
+
+ secondFilter
+ toggled(bool)
+ filter2group
+ setVisible(bool)
+
+
+ 125
+ 265
+
+
+ 222
+ 155
+
+
+