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)}], ['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');

View File

@ -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');
} }

View File

@ -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();

View File

@ -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) {

View File

@ -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) {