From 748310def455509f9e1c14ee0d808a8959f668a0 Mon Sep 17 00:00:00 2001 From: oakkitten Date: Wed, 30 Mar 2022 19:43:31 +0100 Subject: [PATCH] Make `plugin` importable Don't start the web server if imported not from inside Anki Make sure Anki Connect instance is not garbage collected. This kills the timer that's responsible for the web server. --- plugin/__init__.py | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/plugin/__init__.py b/plugin/__init__.py index fe3a05e..a192839 100644 --- a/plugin/__init__.py +++ b/plugin/__init__.py @@ -58,14 +58,19 @@ class AnkiConnect: def __init__(self): self.log = None + self.timer = None + self.server = web.WebServer(self.handler) + + def initLogging(self): logPath = util.setting('apiLogPath') if logPath is not None: self.log = open(logPath, 'w') + def startWebServer(self): try: - self.server = web.WebServer(self.handler) self.server.listen() + # only keep reference to prevent garbage collection self.timer = QTimer() self.timer.timeout.connect(self.advance) self.timer.start(util.setting('apiPollInterval')) @@ -1698,4 +1703,9 @@ class AnkiConnect: # Entry # -ac = AnkiConnect() +# when run inside Anki, `__name__` would be either numeric, +# or, if installed via `link.sh`, `AnkiConnectDev` +if __name__ != "plugin": + ac = AnkiConnect() + ac.initLogging() + ac.startWebServer()