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), Column('lastSync', Float, nullable=False, default=0),
# -1 = never check, 0 = always check, 1+ = number of seconds passed. # -1 = never check, 0 = always check, 1+ = number of seconds passed.
# not currently exposed in the GUI # not currently exposed in the GUI
Column('syncPeriod', Float, nullable=False, default=0)) Column('syncPeriod', Integer, nullable=False, default=0))
# Maps # Maps
########################################################################## ##########################################################################

View file

@ -12,7 +12,7 @@ import itertools, time
from operator import itemgetter from operator import itemgetter
from anki import DeckStorage from anki import DeckStorage
from anki.cards import Card from anki.cards import Card
from anki.sync import SyncClient, SyncServer from anki.sync import SyncClient, SyncServer, BulkMediaSyncer
from anki.lang import _ from anki.lang import _
from anki.utils import findTag, parseTags, stripHTML, ids2str from anki.utils import findTag, parseTags, stripHTML, ids2str
from anki.db import * from anki.db import *
@ -104,6 +104,12 @@ type = 2,
combinedDue = created, combinedDue = created,
modified = :now modified = :now
""", now=time.time()) """, now=time.time())
# media
if client.mediaSyncPending:
bulkClient = BulkMediaSyncer(client.deck)
bulkServer = BulkMediaSyncer(server.deck)
bulkClient.server = bulkServer
bulkClient.sync()
# need to save manually # need to save manually
self.newDeck.s.commit() self.newDeck.s.commit()
self.newDeck.close() self.newDeck.close()

View file

@ -10,7 +10,7 @@ __docformat__ = 'restructuredtext'
from anki import DeckStorage from anki import DeckStorage
from anki.importing import Importer from anki.importing import Importer
from anki.sync import SyncClient, SyncServer from anki.sync import SyncClient, SyncServer, BulkMediaSyncer
class Anki10Importer(Importer): class Anki10Importer(Importer):
@ -45,6 +45,11 @@ class Anki10Importer(Importer):
assert payload['deleted-models'] == [] assert payload['deleted-models'] == []
res = server.applyPayload(payload) res = server.applyPayload(payload)
client.applyPayloadReply(res) client.applyPayloadReply(res)
if client.mediaSyncPending:
bulkClient = BulkMediaSyncer(client.deck)
bulkServer = BulkMediaSyncer(server.deck)
bulkClient.server = bulkServer
bulkClient.sync()
# add tags # add tags
fids = [f[0] for f in res['added-facts']['facts']] fids = [f[0] for f in res['added-facts']['facts']]
self.deck.addFactTags(fids, self.tagsToAdd) self.deck.addFactTags(fids, self.tagsToAdd)

View file

@ -63,6 +63,11 @@ class SyncTools(object):
payload = self.genPayload(sums) payload = self.genPayload(sums)
res = self.server.applyPayload(payload) res = self.server.applyPayload(payload)
self.applyPayloadReply(res) self.applyPayloadReply(res)
if self.mediaSyncPending:
bulkClient = BulkMediaSyncer(self.deck)
bulkServer = BulkMediaSyncer(self.server.deck)
bulkClient.server = bulkServer
bulkClient.sync()
def prepareSync(self): def prepareSync(self):
"Sync setup. True if sync needed." "Sync setup. True if sync needed."
@ -97,6 +102,7 @@ class SyncTools(object):
payload['deck'] = self.bundleDeck() payload['deck'] = self.bundleDeck()
payload['stats'] = self.bundleStats() payload['stats'] = self.bundleStats()
payload['history'] = self.bundleHistory() payload['history'] = self.bundleHistory()
payload['sources'] = self.bundleSources()
self.deck.lastSync = self.deck.modified self.deck.lastSync = self.deck.modified
return payload return payload
@ -115,11 +121,14 @@ class SyncTools(object):
reply['deck'] = self.bundleDeck() reply['deck'] = self.bundleDeck()
reply['stats'] = self.bundleStats() reply['stats'] = self.bundleStats()
reply['history'] = self.bundleHistory() reply['history'] = self.bundleHistory()
reply['sources'] = self.bundleSources()
self.deck.lastSync = self.deck.modified self.deck.lastSync = self.deck.modified
else: else:
self.updateDeck(payload['deck']) self.updateDeck(payload['deck'])
self.updateStats(payload['stats']) self.updateStats(payload['stats'])
self.updateHistory(payload['history']) self.updateHistory(payload['history'])
if 'sources' in payload:
self.updateSources(payload['sources'])
self.postSyncRefresh() self.postSyncRefresh()
# rebuild priorities on server # rebuild priorities on server
cardIds = [x[0] for x in payload['added-cards']] cardIds = [x[0] for x in payload['added-cards']]
@ -135,6 +144,8 @@ class SyncTools(object):
self.updateDeck(reply['deck']) self.updateDeck(reply['deck'])
self.updateStats(reply['stats']) self.updateStats(reply['stats'])
self.updateHistory(reply['history']) self.updateHistory(reply['history'])
if 'sources' in reply:
self.updateSources(reply['sources'])
self.postSyncRefresh() self.postSyncRefresh()
# rebuild priorities on client # rebuild priorities on client
cardIds = [x[0] for x in reply['added-cards']] cardIds = [x[0] for x in reply['added-cards']]
@ -594,6 +605,20 @@ values
self.applyDict(ent, h) self.applyDict(ent, h)
self.deck.s.save(ent) 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 # Media
########################################################################## ##########################################################################