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:
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user