Duplicate scope options (#955)
* Add deck-root duplicate scope option * Implement support for deck-root scope
This commit is contained in:
parent
94620f4f22
commit
215ef627f1
@ -769,7 +769,7 @@
|
|||||||
"duplicateScope": {
|
"duplicateScope": {
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"default": "collection",
|
"default": "collection",
|
||||||
"enum": ["collection", "deck"]
|
"enum": ["collection", "deck", "deck-root"]
|
||||||
},
|
},
|
||||||
"fieldTemplates": {
|
"fieldTemplates": {
|
||||||
"type": ["string", "null"],
|
"type": ["string", "null"],
|
||||||
|
@ -44,6 +44,14 @@ class AnkiNoteBuilder {
|
|||||||
await this._injectMedia(anki, definition, fields, mode, audioDetails, screenshotDetails, clipboardDetails);
|
await this._injectMedia(anki, definition, fields, mode, audioDetails, screenshotDetails, clipboardDetails);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let duplicateScopeDeckName = null;
|
||||||
|
let duplicateScopeCheckChildren = false;
|
||||||
|
if (duplicateScope === 'deck-root') {
|
||||||
|
duplicateScope = 'deck';
|
||||||
|
duplicateScopeDeckName = this.getRootDeckName(deck);
|
||||||
|
duplicateScopeCheckChildren = true;
|
||||||
|
}
|
||||||
|
|
||||||
const fieldEntries = Object.entries(fields);
|
const fieldEntries = Object.entries(fields);
|
||||||
const noteFields = {};
|
const noteFields = {};
|
||||||
const note = {
|
const note = {
|
||||||
@ -51,7 +59,13 @@ class AnkiNoteBuilder {
|
|||||||
tags,
|
tags,
|
||||||
deckName: deck,
|
deckName: deck,
|
||||||
modelName: model,
|
modelName: model,
|
||||||
options: {duplicateScope}
|
options: {
|
||||||
|
duplicateScope,
|
||||||
|
duplicateScopeOptions: {
|
||||||
|
deckName: duplicateScopeDeckName,
|
||||||
|
checkChildren: duplicateScopeCheckChildren
|
||||||
|
}
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
const data = this._createNoteData(definition, mode, context, resultOutputMode, compactGlossaries);
|
const data = this._createNoteData(definition, mode, context, resultOutputMode, compactGlossaries);
|
||||||
@ -81,6 +95,11 @@ class AnkiNoteBuilder {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
getRootDeckName(deckName) {
|
||||||
|
const index = deckName.indexOf('::');
|
||||||
|
return index >= 0 ? deckName.substring(0, index) : deckName;
|
||||||
|
}
|
||||||
|
|
||||||
// Private
|
// Private
|
||||||
|
|
||||||
_createNoteData(definition, mode, context, resultOutputMode, compactGlossaries) {
|
_createNoteData(definition, mode, context, resultOutputMode, compactGlossaries) {
|
||||||
|
@ -92,13 +92,26 @@ class AnkiConnect {
|
|||||||
if (!this._enabled) { return []; }
|
if (!this._enabled) { return []; }
|
||||||
await this._checkVersion();
|
await this._checkVersion();
|
||||||
const actions = notes.map((note) => {
|
const actions = notes.map((note) => {
|
||||||
let query = (duplicateScope === 'deck' ? `"deck:${this._escapeQuery(note.deckName)}" ` : '');
|
let query = '';
|
||||||
|
switch (duplicateScope) {
|
||||||
|
case 'deck':
|
||||||
|
query = `"deck:${this._escapeQuery(note.deckName)}" `;
|
||||||
|
break;
|
||||||
|
case 'deck-root':
|
||||||
|
query = `"deck:${this._escapeQuery(this.getRootDeckName(note.deckName))}" `;
|
||||||
|
break;
|
||||||
|
}
|
||||||
query += this._fieldsToQuery(note.fields);
|
query += this._fieldsToQuery(note.fields);
|
||||||
return {action: 'findNotes', params: {query}};
|
return {action: 'findNotes', params: {query}};
|
||||||
});
|
});
|
||||||
return await this._invoke('multi', {actions});
|
return await this._invoke('multi', {actions});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
getRootDeckName(deckName) {
|
||||||
|
const index = deckName.indexOf('::');
|
||||||
|
return index >= 0 ? deckName.substring(0, index) : deckName;
|
||||||
|
}
|
||||||
|
|
||||||
// Private
|
// Private
|
||||||
|
|
||||||
async _checkVersion() {
|
async _checkVersion() {
|
||||||
|
@ -926,6 +926,7 @@
|
|||||||
<select class="form-control" id="duplicate-scope" data-setting="anki.duplicateScope">
|
<select class="form-control" id="duplicate-scope" data-setting="anki.duplicateScope">
|
||||||
<option value="collection">Collection</option>
|
<option value="collection">Collection</option>
|
||||||
<option value="deck">Deck</option>
|
<option value="deck">Deck</option>
|
||||||
|
<option value="deck-root">Deck root</option>
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user