diff --git a/anki/storage.py b/anki/storage.py index e96a0936f..f09cf9c2a 100644 --- a/anki/storage.py +++ b/anki/storage.py @@ -135,11 +135,13 @@ values(1,0,0,0,%(v)s,0,0,'','{}','','','{}'); g['name'] = _("Default") g['conf'] = 1 g['mod'] = intTime() + gc = anki.groups.defaultConf.copy() + gc['id'] = 1 db.execute(""" update deck set conf = ?, groups = ?, gconf = ?""", simplejson.dumps(anki.deck.defaultConf), simplejson.dumps({'1': g}), - simplejson.dumps({'1': anki.groups.defaultConf})) + simplejson.dumps({'1': gc})) def _updateIndices(db): "Add indices to the DB." diff --git a/anki/sync.py b/anki/sync.py index 06270c5af..7c158f619 100644 --- a/anki/sync.py +++ b/anki/sync.py @@ -126,6 +126,8 @@ class Syncer(object): self.mergeFacts(lchg['facts'], rchg['facts']) self.mergeCards(lchg['cards'], rchg['cards']) self.mergeTags(rchg['tags']) + if 'conf' in rchg: + self.mergeConf(rchg['conf']) def finish(self, mod=None): # fixme: dynamic index? @@ -258,7 +260,8 @@ class Syncer(object): def getConf(self): return self.deck.conf - # fixme: merging conf + def mergeConf(self, conf): + self.deck.conf = conf # Merging ########################################################################## diff --git a/tests/test_sync.py b/tests/test_sync.py index 753bf1550..7e0c31203 100644 --- a/tests/test_sync.py +++ b/tests/test_sync.py @@ -151,6 +151,48 @@ def test_cards(): assert client.sync() == "success" assert not deck2.db.scalar("select 1 from cards where id = ?", card.id) +@nose.with_setup(setup_modified) +def test_tags(): + test_sync() + assert deck1.tags.all() == deck2.tags.all() + deck1.tags.register(["abc"]) + deck2.tags.register(["xyz"]) + assert deck1.tags.all() != deck2.tags.all() + deck1.save(mod=intTime()+1) + deck2.save(mod=intTime()+2) + assert client.sync() == "success" + assert deck1.tags.all() == deck2.tags.all() + +@nose.with_setup(setup_modified) +def test_groups(): + test_sync() + assert len(deck1.groups.all()) == 1 + assert len(deck1.groups.all()) == len(deck2.groups.all()) + deck1.groups.id("new") + assert len(deck1.groups.all()) != len(deck2.groups.all()) + time.sleep(0.1) + deck2.groups.id("new2") + deck1.save(mod=intTime()+1) + deck2.save(mod=intTime()+2) + assert client.sync() == "success" + assert deck1.tags.all() == deck2.tags.all() + assert len(deck1.groups.all()) == len(deck2.groups.all()) + assert len(deck1.groups.all()) == 3 + assert deck1.groups.conf(1)['maxTaken'] == 60 + deck2.groups.conf(1)['maxTaken'] = 30 + deck2.groups.save(deck2.groups.conf(1)) + deck2.save(mod=intTime()+2) + assert client.sync() == "success" + assert deck1.groups.conf(1)['maxTaken'] == 30 + +@nose.with_setup(setup_modified) +def test_conf(): + test_sync() + assert deck2.conf['topGroup'] == 1 + deck1.conf['topGroup'] = 2 + deck1.save(mod=intTime()+2) + assert client.sync() == "success" + assert deck2.conf['topGroup'] == 2 def _test_speed(): t = time.time()