Optimize Anki duplicate checks (#1013)
* Move/rename functions * Prevent overlapping calls to check addable definitions
This commit is contained in:
parent
16321a1f8c
commit
6232e3efc2
@ -86,6 +86,7 @@ class Display extends EventDispatcher {
|
|||||||
this._ankiNoteBuilder = new AnkiNoteBuilder({
|
this._ankiNoteBuilder = new AnkiNoteBuilder({
|
||||||
renderTemplate: this._renderTemplate.bind(this)
|
renderTemplate: this._renderTemplate.bind(this)
|
||||||
});
|
});
|
||||||
|
this._updateAdderButtonsPromise = Promise.resolve();
|
||||||
|
|
||||||
this.registerActions([
|
this.registerActions([
|
||||||
['close', () => { this.onEscape(); }],
|
['close', () => { this.onEscape(); }],
|
||||||
@ -892,32 +893,11 @@ class Display extends EventDispatcher {
|
|||||||
this.autoPlayAudio();
|
this.autoPlayAudio();
|
||||||
}
|
}
|
||||||
|
|
||||||
this._setContentTermsOrKanjiUpdateAdderButtons(token, isTerms, definitions);
|
this._updateAdderButtons(token, isTerms, definitions);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
async _setContentTermsOrKanjiUpdateAdderButtons(token, isTerms, definitions) {
|
|
||||||
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;
|
|
||||||
}
|
|
||||||
if (this._setContentToken !== token) { return; }
|
|
||||||
|
|
||||||
this._updateAdderButtons(states, modes);
|
|
||||||
}
|
|
||||||
|
|
||||||
_setContentExtensionUnloaded() {
|
_setContentExtensionUnloaded() {
|
||||||
const errorExtensionUnloaded = document.querySelector('#error-extension-unloaded');
|
const errorExtensionUnloaded = document.querySelector('#error-extension-unloaded');
|
||||||
|
|
||||||
@ -976,7 +956,39 @@ class Display extends EventDispatcher {
|
|||||||
this._navigationHeader.dataset.hasNext = `${!!next}`;
|
this._navigationHeader.dataset.hasNext = `${!!next}`;
|
||||||
}
|
}
|
||||||
|
|
||||||
_updateAdderButtons(states, modes) {
|
async _updateAdderButtons(token, isTerms, definitions) {
|
||||||
|
await this._updateAdderButtonsPromise;
|
||||||
|
if (this._setContentToken !== token) { return; }
|
||||||
|
|
||||||
|
const {promise, resolve} = deferPromise();
|
||||||
|
try {
|
||||||
|
this._updateAdderButtonsPromise = promise;
|
||||||
|
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this._setContentToken !== token) { return; }
|
||||||
|
|
||||||
|
this._updateAdderButtons2(states, modes);
|
||||||
|
} finally {
|
||||||
|
resolve();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
_updateAdderButtons2(states, modes) {
|
||||||
for (let i = 0, ii = states.length; i < ii; ++i) {
|
for (let i = 0, ii = states.length; i < ii; ++i) {
|
||||||
const infos = states[i];
|
const infos = states[i];
|
||||||
let noteId = null;
|
let noteId = null;
|
||||||
|
Loading…
Reference in New Issue
Block a user