Esempio n. 1
0
class AnkiConnect:
    def __init__(self, anki, preferences, interval=25):
        self.anki = anki
        self.preferences = preferences
        self.server = None

        self.timer = QtCore.QTimer()
        self.timer.timeout.connect(self.advance)
        self.timer.start(interval)

    def advance(self):
        enabled = self.preferences["enableAnkiConnect"]

        if self.server is None and enabled:
            self.server = AjaxServer(self.handler)
            self.server.listen()
        elif self.server is not None and not enabled:
            self.server.close()
            self.server = None

        if self.server is not None:
            self.server.advance()

    def handler(self, request):
        action = "api_" + (request.get("action") or "")
        if hasattr(self, action):
            return getattr(self, action)(**(request.get("params") or {}))

    def api_deckNames(self):
        return self.anki.deckNames()

    def api_modelNames(self):
        return self.anki.modelNames()

    def api_modelFieldNames(self, modelName):
        return self.anki.modelFieldNames(modelName)

    def api_addNote(self, note):
        return self.anki.addNote(note["deckName"], note["modelName"], note["fields"], note["tags"], note.get("audio"))

    def api_canAddNotes(self, notes):
        results = []
        for note in notes:
            results.append(self.anki.canAddNote(note["deckName"], note["modelName"], note["fields"]))

        return results

    def api_features(self):
        features = {}
        for name in dir(self):
            method = getattr(self, name)
            if name.startswith("api_") and callable(method):
                features[name[4:]] = list(method.func_code.co_varnames[1:])

        return features

    def api_version(self):
        return c["apiVersion"]
Esempio n. 2
0
class AnkiConnect:
    def __init__(self, yomisama, preferences, interval=25):
        self.yomisama        = yomisama
        self.preferences = preferences
        self.server      = None

        self.timer = QtCore.QTimer()
        self.timer.timeout.connect(self.advance)
        self.timer.start(interval)


    def advance(self):
        enabled = True #self.preferences['enableAnkiConnect']

        if self.server is None and enabled:
            self.server = AjaxServer(self.handler)
            self.server.listen()
        elif self.server is not None and not enabled:
            self.server.close()
            self.server = None

        if self.server is not None:
            self.server.advance()


    def handler(self, request):
        if self.yomisama.window is None:
            return {"vocabulary":{"body":"Please open Yomisama in Anki","name":"Vocabulary"}}
        else:
            action = 'api_' + (request.get('action') or '')
            if hasattr(self, action):
                return getattr(self, action)(request.get('params') or {})


    def api_lookup(self,params):
        htmls = dict()
        for profile in self.yomisama.window.getSortedProfiles():
            profile.onLookup(params,0)
            htmls[profile.name] = {'body':profile.defBody,'name':profile.displayedName};
        return htmls

    def api_link(self,params):
        self.yomisama.window.profiles[params["profile"]].onAnchorClicked(params["href"])
        htmls = dict()
        for profile in self.yomisama.window.getSortedProfiles():
            htmls[profile.name] = {'body':profile.defBody,'name':profile.displayedName};
        return htmls

    def api_set(self,params):
        self.params = params
        profile = self.yomisama.window.profiles[params["profile"]]
        profile.definitions = params["definitions"]
        profile.definitionType = 'list'
        profile.updateDefinitions()
        return profile.existsAlready
Esempio n. 3
0
class AnkiConnect:
    def __init__(self, anki, preferences, interval=25):
        self.anki = anki
        self.preferences = preferences
        self.server = None

        self.timer = QtCore.QTimer()
        self.timer.timeout.connect(self.advance)
        self.timer.start(interval)

    def advance(self):
        enabled = self.preferences['enableAnkiConnect']

        if self.server is None and enabled:
            self.server = AjaxServer(self.handler)
            self.server.listen()
        elif self.server is not None and not enabled:
            self.server.close()
            self.server = None

        if self.server is not None:
            self.server.advance()

    def handler(self, request):
        action = 'api_' + (request.get('action') or '')
        if hasattr(self, action):
            return getattr(self, action)(**(request.get('params') or {}))

    def api_deckNames(self):
        return self.anki.deckNames()

    def api_modelNames(self):
        return self.anki.modelNames()

    def api_modelFieldNames(self, modelName):
        return self.anki.modelFieldNames(modelName)

    def api_addNote(self, note):
        return self.anki.addNote(note['deckName'], note['modelName'],
                                 note['fields'], note['tags'],
                                 note.get('audio'))

    def api_canAddNotes(self, notes):
        results = []
        for note in notes:
            results.append(
                self.anki.canAddNote(note['deckName'], note['modelName'],
                                     note['fields']))

        return results

    def api_features(self):
        features = {}
        for name in dir(self):
            method = getattr(self, name)
            if name.startswith('api_') and callable(method):
                features[name[4:]] = list(method.func_code.co_varnames[1:])

        return features

    def api_version(self):
        return c['apiVersion']