Apply @ndl's patches

The patches fix the issue where syncing across different profiles will
always trigger a full sync if there's any change in either of the
profiles.
This commit is contained in:
jdoe0 2016-11-03 21:44:40 +07:00
parent 1678890d3d
commit c398ccdb89
7 changed files with 59 additions and 15 deletions

3
.gitmodules vendored Normal file
View File

@ -0,0 +1,3 @@
[submodule "anki-bundled"]
path = anki-bundled
url = https://github.com/dae/anki.git

View File

@ -23,20 +23,9 @@ install some of the dependencies we need there:
$ virtualenv ankisyncd.env
$ ankisyncd.env/bin/easy_install webob simplejson eventlet
3. Download and install libanki. You can find the latest release of Anki here:
3. Patch the bundled libanki:
http://code.google.com/p/anki/downloads/list
Look for a *.tgz file with a Summary of "Anki Source". At the time of this
writing that is anki-2.0.11.tgz.
Download this file and extract.
Then either:
a. Run ```make install```, or
b. Copy the entire directory to /usr/share/anki
$ ./patch_libanki.sh
4. Copy the example.ini to production.ini and edit for your needs. Warning: If
you disable SSL, login credentials will be transported in plain text!

1
anki-bundled Submodule

@ -0,0 +1 @@
Subproject commit 499b02281b4ab2bea3c4167128f02cc3d9cf973b

View File

@ -59,7 +59,7 @@ class CollectionWrapper(object):
else:
raise
col = anki.storage.Collection(self.path)
col = anki.storage.Collection(self.path, server=True)
# Do any special setup
if self.setup_new_collection is not None:
@ -71,7 +71,7 @@ class CollectionWrapper(object):
"""Open the collection, or create it if it doesn't exist."""
if self.__col is None:
if os.path.exists(self.path):
self.__col = anki.storage.Collection(self.path)
self.__col = anki.storage.Collection(self.path, server=True)
else:
self.__col = self.__create_collection()

View File

@ -425,6 +425,7 @@ class SyncApp(object):
fd.write(data)
finally:
col.reopen()
col.load()
# run hook_upload if one is defined
if self.hook_upload is not None:
@ -442,6 +443,7 @@ class SyncApp(object):
data = open(session.get_collection_path(), 'rb').read()
finally:
col.reopen()
col.load()
return data
@wsgify

46
libanki.patch Normal file
View File

@ -0,0 +1,46 @@
diff -urN anki/collection.py anki/collection.py
--- anki/collection.py 2016-10-22 00:04:43.365953912 +0200
+++ anki/collection.py 2016-10-23 10:46:26.171300370 +0200
@@ -60,7 +60,7 @@
self.server = server
self._lastSave = time.time()
self.clearUndo()
- self.media = MediaManager(self, server)
+ self.media = MediaManager(self)
self.models = ModelManager(self)
self.decks = DeckManager(self)
self.tags = TagManager(self)
diff -urN anki/media.py anki/media.py
--- anki/media.py 2016-10-22 00:04:43.367953863 +0200
+++ anki/media.py 2016-10-23 10:46:16.947524341 +0200
@@ -26,11 +26,8 @@
]
regexps = soundRegexps + imgRegexps
- def __init__(self, col, server):
+ def __init__(self, col):
self.col = col
- if server:
- self._dir = None
- return
# media directory
self._dir = re.sub("(?i)\.(anki2)$", ".media", self.col.path)
# convert dir to unicode if it's not already
@@ -51,8 +48,6 @@
self.connect()
def connect(self):
- if self.col.server:
- return
path = self.dir()+".db2"
create = not os.path.exists(path)
os.chdir(self._dir)
@@ -103,8 +98,6 @@
os.rename("../collection.media.db", npath)
def close(self):
- if self.col.server:
- return
self.db.close()
self.db = None
# change cwd back to old location

3
patch_libanki.sh Executable file
View File

@ -0,0 +1,3 @@
#!/usr/bin/env bash
cd "$(dirname ${BASH_SOURCE[0]})/anki-bundled"
patch -p0 < ../libanki.patch