From 8b5ee629311065bc53537d5684931dbf775c4e3e Mon Sep 17 00:00:00 2001 From: Alex Yatskov Date: Wed, 9 Nov 2016 09:21:11 -0800 Subject: [PATCH] Better deletion --- ext/bg/js/database.js | 46 +++++++++++++++++++++++---------------- ext/bg/js/options-form.js | 6 ++++- 2 files changed, 32 insertions(+), 20 deletions(-) diff --git a/ext/bg/js/database.js b/ext/bg/js/database.js index 1169d5ee..e3a62886 100644 --- a/ext/bg/js/database.js +++ b/ext/bg/js/database.js @@ -146,7 +146,7 @@ class Database { return Promise.reject('database not initialized'); } - this.db.dictionaries.where('title').equals(title).first(info => { + return this.db.dictionaries.where('title').equals(title).first(info => { if (!info) { return; } @@ -167,34 +167,42 @@ class Database { let termDeleter = Promise.resolve(); if (info.hasTerms) { - termDeleter = () => { - this.db.terms.where('dictionary').equals(title).limit(1000).delete(count => { - if (count > 0) { - return termDeleter(); - } else { - deletedCount += count; - if (callback) { - callback(deletedCount / totalCount); - } + const termDeleterFunc = () => { + return this.db.terms.where('dictionary').equals(title).limit(1000).delete().then(count => { + if (count === 0) { + return Promise.resolve(); } + + deletedCount += count; + if (callback) { + callback(totalCount, deletedCount); + } + + return termDeleterFunc(); }); }; + + termDeleter = termDeleterFunc(); } let kanjiDeleter = Promise.resolve(); if (info.hasKanji) { - kanjiDeleter = () => { - this.db.terms.where('dictionary').equals(title).limit(1000).delete(count => { - if (count > 0) { - return kanjiDeleter(); - } else { - deletedCount += count; - if (callback) { - callback(deletedCount / totalCount); - } + const kanjiDeleterFunc = () => { + return this.db.kanji.where('dictionary').equals(title).limit(1000).delete().then(count => { + if (count === 0) { + return Promise.resolve(); } + + deletedCount += count; + if (callback) { + callback(totalCount, deletedCount); + } + + return kanjiDeleterFunc(); }); }; + + kanjiDeleter = kanjiDeleterFunc(); } return Promise.all([termDeleter, kanjiDeleter]); diff --git a/ext/bg/js/options-form.js b/ext/bg/js/options-form.js index 983ef51d..1f64f8d0 100644 --- a/ext/bg/js/options-form.js +++ b/ext/bg/js/options-form.js @@ -164,7 +164,11 @@ function onDictionaryDelete() { const dictControls = dictGroup.find('.dict-controls'); dictControls.hide(); - database().deleteDictionary(dictGroup.data('title')).then(() => { + const callback = (total, current) => { + dictProgress.find('div').css('width', `${current / total * 100.0}%`); + }; + + database().deleteDictionary(dictGroup.data('title'), callback).then(() => { dictGroup.slideUp(); }).catch(error => { dictError.show().find('span').text(error);