sync sources, support media syncing in import/export again

This commit is contained in:
Damien Elmes 2008-10-18 20:20:43 +09:00
parent 2afa59b24a
commit c0e5bed6a6
4 changed files with 39 additions and 3 deletions

View file

@ -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
##########################################################################

View file

@ -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()

View file

@ -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)

View file

@ -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
##########################################################################