From 8a9502d1f2513155fcb08af3604e19c5c954a72e Mon Sep 17 00:00:00 2001 From: Cory McWilliams Date: Sat, 31 May 2025 17:55:49 -0400 Subject: [PATCH] ssb: More correct/thorough channel status. --- apps/ssb.json | 2 +- apps/ssb/tf-app.js | 64 +++++++++++++++++++++++++++++----------------- 2 files changed, 41 insertions(+), 25 deletions(-) diff --git a/apps/ssb.json b/apps/ssb.json index 89ee6844..a5e2d376 100644 --- a/apps/ssb.json +++ b/apps/ssb.json @@ -1,5 +1,5 @@ { "type": "tildefriends-app", "emoji": "🦀", - "previous": "&IeAWl/iQMfeYh+uyFRUqKBLQXaz+oIv7AjZNlSq28jU=.sha256" + "previous": "&R6lVyXLYem8Qkuhok/USflvzqw/ZgGic1aUsE23yzR0=.sha256" } diff --git a/apps/ssb/tf-app.js b/apps/ssb/tf-app.js index 4292a903..8cd401d3 100644 --- a/apps/ssb/tf-app.js +++ b/apps/ssb/tf-app.js @@ -353,27 +353,37 @@ class TfElement extends LitElement { let latest_private = this.get_latest_private(following); let channels = await tfrpc.rpc.query( ` - SELECT channels.value AS channel, MAX(messages.rowid) AS rowid FROM messages - JOIN json_each(?1) AS channels ON messages.content ->> 'channel' = channels.value - JOIN json_each(?2) AS following ON messages.author = following.value - WHERE - messages.content ->> 'type' = 'post' AND - messages.content ->> 'root' IS NULL AND - messages.author != ?4 - GROUP by channel - UNION - SELECT '' AS channel, MAX(messages.rowid) AS rowid FROM messages - JOIN json_each(?2) AS following ON messages.author = following.value - WHERE - messages.content ->> 'type' = 'post' AND - messages.content ->> 'root' IS NULL AND - messages.author != ?4 - UNION - SELECT '@' AS channel, MAX(messages.rowid) AS rowid FROM messages_fts(?3) - JOIN messages ON messages.rowid = messages_fts.rowid - JOIN json_each(?2) AS following ON messages.author = following.value - WHERE messages.author != ?4 - `, + SELECT channels.value AS channel, MAX(messages.rowid) AS rowid FROM messages + JOIN json_each(?1) AS channels ON messages.content ->> 'channel' = channels.value + JOIN json_each(?2) AS following ON messages.author = following.value + WHERE + messages.content ->> 'type' = 'post' AND + messages.content ->> 'root' IS NULL AND + messages.author != ?4 + GROUP by channel + UNION + SELECT channels.value AS channel, MAX(messages.rowid) AS rowid FROM messages + JOIN messages_refs ON messages.id = messages_refs.message + JOIN json_each(?1) AS channels ON messages_refs.ref = '#' || channels.value + JOIN json_each(?2) AS following ON messages.author = following.value + WHERE + messages.content ->> 'type' = 'post' AND + messages.content ->> 'root' IS NULL AND + messages.author != ?4 + GROUP by channel + UNION + SELECT '' AS channel, MAX(messages.rowid) AS rowid FROM messages + JOIN json_each(?2) AS following ON messages.author = following.value + WHERE + messages.content ->> 'type' = 'post' AND + messages.content ->> 'root' IS NULL AND + messages.author != ?4 + UNION + SELECT '@' AS channel, MAX(messages.rowid) AS rowid FROM messages_fts(?3) + JOIN messages ON messages.rowid = messages_fts.rowid + JOIN json_each(?2) AS following ON messages.author = following.value + WHERE messages.author != ?4 + `, [ JSON.stringify(this.channels), JSON.stringify(following), @@ -381,9 +391,15 @@ class TfElement extends LitElement { this.whoami, ] ); - this.channels_latest = Object.fromEntries( - channels.map((x) => [x.channel, x.rowid]) - ); + let latest = {}; + for (let row of channels) { + if (!latest[row.channel]) { + latest[row.channel] = row.rowid; + } else { + latest[row.channel] = Math.max(row.rowid, latest[row.channel]); + } + } + this.channels_latest = latest; console.log('channels took', (new Date() - start_time) / 1000.0); let self = this; start_time = new Date();