~foosoft/anki-connect

c0fe21487741567d083385c43fb2d5789c402f3a — Charles Henry 7 years ago c317735
Add API for retrieving and answering cards
1 files changed, 73 insertions(+), 1 deletions(-)

M AnkiConnect.py
M AnkiConnect.py => AnkiConnect.py +73 -1
@@ 28,7 28,7 @@ import socket
# Constants
#

API_VERSION = 3
API_VERSION = 4
TICK_INTERVAL = 25
URL_TIMEOUT = 10
URL_UPGRADE = 'https://raw.githubusercontent.com/FooSoft/anki-connect/master/anki_connect.py'


@@ 434,6 434,59 @@ class AnkiBridge:
        addCards.activateWindow()


    def getNextCard(self):
        if (self.window().reviewer.card is None) or (self.window().state != "review"):
            self.window().moveToState('review')

        card = self.window().reviewer.card
        nextCard = {}
        nextCard['id'] = card.id
        nextCard['question'] = card._getQA()['q']
        nextCard['answer'] = card._getQA()['a']
        nextCard['answerButtons'] = self.window().reviewer._answerButtonList()
        nextCard['_model'] = json.dumps(card.note(reload)._model)
        nextCard['ord'] = card.ord
        nextCard['fields'] = json.dumps(card.note(reload).fields)
        nextCard['_fmap'] = card.note(reload)._fmap
        nextCard['success'] = 'true'
        return json.dumps(nextCard)


    def showQuestion(self):
        self.window().reviewer._showQuestion()
        return json.dumps({'success': 'true'})


    def showAnswer(self):
        if self.window().reviewer.mw.state != "review":
            return json.dumps({'success': 'false', 'message': 'Window state is not review.'})
        else:
            self.window().reviewer._showAnswer()
            return json.dumps({'success': 'true'})


    def answerCard(self, id, ease):
        if self.window().reviewer.mw.state != "review":
            return json.dumps({'success': 'false', 'message': 'Window state is not review.'})
        elif self.window().reviewer.state != "answer":
            return json.dumps({'success': 'false', 'message': 'Reviewer state is not answer.'})
        elif self.window().reviewer.card.id != id:
            return json.dumps({'success': 'false', 'message': 'Given card does not match.'})
        elif self.window().col.sched.answerButtons(self.window().reviewer.card) < ease:
            return json.dumps({'success': 'false', 'message': 'Invalid ease provided.'})
        else:
            self.window().reviewer._answerCard(ease)
            return json.dumps({'success': 'true'})


    def checkState(self):
        stateInfo = {}
        stateInfo['success'] = 'true'
        stateInfo['window_state'] = self.window().state
        stateInfo['reviewer_state'] = self.window().reviewer.state
        return json.dumps(stateInfo)


#
# AnkiConnect
#


@@ 540,6 593,25 @@ class AnkiConnect:
    def api_guiAddCards(self):
        return self.anki.guiAddCards()

    def api_getNextCard(self):
        return self.anki.getNextCard()


    def api_answerCard(self, id, ease):
        return self.anki.answerCard(id, ease)


    def api_checkState(self):
        return self.anki.checkState()


    def api_showQuestion(self):
        return self.anki.showQuestion()


    def api_showAnswer(self):
        return self.anki.showAnswer()

#
#   Entry
#

Do not follow this link