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
|
||||
|
||||
2. Patch the bundled libanki:
|
||||
2. Modify ankisyncd.conf according to your needs
|
||||
|
||||
$ (cd anki-bundled && git apply ../libanki.patch)
|
||||
|
||||
3. Modify ankisyncd.conf according to your needs
|
||||
|
||||
4. Create user:
|
||||
3. Create user:
|
||||
|
||||
$ ./ankisyncctl.py adduser <username>
|
||||
|
||||
5. Run ankisyncd:
|
||||
4. Run ankisyncd:
|
||||
|
||||
$ python ./ankisyncd/sync_app.py ankisyncd.conf
|
||||
|
||||
|
||||
@ -1,2 +1,32 @@
|
||||
import functools
|
||||
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")
|
||||
__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