Add duplicate check option (#1012)
* Add anki.checkForDuplicates option * Use checkForDuplicates for button display * Add property to card creation
This commit is contained in:
parent
4e30409410
commit
16321a1f8c
@ -671,6 +671,7 @@
|
||||
"terms",
|
||||
"kanji",
|
||||
"duplicateScope",
|
||||
"checkForDuplicates",
|
||||
"fieldTemplates"
|
||||
],
|
||||
"properties": {
|
||||
@ -771,6 +772,10 @@
|
||||
"default": "collection",
|
||||
"enum": ["collection", "deck", "deck-root"]
|
||||
},
|
||||
"checkForDuplicates": {
|
||||
"type": "boolean",
|
||||
"default": true
|
||||
},
|
||||
"fieldTemplates": {
|
||||
"type": ["string", "null"],
|
||||
"default": null
|
||||
|
@ -31,6 +31,7 @@ class AnkiNoteBuilder {
|
||||
context,
|
||||
templates,
|
||||
tags=[],
|
||||
checkForDuplicates=true,
|
||||
duplicateScope='collection',
|
||||
resultOutputMode='split',
|
||||
compactGlossaries=false,
|
||||
@ -60,6 +61,7 @@ class AnkiNoteBuilder {
|
||||
deckName: deck,
|
||||
modelName: model,
|
||||
options: {
|
||||
allowDuplicate: !checkForDuplicates,
|
||||
duplicateScope,
|
||||
duplicateScopeOptions: {
|
||||
deckName: duplicateScopeDeckName,
|
||||
|
@ -613,8 +613,12 @@ class OptionsUtil {
|
||||
// Version 6 changes:
|
||||
// Updated handlebars templates to include "conjugation" definition.
|
||||
// Added global option showPopupPreview.
|
||||
// Added anki.checkForDuplicates.
|
||||
await this._addFieldTemplatesToOptions(options, '/bg/data/anki-field-templates-upgrade-v6.handlebars');
|
||||
options.global.showPopupPreview = false;
|
||||
for (const profile of options.profiles) {
|
||||
profile.options.anki.checkForDuplicates = true;
|
||||
}
|
||||
return options;
|
||||
}
|
||||
}
|
||||
|
@ -921,6 +921,11 @@
|
||||
<input type="text" id="interface-server" class="form-control" data-setting="anki.server">
|
||||
</div>
|
||||
|
||||
<div class="form-group options-advanced">
|
||||
<label>Duplicates</label><br>
|
||||
<label style="font-weight: normal;"><input type="checkbox" data-setting="anki.checkForDuplicates"> Check for duplicate cards</label><br>
|
||||
</div>
|
||||
|
||||
<div class="form-group options-advanced">
|
||||
<label for="duplicate-scope">Duplicate scope</label>
|
||||
<select class="form-control" id="duplicate-scope" data-setting="anki.duplicateScope">
|
||||
|
@ -901,8 +901,15 @@ class Display extends EventDispatcher {
|
||||
const modes = isTerms ? ['term-kanji', 'term-kana'] : ['kanji'];
|
||||
let states;
|
||||
try {
|
||||
if (this._options.anki.checkForDuplicates) {
|
||||
const noteContext = await this._getNoteContext();
|
||||
states = await this._areDefinitionsAddable(definitions, modes, noteContext);
|
||||
} else {
|
||||
if (!await api.isAnkiConnected()) {
|
||||
throw new Error('Anki not connected');
|
||||
}
|
||||
states = this._areDefinitionsAddableForcedValue(definitions, modes, true);
|
||||
}
|
||||
} catch (e) {
|
||||
return;
|
||||
}
|
||||
@ -1377,10 +1384,24 @@ class Display extends EventDispatcher {
|
||||
return results;
|
||||
}
|
||||
|
||||
_areDefinitionsAddableForcedValue(definitions, modes, canAdd) {
|
||||
const results = [];
|
||||
const definitionCount = definitions.length;
|
||||
const modeCount = modes.length;
|
||||
for (let i = 0; i < definitionCount; ++i) {
|
||||
const modeArray = [];
|
||||
for (let j = 0; j < modeCount; ++j) {
|
||||
modeArray.push({canAdd, noteIds: null});
|
||||
}
|
||||
results.push(modeArray);
|
||||
}
|
||||
return results;
|
||||
}
|
||||
|
||||
async _createNote(definition, mode, context, options, templates, injectMedia) {
|
||||
const {
|
||||
general: {resultOutputMode, compactGlossaries},
|
||||
anki: {tags, duplicateScope, kanji, terms, screenshot: {format, quality}},
|
||||
anki: {tags, checkForDuplicates, duplicateScope, kanji, terms, screenshot: {format, quality}},
|
||||
audio: {sources, customSourceUrl}
|
||||
} = options;
|
||||
const modeOptions = (mode === 'kanji') ? kanji : terms;
|
||||
@ -1416,6 +1437,7 @@ class Display extends EventDispatcher {
|
||||
context,
|
||||
templates,
|
||||
tags,
|
||||
checkForDuplicates,
|
||||
duplicateScope,
|
||||
resultOutputMode,
|
||||
compactGlossaries,
|
||||
|
@ -409,6 +409,7 @@ function createProfileOptionsUpdatedTestData1() {
|
||||
terms: {deck: '', model: '', fields: {}},
|
||||
kanji: {deck: '', model: '', fields: {}},
|
||||
duplicateScope: 'collection',
|
||||
checkForDuplicates: true,
|
||||
fieldTemplates: null
|
||||
}
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user