mirror of
https://github.com/ankitects/anki.git
synced 2025-09-19 14:32:22 -04:00
add deck vars
This commit is contained in:
parent
aed9fb1c61
commit
c7f9cec657
3 changed files with 37 additions and 0 deletions
20
anki/deck.py
20
anki/deck.py
|
@ -49,6 +49,11 @@ REV_CARDS_RANDOM = 3
|
||||||
|
|
||||||
DECK_VERSION = 32
|
DECK_VERSION = 32
|
||||||
|
|
||||||
|
deckVarsTable = Table(
|
||||||
|
'deckVars', metadata,
|
||||||
|
Column('key', UnicodeText, nullable=False, primary_key=True),
|
||||||
|
Column('value', UnicodeText))
|
||||||
|
|
||||||
# parts of the code assume we only have one deck
|
# parts of the code assume we only have one deck
|
||||||
decksTable = Table(
|
decksTable = Table(
|
||||||
'decks', metadata,
|
'decks', metadata,
|
||||||
|
@ -1833,6 +1838,21 @@ cardTags.tagId in %s""" % ids2str(ids)
|
||||||
return True
|
return True
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
# Meta vars
|
||||||
|
##########################################################################
|
||||||
|
|
||||||
|
def getInt(self, key):
|
||||||
|
ret = self.s.scalar("select value from deckVars where key = :k",
|
||||||
|
k=key)
|
||||||
|
if ret is not None:
|
||||||
|
ret = int(ret)
|
||||||
|
return ret
|
||||||
|
|
||||||
|
def setVar(self, key, value):
|
||||||
|
self.s.statement("insert or replace into deckVars (key, value) "
|
||||||
|
"values (:key, :value)", key=key, value=value)
|
||||||
|
self.flushMod()
|
||||||
|
|
||||||
# Failed card handling
|
# Failed card handling
|
||||||
##########################################################################
|
##########################################################################
|
||||||
|
|
||||||
|
|
|
@ -561,9 +561,16 @@ values
|
||||||
# these may be deleted before bundling
|
# these may be deleted before bundling
|
||||||
if 'models' in d: del d['models']
|
if 'models' in d: del d['models']
|
||||||
if 'currentModel' in d: del d['currentModel']
|
if 'currentModel' in d: del d['currentModel']
|
||||||
|
d['meta'] = self.realTuples(self.deck.s.all("select * from deckVars"))
|
||||||
return d
|
return d
|
||||||
|
|
||||||
def updateDeck(self, deck):
|
def updateDeck(self, deck):
|
||||||
|
meta = deck['meta']
|
||||||
|
for (k,v) in meta:
|
||||||
|
self.deck.s.statement("""
|
||||||
|
insert or replace into deckVars
|
||||||
|
(key, value) values (:k, :v)""", k=k, v=v)
|
||||||
|
del deck['meta']
|
||||||
self.applyDict(self.deck, deck)
|
self.applyDict(self.deck, deck)
|
||||||
self.deck.lastSync = self.deck.modified
|
self.deck.lastSync = self.deck.modified
|
||||||
self.deck.updateTagPriorities()
|
self.deck.updateTagPriorities()
|
||||||
|
|
|
@ -104,6 +104,13 @@ def test_localsync_deck():
|
||||||
assert dailyStats(deck2).reps == 1
|
assert dailyStats(deck2).reps == 1
|
||||||
assert globalStats(deck2).reps == 1
|
assert globalStats(deck2).reps == 1
|
||||||
assert deck2.s.scalar("select count(*) from reviewHistory") == 1
|
assert deck2.s.scalar("select count(*) from reviewHistory") == 1
|
||||||
|
# make sure meta data is synced
|
||||||
|
deck1.setVar("foo", 1)
|
||||||
|
assert deck1.getInt("foo") == 1
|
||||||
|
assert deck2.getInt("foo") is None
|
||||||
|
client.sync()
|
||||||
|
assert deck1.getInt("foo") == 1
|
||||||
|
assert deck2.getInt("foo") == 1
|
||||||
|
|
||||||
@nose.with_setup(setup_local, teardown)
|
@nose.with_setup(setup_local, teardown)
|
||||||
def test_localsync_models():
|
def test_localsync_models():
|
||||||
|
@ -283,6 +290,9 @@ def test_remotesync_fromserver():
|
||||||
assert deck2.modified > deck1.modified
|
assert deck2.modified > deck1.modified
|
||||||
client.sync()
|
client.sync()
|
||||||
assert deck2.modified == deck1.modified
|
assert deck2.modified == deck1.modified
|
||||||
|
# test deck vars
|
||||||
|
deck1.setVar("foo", 1)
|
||||||
|
client.sync()
|
||||||
|
|
||||||
@nose.with_setup(setup_remote, teardown)
|
@nose.with_setup(setup_remote, teardown)
|
||||||
def test_remotesync_toserver():
|
def test_remotesync_toserver():
|
||||||
|
|
Loading…
Reference in a new issue