From 0012245c57e07010cc487b26061563ef8f897197 Mon Sep 17 00:00:00 2001
From: Antistic <3298461+antistic@users.noreply.github.com>
Date: Sun, 11 Jun 2023 22:57:08 +0100
Subject: [PATCH] add new action: answerCards
---
README.md | 30 ++++++++++++++++++++++++++++++
plugin/__init__.py | 16 ++++++++++++++++
tests/test_cards.py | 12 ++++++++++++
3 files changed, 58 insertions(+)
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]