Dictionary worker updates (#1914)
* Add support for running getDictionaryCounts via DictionaryWorker * Run dictionary integrity checks on a separate thread * Remove api.getDictionaryCounts
This commit is contained in:
parent
74709296e5
commit
87fbb3c01c
@ -111,7 +111,6 @@ class Backend {
|
|||||||
['getZoom', {async: true, contentScript: true, handler: this._onApiGetZoom.bind(this)}],
|
['getZoom', {async: true, contentScript: true, handler: this._onApiGetZoom.bind(this)}],
|
||||||
['getDefaultAnkiFieldTemplates', {async: false, contentScript: true, handler: this._onApiGetDefaultAnkiFieldTemplates.bind(this)}],
|
['getDefaultAnkiFieldTemplates', {async: false, contentScript: true, handler: this._onApiGetDefaultAnkiFieldTemplates.bind(this)}],
|
||||||
['getDictionaryInfo', {async: true, contentScript: true, handler: this._onApiGetDictionaryInfo.bind(this)}],
|
['getDictionaryInfo', {async: true, contentScript: true, handler: this._onApiGetDictionaryInfo.bind(this)}],
|
||||||
['getDictionaryCounts', {async: true, contentScript: false, handler: this._onApiGetDictionaryCounts.bind(this)}],
|
|
||||||
['purgeDatabase', {async: true, contentScript: false, handler: this._onApiPurgeDatabase.bind(this)}],
|
['purgeDatabase', {async: true, contentScript: false, handler: this._onApiPurgeDatabase.bind(this)}],
|
||||||
['getMedia', {async: true, contentScript: true, handler: this._onApiGetMedia.bind(this)}],
|
['getMedia', {async: true, contentScript: true, handler: this._onApiGetMedia.bind(this)}],
|
||||||
['log', {async: false, contentScript: true, handler: this._onApiLog.bind(this)}],
|
['log', {async: false, contentScript: true, handler: this._onApiLog.bind(this)}],
|
||||||
@ -616,10 +615,6 @@ class Backend {
|
|||||||
return await this._dictionaryDatabase.getDictionaryInfo();
|
return await this._dictionaryDatabase.getDictionaryInfo();
|
||||||
}
|
}
|
||||||
|
|
||||||
async _onApiGetDictionaryCounts({dictionaryNames, getTotal}) {
|
|
||||||
return await this._dictionaryDatabase.getDictionaryCounts(dictionaryNames, getTotal);
|
|
||||||
}
|
|
||||||
|
|
||||||
async _onApiPurgeDatabase() {
|
async _onApiPurgeDatabase() {
|
||||||
await this._dictionaryDatabase.purge();
|
await this._dictionaryDatabase.purge();
|
||||||
this._triggerDatabaseUpdated('dictionary', 'purge');
|
this._triggerDatabaseUpdated('dictionary', 'purge');
|
||||||
|
@ -120,10 +120,6 @@ class API {
|
|||||||
return this._invoke('getDictionaryInfo');
|
return this._invoke('getDictionaryInfo');
|
||||||
}
|
}
|
||||||
|
|
||||||
getDictionaryCounts(dictionaryNames, getTotal) {
|
|
||||||
return this._invoke('getDictionaryCounts', {dictionaryNames, getTotal});
|
|
||||||
}
|
|
||||||
|
|
||||||
purgeDatabase() {
|
purgeDatabase() {
|
||||||
return this._invoke('purgeDatabase');
|
return this._invoke('purgeDatabase');
|
||||||
}
|
}
|
||||||
|
@ -41,6 +41,9 @@ class DictionaryWorkerHandler {
|
|||||||
case 'deleteDictionary':
|
case 'deleteDictionary':
|
||||||
this._onMessageWithProgress(params, this._deleteDictionary.bind(this));
|
this._onMessageWithProgress(params, this._deleteDictionary.bind(this));
|
||||||
break;
|
break;
|
||||||
|
case 'getDictionaryCounts':
|
||||||
|
this._onMessageWithProgress(params, this._getDictionaryCounts.bind(this));
|
||||||
|
break;
|
||||||
case 'getImageResolution.response':
|
case 'getImageResolution.response':
|
||||||
this._mediaLoader.handleMessage(params);
|
this._mediaLoader.handleMessage(params);
|
||||||
break;
|
break;
|
||||||
@ -87,6 +90,15 @@ class DictionaryWorkerHandler {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async _getDictionaryCounts({dictionaryNames, getTotal}) {
|
||||||
|
const dictionaryDatabase = await this._getPreparedDictionaryDatabase();
|
||||||
|
try {
|
||||||
|
return await dictionaryDatabase.getDictionaryCounts(dictionaryNames, getTotal);
|
||||||
|
} finally {
|
||||||
|
dictionaryDatabase.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
async _getPreparedDictionaryDatabase() {
|
async _getPreparedDictionaryDatabase() {
|
||||||
const dictionaryDatabase = new DictionaryDatabase();
|
const dictionaryDatabase = new DictionaryDatabase();
|
||||||
await dictionaryDatabase.prepare();
|
await dictionaryDatabase.prepare();
|
||||||
|
@ -38,6 +38,10 @@ class DictionaryWorker {
|
|||||||
return this._invoke('deleteDictionary', {dictionaryTitle}, [], onProgress);
|
return this._invoke('deleteDictionary', {dictionaryTitle}, [], onProgress);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
getDictionaryCounts(dictionaryNames, getTotal) {
|
||||||
|
return this._invoke('getDictionaryCounts', {dictionaryNames, getTotal}, [], null);
|
||||||
|
}
|
||||||
|
|
||||||
// Private
|
// Private
|
||||||
|
|
||||||
_invoke(action, params, transfer, onProgress, formatResult) {
|
_invoke(action, params, transfer, onProgress, formatResult) {
|
||||||
|
@ -567,7 +567,7 @@ class DictionaryController {
|
|||||||
|
|
||||||
const token = this._databaseStateToken;
|
const token = this._databaseStateToken;
|
||||||
const dictionaryTitles = this._dictionaryEntries.map(({dictionaryTitle}) => dictionaryTitle);
|
const dictionaryTitles = this._dictionaryEntries.map(({dictionaryTitle}) => dictionaryTitle);
|
||||||
const {counts, total} = await yomichan.api.getDictionaryCounts(dictionaryTitles, true);
|
const {counts, total} = await new DictionaryWorker().getDictionaryCounts(dictionaryTitles, true);
|
||||||
if (this._databaseStateToken !== token) { return; }
|
if (this._databaseStateToken !== token) { return; }
|
||||||
|
|
||||||
for (let i = 0, ii = Math.min(counts.length, this._dictionaryEntries.length); i < ii; ++i) {
|
for (let i = 0, ii = Math.min(counts.length, this._dictionaryEntries.length); i < ii; ++i) {
|
||||||
|
Loading…
Reference in New Issue
Block a user