This commit is contained in:
Alex Yatskov 2016-11-09 08:55:40 -08:00
parent 58357552f8
commit aab3803786

View File

@ -141,13 +141,64 @@ class Database {
return this.db.dictionaries.toArray();
}
deleteDictionary(title) {
deleteDictionary(title, callback) {
if (this.db === null) {
return Promise.reject('database not initialized');
}
return this.db.terms.where('dictionary').equals(title).delete().then(() => {
return this.db.kanji.where('dictionary').equals(title).delete();
this.db.dictionaries.where('title').equals(title).first(info => {
if (!info) {
return;
}
let termCounter = Promise.resolve(0);
if (info.hasTerms) {
termCounter = this.db.terms.where('dictionary').equals(title).count();
}
let kanjiCounter = Promise.resolve(0);
if (info.hasKanji) {
kanjiCounter = this.db.kanji.where('dictionary').equals(title).count();
}
return Promise.all([termCounter, kanjiCounter]).then(([termCount, kanjiCount]) => {
const totalCount = termCount + kanjiCount;
let deletedCount = 0;
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);
}
}
});
};
}
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);
}
}
});
};
}
return Promise.all([termDeleter, kanjiDeleter]);
});
}).then(() => {
return this.db.entities.where('dictionary').equals(title).delete();
}).then(() => {