Extend guiAddCards to enable presetting cards
- Made changes to `guiAddCards` to enable presetting the model, deck, etc., very much in the same way that `addNote` does - Changed the README to represent the new changes
This commit is contained in:
parent
1448c8d43f
commit
4987ea34d5
@ -1025,10 +1025,78 @@ class AnkiConnect:
|
|||||||
|
|
||||||
|
|
||||||
@api()
|
@api()
|
||||||
def guiAddCards(self):
|
def guiAddCards(self, note=None):
|
||||||
addCards = aqt.dialogs.open('AddCards', self.window())
|
|
||||||
addCards.activateWindow()
|
|
||||||
|
|
||||||
|
if note is not None:
|
||||||
|
collection = self.collection()
|
||||||
|
|
||||||
|
model = collection.models.byName(note['modelName'])
|
||||||
|
if model is None:
|
||||||
|
raise Exception('model was not found: {}'.format(note['modelName']))
|
||||||
|
|
||||||
|
self.collection().models.setCurrent(model)
|
||||||
|
self.collection().models.update(model)
|
||||||
|
|
||||||
|
deck = collection.decks.byName(note['deckName'])
|
||||||
|
if deck is None:
|
||||||
|
raise Exception('deck was not found: {}'.format(note['deckName']))
|
||||||
|
|
||||||
|
self.collection().decks.select(deck['id'])
|
||||||
|
|
||||||
|
addAndClose = False
|
||||||
|
if note is not None and 'options' in note:
|
||||||
|
if 'addAndClose' in note['options']:
|
||||||
|
addAndClose = note['options']['addAndClose']
|
||||||
|
if type(addAndClose) is not bool:
|
||||||
|
raise Exception('option parameter \'addAndClose\' must be boolean')
|
||||||
|
|
||||||
|
if addAndClose:
|
||||||
|
# an "AddCards" dialogue, that closes when you add a note
|
||||||
|
class AddCardsAndClose(aqt.addcards.AddCards):
|
||||||
|
|
||||||
|
def __init__(self, mw):
|
||||||
|
super().__init__(mw)
|
||||||
|
self.addButton.setText("Add and Close")
|
||||||
|
self.addButton.setShortcut(aqt.qt.QKeySequence("Ctrl+Return"))
|
||||||
|
# kind of a hack:
|
||||||
|
# if Anki closes while thise window is open, close it silently
|
||||||
|
self.silentlyClose = True
|
||||||
|
|
||||||
|
def _addCards(self):
|
||||||
|
self.editor.saveAddModeVars()
|
||||||
|
note = self.editor.note
|
||||||
|
note = self.addNote(note)
|
||||||
|
if not note:
|
||||||
|
return
|
||||||
|
aqt.utils.tooltip(_("Added"), period=500)
|
||||||
|
# stop anything playing
|
||||||
|
anki.sound.clearAudioQueue()
|
||||||
|
self.onReset(keep=True)
|
||||||
|
self.mw.col.autosave()
|
||||||
|
self.reject()
|
||||||
|
|
||||||
|
addCards = AddCardsAndClose(self.window())
|
||||||
|
|
||||||
|
else:
|
||||||
|
addCards = aqt.dialogs.open('AddCards', self.window())
|
||||||
|
|
||||||
|
addCards.activateWindow()
|
||||||
|
editor = addCards.editor
|
||||||
|
ankiNote = editor.note
|
||||||
|
|
||||||
|
if note is not None and 'fields' in note:
|
||||||
|
for name, value in note['fields'].items():
|
||||||
|
if name in ankiNote:
|
||||||
|
ankiNote[name] = value
|
||||||
|
editor.loadNote()
|
||||||
|
|
||||||
|
if note is not None and 'tags' in note:
|
||||||
|
ankiNote.tags = note['tags']
|
||||||
|
editor.updateTags()
|
||||||
|
|
||||||
|
# if Anki does not Focus, the window will not notice that the
|
||||||
|
# fields are actually filled
|
||||||
|
addCards.setAndFocusNote(editor.note)
|
||||||
|
|
||||||
@api()
|
@api()
|
||||||
def guiReviewActive(self):
|
def guiReviewActive(self):
|
||||||
|
23
README.md
23
README.md
@ -1342,13 +1342,32 @@ guarantee that your application continues to function properly in the future.
|
|||||||
|
|
||||||
* **guiAddCards**
|
* **guiAddCards**
|
||||||
|
|
||||||
Invokes the *Add Cards* dialog.
|
Invokes the *Add Cards* dialog and presets the note using the given deck and model, with the provided field values
|
||||||
|
and tags. Invoking it multiple times will open multiple windows.
|
||||||
|
|
||||||
|
The `addAndClose` member inside `options` group can be set to true to create a dialog that closes upon adding the first note.
|
||||||
|
|
||||||
*Sample request*:
|
*Sample request*:
|
||||||
```json
|
```json
|
||||||
{
|
{
|
||||||
"action": "guiAddCards",
|
"action": "guiAddCards",
|
||||||
"version": 6
|
"version": 6,
|
||||||
|
"params": {
|
||||||
|
"note": {
|
||||||
|
"deckName": "Default",
|
||||||
|
"modelName": "Cloze",
|
||||||
|
"fields": {
|
||||||
|
"Text": "The capital of Romania is {{c1::Bucharest}}",
|
||||||
|
"Extra": "Romania is a country in Europe"
|
||||||
|
},
|
||||||
|
"options": {
|
||||||
|
"addAndClose": true
|
||||||
|
},
|
||||||
|
"tags": [
|
||||||
|
"yomichan"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user