From c0fe21487741567d083385c43fb2d5789c402f3a Mon Sep 17 00:00:00 2001 From: Charles Henry Date: Fri, 2 Jun 2017 13:19:33 +0100 Subject: [PATCH] Add API for retrieving and answering cards --- AnkiConnect.py | 74 +++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 73 insertions(+), 1 deletion(-) diff --git a/AnkiConnect.py b/AnkiConnect.py index 25483da..28d400f 100644 --- a/AnkiConnect.py +++ b/AnkiConnect.py @@ -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 #