Monkey patch anki at runtime
The server should work fine with /usr/share/anki now, as long as external Anki version >= 2.1.
This commit is contained in:
parent
2a27d78591
commit
c0ea23c307
10
README.md
10
README.md
@ -21,17 +21,13 @@ Installing
|
|||||||
|
|
||||||
$ pip install webob
|
$ pip install webob
|
||||||
|
|
||||||
2. Patch the bundled libanki:
|
2. Modify ankisyncd.conf according to your needs
|
||||||
|
|
||||||
$ (cd anki-bundled && git apply ../libanki.patch)
|
3. Create user:
|
||||||
|
|
||||||
3. Modify ankisyncd.conf according to your needs
|
|
||||||
|
|
||||||
4. Create user:
|
|
||||||
|
|
||||||
$ ./ankisyncctl.py adduser <username>
|
$ ./ankisyncctl.py adduser <username>
|
||||||
|
|
||||||
5. Run ankisyncd:
|
4. Run ankisyncd:
|
||||||
|
|
||||||
$ python ./ankisyncd/sync_app.py ankisyncd.conf
|
$ python ./ankisyncd/sync_app.py ankisyncd.conf
|
||||||
|
|
||||||
|
|||||||
@ -1,2 +1,32 @@
|
|||||||
|
import functools
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
|
def __mediapatch():
|
||||||
|
"""
|
||||||
|
Monkey-patch Anki's MediaManager to ignore the "server" attribute.
|
||||||
|
|
||||||
|
It's needed because MediaManager's __init__(), connect() and close() are
|
||||||
|
close to no-ops when self.col.server is True. If self.col.server is False,
|
||||||
|
Syncer.usnLim() doesn't match entities that are supposed to be sent to the
|
||||||
|
client, thus breaking server→client deck sync.
|
||||||
|
"""
|
||||||
|
|
||||||
|
def noserver(f):
|
||||||
|
@functools.wraps(f)
|
||||||
|
def wrapped(self, *args, **kwargs):
|
||||||
|
orig = self.col.server
|
||||||
|
self.col.server = False
|
||||||
|
ret = f(self, *args, **kwargs)
|
||||||
|
self.col.server = orig
|
||||||
|
return ret
|
||||||
|
return wrapped
|
||||||
|
|
||||||
|
from anki.media import MediaManager
|
||||||
|
orig_init = MediaManager.__init__
|
||||||
|
|
||||||
|
MediaManager.__init__ = functools.wraps(MediaManager.__init__)(lambda self, col, _: orig_init(self, col, False))
|
||||||
|
MediaManager.connect = noserver(MediaManager.connect)
|
||||||
|
MediaManager.close = noserver(MediaManager.close)
|
||||||
|
|
||||||
sys.path.insert(0, "/usr/share/anki")
|
sys.path.insert(0, "/usr/share/anki")
|
||||||
|
__mediapatch()
|
||||||
|
|||||||
@ -1,48 +0,0 @@
|
|||||||
diff --git a/anki/collection.py b/anki/collection.py
|
|
||||||
index 6cec228..189c706 100644
|
|
||||||
--- a/anki/collection.py
|
|
||||||
+++ b/anki/collection.py
|
|
||||||
@@ -60,7 +60,7 @@ class _Collection:
|
|
||||||
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 --git a/anki/media.py b/anki/media.py
|
|
||||||
index 4e3ccf3..3bfdc81 100644
|
|
||||||
--- a/anki/media.py
|
|
||||||
+++ b/anki/media.py
|
|
||||||
@@ -26,11 +26,8 @@ class MediaManager:
|
|
||||||
]
|
|
||||||
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)
|
|
||||||
if not os.path.exists(self._dir):
|
|
||||||
@@ -48,8 +45,6 @@ class MediaManager:
|
|
||||||
self.connect()
|
|
||||||
|
|
||||||
def connect(self):
|
|
||||||
- if self.col.server:
|
|
||||||
- return
|
|
||||||
path = self.dir()+".db2"
|
|
||||||
create = not os.path.exists(path)
|
|
||||||
os.chdir(self._dir)
|
|
||||||
@@ -100,8 +95,6 @@ create table meta (dirMod int, lastUsn int); insert into meta values (0, 0);
|
|
||||||
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
|
|
||||||
Loading…
Reference in New Issue
Block a user