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)}],
|
||||
['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');
|
||||
|
@ -120,10 +120,6 @@ class API {
|
||||
return this._invoke('getDictionaryInfo');
|
||||
}
|
||||
|
||||
getDictionaryCounts(dictionaryNames, getTotal) {
|
||||
return this._invoke('getDictionaryCounts', {dictionaryNames, getTotal});
|
||||
}
|
||||
|
||||
purgeDatabase() {
|
||||
return this._invoke('purgeDatabase');
|
||||
}
|
||||
|
@ -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();
|
||||
|
@ -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) {
|
||||
|
@ -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) {
|
||||
|
Loading…
Reference in New Issue
Block a user