From c0e5bed6a6989d9f2079be247a7e68692243e990 Mon Sep 17 00:00:00 2001 From: Damien Elmes Date: Sat, 18 Oct 2008 20:20:43 +0900 Subject: [PATCH] sync sources, support media syncing in import/export again --- anki/deck.py | 2 +- anki/exporting.py | 8 +++++++- anki/importing/anki10.py | 7 ++++++- anki/sync.py | 25 +++++++++++++++++++++++++ 4 files changed, 39 insertions(+), 3 deletions(-) diff --git a/anki/deck.py b/anki/deck.py index d4b952897..93ec0c4dc 100644 --- a/anki/deck.py +++ b/anki/deck.py @@ -1462,7 +1462,7 @@ sourcesTable = Table( Column('lastSync', Float, nullable=False, default=0), # -1 = never check, 0 = always check, 1+ = number of seconds passed. # not currently exposed in the GUI - Column('syncPeriod', Float, nullable=False, default=0)) + Column('syncPeriod', Integer, nullable=False, default=0)) # Maps ########################################################################## diff --git a/anki/exporting.py b/anki/exporting.py index 38759293f..6581ecb28 100644 --- a/anki/exporting.py +++ b/anki/exporting.py @@ -12,7 +12,7 @@ import itertools, time from operator import itemgetter from anki import DeckStorage from anki.cards import Card -from anki.sync import SyncClient, SyncServer +from anki.sync import SyncClient, SyncServer, BulkMediaSyncer from anki.lang import _ from anki.utils import findTag, parseTags, stripHTML, ids2str from anki.db import * @@ -104,6 +104,12 @@ type = 2, combinedDue = created, modified = :now """, now=time.time()) + # media + if client.mediaSyncPending: + bulkClient = BulkMediaSyncer(client.deck) + bulkServer = BulkMediaSyncer(server.deck) + bulkClient.server = bulkServer + bulkClient.sync() # need to save manually self.newDeck.s.commit() self.newDeck.close() diff --git a/anki/importing/anki10.py b/anki/importing/anki10.py index 76949561a..600abc7fc 100644 --- a/anki/importing/anki10.py +++ b/anki/importing/anki10.py @@ -10,7 +10,7 @@ __docformat__ = 'restructuredtext' from anki import DeckStorage from anki.importing import Importer -from anki.sync import SyncClient, SyncServer +from anki.sync import SyncClient, SyncServer, BulkMediaSyncer class Anki10Importer(Importer): @@ -45,6 +45,11 @@ class Anki10Importer(Importer): assert payload['deleted-models'] == [] res = server.applyPayload(payload) client.applyPayloadReply(res) + if client.mediaSyncPending: + bulkClient = BulkMediaSyncer(client.deck) + bulkServer = BulkMediaSyncer(server.deck) + bulkClient.server = bulkServer + bulkClient.sync() # add tags fids = [f[0] for f in res['added-facts']['facts']] self.deck.addFactTags(fids, self.tagsToAdd) diff --git a/anki/sync.py b/anki/sync.py index bf6fc5138..3e27b2f6b 100644 --- a/anki/sync.py +++ b/anki/sync.py @@ -63,6 +63,11 @@ class SyncTools(object): payload = self.genPayload(sums) res = self.server.applyPayload(payload) self.applyPayloadReply(res) + if self.mediaSyncPending: + bulkClient = BulkMediaSyncer(self.deck) + bulkServer = BulkMediaSyncer(self.server.deck) + bulkClient.server = bulkServer + bulkClient.sync() def prepareSync(self): "Sync setup. True if sync needed." @@ -97,6 +102,7 @@ class SyncTools(object): payload['deck'] = self.bundleDeck() payload['stats'] = self.bundleStats() payload['history'] = self.bundleHistory() + payload['sources'] = self.bundleSources() self.deck.lastSync = self.deck.modified return payload @@ -115,11 +121,14 @@ class SyncTools(object): reply['deck'] = self.bundleDeck() reply['stats'] = self.bundleStats() reply['history'] = self.bundleHistory() + reply['sources'] = self.bundleSources() self.deck.lastSync = self.deck.modified else: self.updateDeck(payload['deck']) self.updateStats(payload['stats']) self.updateHistory(payload['history']) + if 'sources' in payload: + self.updateSources(payload['sources']) self.postSyncRefresh() # rebuild priorities on server cardIds = [x[0] for x in payload['added-cards']] @@ -135,6 +144,8 @@ class SyncTools(object): self.updateDeck(reply['deck']) self.updateStats(reply['stats']) self.updateHistory(reply['history']) + if 'sources' in reply: + self.updateSources(reply['sources']) self.postSyncRefresh() # rebuild priorities on client cardIds = [x[0] for x in reply['added-cards']] @@ -594,6 +605,20 @@ values self.applyDict(ent, h) self.deck.s.save(ent) + def bundleSources(self): + return self.realTuples(self.deck.s.all("select * from sources")) + + def updateSources(self, sources): + for s in sources: + self.deck.s.statement(""" +insert or replace into sources values +(:id, :name, :created, :lastSync, :syncPeriod)""", + id=s[0], + name=s[1], + created=s[2], + lastSync=s[3], + syncPeriod=s[4]) + # Media ##########################################################################