mirror of
https://github.com/ankitects/anki.git
synced 2025-09-20 06:52:21 -04:00
sync sources, support media syncing in import/export again
This commit is contained in:
parent
2afa59b24a
commit
c0e5bed6a6
4 changed files with 39 additions and 3 deletions
|
@ -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
|
||||||
##########################################################################
|
##########################################################################
|
||||||
|
|
|
@ -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()
|
||||||
|
|
|
@ -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)
|
||||||
|
|
25
anki/sync.py
25
anki/sync.py
|
@ -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
|
||||||
##########################################################################
|
##########################################################################
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue