Better deletion

This commit is contained in:
Alex Yatskov 2016-11-09 09:21:11 -08:00
parent aab3803786
commit 8b5ee62931
2 changed files with 32 additions and 20 deletions

View File

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

View File

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