diff --git a/modules/database.js b/modules/database.js index c3dbcfe8..6c61cbbf 100644 --- a/modules/database.js +++ b/modules/database.js @@ -935,8 +935,56 @@ export let Database = { return tree; }, + + async cleanupEntries() { + //TODO: Do not delete entries that are in the feed now. + let query = this.query({ + deleted: 'deleted' + }); + let ids = await query.getIds(); + for(const id of ids.values()) { + let tx = this.db().transaction(['entries', 'revisions'], 'readwrite'); + let request = tx.objectStore('entries').delete(id); + DbUtil.requestPromise(request); + + let request2 = tx.objectStore('revisions').delete(id); + DbUtil.requestPromise(request2); + } + }, + + async cleanupHiddenFeeds() { + + var transaction = this._db.transaction(['feeds'], 'readonly'); + var objectStore = transaction.objectStore('feeds'); + + const request = objectStore.getAll(); + request.onsuccess = async ()=> { + const feeds = request.result; + + for (let feed of feeds) { + if (feed.hidden == 0) { + continue; + } + let query = new Query({ + feeds: [feed.feedID], + }); + let ids = await query.getIds(); + for(const id of ids.values()) { + let tx = this.db().transaction(['entries', 'revisions'], 'readwrite'); + let request = tx.objectStore('entries').delete(id); + DbUtil.requestPromise(request); + + let request2 = tx.objectStore('revisions').delete(id); + DbUtil.requestPromise(request2); + } + + let tx = this.db().transaction(['feeds'], 'readwrite'); + let request = tx.objectStore('feeds').delete(feed.feedID); + DbUtil.requestPromise(request); + } + } + } }; -//TODO: database cleanup //TODO: bookmark to starred sync function Query(filters) { diff --git a/ui/feedlist.js b/ui/feedlist.js index 83cb05f0..7cd1fd6f 100644 --- a/ui/feedlist.js +++ b/ui/feedlist.js @@ -1163,6 +1163,8 @@ export let Commands = { emptyTrash: function cmd_emptyTrash() { ViewList.db.query(ViewList.getQueryForView('trash-folder')).markDeleted('deleted'); + ViewList.db.cleanupHiddenFeeds(); + ViewList.db.cleanupEntries(); }, toggleSelectedEntryRead: function cmd_toggleSelectedEntryRead() {