~cadence/cloudtube

0aa05050094cdc8ffd1115917d99d40cf122d824 — Cadence Ember a month ago deea909
Keep subscriptions in database if channel deleted
4 files changed, 13 insertions(+), 5 deletions(-)

M api/formapi.js
M background/feed-update.js
M utils/getuser.js
M utils/upgradedb.js
M api/formapi.js => api/formapi.js +4 -1
@@ 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)
					}

M background/feed-update.js => background/feed-update.js +2 -2
@@ 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()

M utils/getuser.js => utils/getuser.js +2 -2
@@ 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
		}

M utils/upgradedb.js => utils/upgradedb.js +5 -0
@@ 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()
	}
]