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:
toasted-nutbread 2021-08-28 14:30:50 -04:00 committed by GitHub
parent 74709296e5
commit 87fbb3c01c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 17 additions and 10 deletions

View File

@ -111,7 +111,6 @@ class Backend {
['getZoom', {async: true, contentScript: true, handler: this._onApiGetZoom.bind(this)}],
['getDefaultAnkiFieldTemplates', {async: false, contentScript: true, handler: this._onApiGetDefaultAnkiFieldTemplates.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)}],
['getMedia', {async: true, contentScript: true, handler: this._onApiGetMedia.bind(this)}],
['log', {async: false, contentScript: true, handler: this._onApiLog.bind(this)}],
@ -616,10 +615,6 @@ class Backend {
return await this._dictionaryDatabase.getDictionaryInfo();
}
async _onApiGetDictionaryCounts({dictionaryNames, getTotal}) {
return await this._dictionaryDatabase.getDictionaryCounts(dictionaryNames, getTotal);
}
async _onApiPurgeDatabase() {
await this._dictionaryDatabase.purge();
this._triggerDatabaseUpdated('dictionary', 'purge');

View File

@ -120,10 +120,6 @@ class API {
return this._invoke('getDictionaryInfo');
}
getDictionaryCounts(dictionaryNames, getTotal) {
return this._invoke('getDictionaryCounts', {dictionaryNames, getTotal});
}
purgeDatabase() {
return this._invoke('purgeDatabase');
}

View File

@ -41,6 +41,9 @@ class DictionaryWorkerHandler {
case 'deleteDictionary':
this._onMessageWithProgress(params, this._deleteDictionary.bind(this));
break;
case 'getDictionaryCounts':
this._onMessageWithProgress(params, this._getDictionaryCounts.bind(this));
break;
case 'getImageResolution.response':
this._mediaLoader.handleMessage(params);
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() {
const dictionaryDatabase = new DictionaryDatabase();
await dictionaryDatabase.prepare();

View File

@ -38,6 +38,10 @@ class DictionaryWorker {
return this._invoke('deleteDictionary', {dictionaryTitle}, [], onProgress);
}
getDictionaryCounts(dictionaryNames, getTotal) {
return this._invoke('getDictionaryCounts', {dictionaryNames, getTotal}, [], null);
}
// Private
_invoke(action, params, transfer, onProgress, formatResult) {

View File

@ -567,7 +567,7 @@ class DictionaryController {
const token = this._databaseStateToken;
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; }
for (let i = 0, ii = Math.min(counts.length, this._dictionaryEntries.length); i < ii; ++i) {