mirror of
https://github.com/ankitects/anki.git
synced 2025-09-24 08:46:37 -04:00
tree grouping; add column to groups so they can remember tags
This commit is contained in:
parent
e547b0586a
commit
2d00163323
4 changed files with 43 additions and 21 deletions
30
anki/deck.py
30
anki/deck.py
|
@ -2,7 +2,8 @@
|
|||
# Copyright: Damien Elmes <anki@ichi2.net>
|
||||
# License: GNU GPL, version 3 or later; http://www.gnu.org/copyleft/gpl.html
|
||||
|
||||
import time, os, random, re, stat, simplejson, datetime, copy
|
||||
import time, os, random, re, stat, simplejson, datetime, copy, itertools
|
||||
import operator
|
||||
|
||||
from anki.lang import _, ngettext
|
||||
from anki.utils import parseTags, tidyHTML, ids2str, hexifyID, \
|
||||
|
@ -554,15 +555,34 @@ update facts set tags = :t, mod = :n where id = :id""", [fix(row) for row in res
|
|||
|
||||
def groups(self):
|
||||
"A list of all group names."
|
||||
return self.db.list("select name from groups")
|
||||
return self.db.list("select name from groups order by name")
|
||||
|
||||
def groupsTree(self):
|
||||
return self._groupChildren(self.groups())
|
||||
|
||||
def _groupChildren(self, grps):
|
||||
tree = []
|
||||
for (head, tail) in itertools.groupby([x.split("::", 1) for x in grps],
|
||||
key=operator.itemgetter(0)):
|
||||
tail = list(tail)
|
||||
l = [c[1] for c in tail if len(c) > 1]
|
||||
children = self._groupChildren(l)
|
||||
tree.append((head, children))
|
||||
return tuple(tree)
|
||||
for g in grps:
|
||||
names = g.split("::")
|
||||
if g == last:
|
||||
top[-1][1].append(g)
|
||||
pass
|
||||
|
||||
def groupId(self, name):
|
||||
"Return the id for NAME, creating if necessary."
|
||||
id = self.db.scalar("select id from groups where name = ?", name)
|
||||
if not id:
|
||||
id = self.db.execute("insert into groups values (?,?,?,?)",
|
||||
self.nextID("gid"), intTime(), name,
|
||||
1).lastrowid
|
||||
id = self.db.execute(
|
||||
"insert into groups values (?,?,?,?, ?)",
|
||||
self.nextID("gid"), intTime(), name, 1,
|
||||
simplejson.dumps(anki.groups.defaultData)).lastrowid
|
||||
return id
|
||||
|
||||
def delGroup(self, gid):
|
||||
|
|
|
@ -33,16 +33,7 @@ defaultConf = {
|
|||
'maxTaken': 60,
|
||||
}
|
||||
|
||||
class GroupConfig(object):
|
||||
def __init__(self, name):
|
||||
self.name = name
|
||||
self.id = None
|
||||
self.config = defaultConf
|
||||
|
||||
def load(self):
|
||||
self.config = simplejson.loads(self._config)
|
||||
return self
|
||||
|
||||
def save(self):
|
||||
self._config = simplejson.dumps(self.config)
|
||||
self.modified = intTime()
|
||||
defaultData = {
|
||||
'activeTags': None,
|
||||
'inactiveTags': None,
|
||||
}
|
||||
|
|
|
@ -123,7 +123,8 @@ create table if not exists groups (
|
|||
id integer primary key,
|
||||
mod integer not null,
|
||||
name text not null,
|
||||
gcid integer not null
|
||||
gcid integer not null,
|
||||
data text not null
|
||||
);
|
||||
|
||||
create table if not exists gconf (
|
||||
|
@ -162,8 +163,9 @@ values(1,0,0,0,%(v)s,0,'',0,'', '', '');
|
|||
intTime(), _("Default Config"),
|
||||
simplejson.dumps(anki.groups.defaultConf))
|
||||
db.execute(
|
||||
"insert or ignore into groups values (1, ?, ?, 1)",
|
||||
intTime(), _("Default Group"))
|
||||
"insert or ignore into groups values (1, ?, ?, 1, ?)",
|
||||
intTime(), _("Default Group"), simplejson.dumps(
|
||||
anki.groups.defaultData))
|
||||
if setDeckConf:
|
||||
db.execute("update deck set qconf = ?, conf = ?, data = ?",
|
||||
simplejson.dumps(anki.deck.defaultQconf),
|
||||
|
|
|
@ -177,3 +177,12 @@ def test_selective():
|
|||
assert deck.db.scalar("select count() from cards where gid = 3") == 3
|
||||
deck.setGroupForTags(["one"], [], 2)
|
||||
assert deck.db.scalar("select count() from cards where gid = 2") == 2
|
||||
|
||||
def test_groups():
|
||||
d = getEmptyDeck()
|
||||
tree = d._groupChildren(
|
||||
["a", "b", "c::1", "c::2", "d", "d::1", "d::1::2::3"])
|
||||
assert tree[0] == ("a", tuple())
|
||||
assert tree[1] == ("b", tuple())
|
||||
assert tree[2] == ("c", (("1", tuple()), ("2", tuple())))
|
||||
assert tree[3] == ('d', (('1', (('2', (('3', ()),)),)),))
|
||||
|
|
Loading…
Reference in a new issue