summaryrefslogtreecommitdiff
path: root/ext/js
diff options
context:
space:
mode:
authortoasted-nutbread <toasted-nutbread@users.noreply.github.com>2021-08-07 15:25:00 -0400
committerGitHub <noreply@github.com>2021-08-07 15:25:00 -0400
commit2d5e6f839412985ae790da34b3f75476bcf8028c (patch)
tree1dbe04b1510bf951178959ce90881669b1cb71fa /ext/js
parente704ae99a2719b75d5e51f812d6176ea2d34773c (diff)
Fix data not being persisted after terminating Worker thread (#1877)
Diffstat (limited to 'ext/js')
-rw-r--r--ext/js/data/database.js10
-rw-r--r--ext/js/language/dictionary-database.js4
-rw-r--r--ext/js/language/dictionary-importer.js4
3 files changed, 18 insertions, 0 deletions
diff --git a/ext/js/data/database.js b/ext/js/data/database.js
index a0a1804a..222e376c 100644
--- a/ext/js/data/database.js
+++ b/ext/js/data/database.js
@@ -198,6 +198,16 @@ class Database {
});
}
+ persistData(objectStoreName) {
+ return new Promise((resolve, reject) => {
+ const transaction = this.transaction([objectStoreName], 'readonly');
+ const objectStore = transaction.objectStore(objectStoreName);
+ const cursor = objectStore.openCursor();
+ cursor.onerror = (e) => reject(e.target.error);
+ cursor.onsuccess = () => resolve();
+ });
+ }
+
static deleteDatabase(databaseName) {
return new Promise((resolve, reject) => {
const request = indexedDB.deleteDatabase(databaseName);
diff --git a/ext/js/language/dictionary-database.js b/ext/js/language/dictionary-database.js
index 6b235fb6..62300676 100644
--- a/ext/js/language/dictionary-database.js
+++ b/ext/js/language/dictionary-database.js
@@ -317,6 +317,10 @@ class DictionaryDatabase {
return this._db.bulkAdd(objectStoreName, items, start, count);
}
+ persistData(objectStoreName) {
+ return this._db.persistData(objectStoreName);
+ }
+
// Private
_findMultiBulk(objectStoreName, indexNames, items, createQuery, predicate, createResult) {
diff --git a/ext/js/language/dictionary-importer.js b/ext/js/language/dictionary-importer.js
index 89417ca6..8d6dcb33 100644
--- a/ext/js/language/dictionary-importer.js
+++ b/ext/js/language/dictionary-importer.js
@@ -149,6 +149,10 @@ class DictionaryImporter {
this._progressData.index += count;
this._progress();
}
+
+ // This function is required in order to make the added data persist after the worker is terminated.
+ // https://bugs.chromium.org/p/chromium/issues/detail?id=1237686
+ await dictionaryDatabase.persistData(objectStoreName);
};
await bulkAdd('terms', termList);