diff --git a/README.md b/README.md index 19a008b..f36e317 100644 --- a/README.md +++ b/README.md @@ -724,6 +724,36 @@ corresponding to when the API was available for use. ``` +#### `answerCards` + +* Answer cards. Answers are between 1 (Again) and 4 (Easy). Will start the timer immediately before answering. Returns `true` if card exists, `false` otherwise. + +
+ Sample request: + + ```json + { + "action": "answerCards", + "version": 6, + "params": { + "cards": [1498938915662, 1502098034048], + "answers": [2, 4], + } + } + ``` +
+ +
+ Sample result: + + ```json + { + "result": [true, true], + "error": null + } + ``` +
+ --- ### Deck Actions diff --git a/plugin/__init__.py b/plugin/__init__.py index 73f4d81..c09cd11 100644 --- a/plugin/__init__.py +++ b/plugin/__init__.py @@ -1530,6 +1530,22 @@ class AnkiConnect: self.stopEditing() + @util.api() + def answerCards(self, cards, answers): + scheduler = self.scheduler() + success = [] + for i, cid in enumerate(cards): + try: + card = self.getCard(cid) + card.start_timer() + scheduler.answerCard(card, answers[i]) + success.append(True) + except NotFoundError: + success.append(False) + + return success + + @util.api() def cardReviews(self, deck, startID): return self.database().all( diff --git a/tests/test_cards.py b/tests/test_cards.py index 57705d4..dd69b44 100755 --- a/tests/test_cards.py +++ b/tests/test_cards.py @@ -76,3 +76,15 @@ def test_forgetCards(setup): def test_relearnCards(setup): ac.relearnCards(cards=setup.card_ids) + + +class TestAnswerCards: + def test_answerCards(self, setup): + ac.scheduler().reset() + result = ac.answerCards(cards=setup.card_ids, answers=[2, 1, 4, 3]) + assert result == [True] * 4 + + def test_answerCards_with_invalid_card_id(self, setup): + ac.scheduler().reset() + result = ac.answerCards(cards=[123], answers=[2]) + assert result == [False]