From 0aa05050094cdc8ffd1115917d99d40cf122d824 Mon Sep 17 00:00:00 2001 From: Cadence Ember Date: Mon, 23 Aug 2021 23:43:23 +1200 Subject: [PATCH] Keep subscriptions in database if channel deleted --- api/formapi.js | 5 ++++- background/feed-update.js | 4 ++-- utils/getuser.js | 4 ++-- utils/upgradedb.js | 5 +++++ 4 files changed, 13 insertions(+), 5 deletions(-) diff --git a/api/formapi.js b/api/formapi.js index 70d1b28..14f10d0 100644 --- a/api/formapi.js +++ b/api/formapi.js @@ -24,7 +24,10 @@ module.exports = [ if (add) { await fetchChannel(ucid, settings.instance) - db.prepare("INSERT OR IGNORE INTO Subscriptions (token, ucid) VALUES (?, ?)").run(token, ucid) + db.prepare( + "INSERT INTO Subscriptions (token, ucid) VALUES (?, ?)" + + " ON CONFLICT (token, ucid) DO UPDATE SET channel_missing = 0" + ).run(token, ucid) } else { db.prepare("DELETE FROM Subscriptions WHERE token = ? AND ucid = ?").run(token, ucid) } diff --git a/background/feed-update.js b/background/feed-update.js index daaa9fa..069ee0d 100644 --- a/background/feed-update.js +++ b/background/feed-update.js @@ -16,7 +16,7 @@ const prepared = { "UPDATE Channels SET refreshed = ? WHERE ucid = ?" ), unsubscribe_all_from_channel: db.prepare( - "DELETE FROM Subscriptions WHERE ucid = ?" + "UPDATE Subscriptions SET channel_missing = 1 WHERE ucid = ?" ) } @@ -35,7 +35,7 @@ class RefreshQueue { // get the next set of scheduled channels to refresh const afterTime = Date.now() - constants.caching.seen_token_subscriptions_eligible const channels = db.prepare( - "SELECT DISTINCT Subscriptions.ucid FROM SeenTokens INNER JOIN Subscriptions ON SeenTokens.token = Subscriptions.token AND SeenTokens.seen > ? ORDER BY SeenTokens.seen DESC" + "SELECT DISTINCT Subscriptions.ucid FROM SeenTokens INNER JOIN Subscriptions ON SeenTokens.token = Subscriptions.token AND SeenTokens.seen > ? WHERE Subscriptions.channel_missing = 0 ORDER BY SeenTokens.seen DESC" ).pluck().all(afterTime) this.addLast(channels) this.lastLoadTime = Date.now() diff --git a/utils/getuser.js b/utils/getuser.js index cc819fe..7cbb7ef 100644 --- a/utils/getuser.js +++ b/utils/getuser.js @@ -51,7 +51,7 @@ class User { getSubscriptions() { if (this.token) { - return db.prepare("SELECT ucid FROM Subscriptions WHERE token = ?").pluck().all(this.token) + return db.prepare("SELECT ucid FROM Subscriptions WHERE token = ? AND channel_missing = 0").pluck().all(this.token) } else { return [] } @@ -59,7 +59,7 @@ class User { isSubscribed(ucid) { if (this.token) { - return !!db.prepare("SELECT * FROM Subscriptions WHERE token = ? AND ucid = ?").get([this.token, ucid]) + return !!db.prepare("SELECT * FROM Subscriptions WHERE token = ? AND ucid = ? AND channel_missing = 0").get([this.token, ucid]) } else { return false } diff --git a/utils/upgradedb.js b/utils/upgradedb.js index 33642ab..78a7696 100644 --- a/utils/upgradedb.js +++ b/utils/upgradedb.js @@ -53,6 +53,11 @@ const deltas = [ function() { db.prepare("ALTER TABLE Settings ADD COLUMN recommended_mode INTEGER DEFAULT 0") .run() + }, + // 8: Subscriptions +channel_missing + function() { + db.prepare("ALTER TABLE Subscriptions ADD COLUMN channel_missing INTEGER DEFAULT 0") + .run() } ]