# Copyright: Ankitects Pty Ltd and contributors # License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html import time import requests import aqt from anki.lang import _ from anki.utils import platDesc, versionWithBuild from aqt.qt import * from aqt.utils import openLink, showText class LatestVersionFinder(QThread): newVerAvail = pyqtSignal(str) newMsg = pyqtSignal(dict) clockIsOff = pyqtSignal(float) def __init__(self, main): QThread.__init__(self) self.main = main self.config = main.pm.meta def _data(self): return { "ver": versionWithBuild(), "os": platDesc(), "id": self.config["id"], "lm": self.config["lastMsg"], "crt": self.config["created"], } def run(self): if not self.config["updates"]: return d = self._data() d["proto"] = 1 try: r = requests.post(aqt.appUpdate, data=d) r.raise_for_status() resp = r.json() except: # behind proxy, corrupt message, etc print("update check failed") return if resp["msg"]: self.newMsg.emit(resp) # type: ignore if resp["ver"]: self.newVerAvail.emit(resp["ver"]) # type: ignore diff = resp["time"] - time.time() if abs(diff) > 300: self.clockIsOff.emit(diff) # type: ignore def askAndUpdate(mw, ver): baseStr = _("""