ssb: More correct/thorough channel status.

This commit is contained in:
Cory McWilliams 2025-05-31 17:55:49 -04:00
parent 534438df63
commit 8a9502d1f2
2 changed files with 41 additions and 25 deletions

View File

@ -1,5 +1,5 @@
{ {
"type": "tildefriends-app", "type": "tildefriends-app",
"emoji": "🦀", "emoji": "🦀",
"previous": "&IeAWl/iQMfeYh+uyFRUqKBLQXaz+oIv7AjZNlSq28jU=.sha256" "previous": "&R6lVyXLYem8Qkuhok/USflvzqw/ZgGic1aUsE23yzR0=.sha256"
} }

View File

@ -353,27 +353,37 @@ class TfElement extends LitElement {
let latest_private = this.get_latest_private(following); let latest_private = this.get_latest_private(following);
let channels = await tfrpc.rpc.query( let channels = await tfrpc.rpc.query(
` `
SELECT channels.value AS channel, MAX(messages.rowid) AS rowid FROM messages 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(?1) AS channels ON messages.content ->> 'channel' = channels.value
JOIN json_each(?2) AS following ON messages.author = following.value JOIN json_each(?2) AS following ON messages.author = following.value
WHERE WHERE
messages.content ->> 'type' = 'post' AND messages.content ->> 'type' = 'post' AND
messages.content ->> 'root' IS NULL AND messages.content ->> 'root' IS NULL AND
messages.author != ?4 messages.author != ?4
GROUP by channel GROUP by channel
UNION UNION
SELECT '' AS channel, MAX(messages.rowid) AS rowid FROM messages SELECT channels.value AS channel, MAX(messages.rowid) AS rowid FROM messages
JOIN json_each(?2) AS following ON messages.author = following.value JOIN messages_refs ON messages.id = messages_refs.message
WHERE JOIN json_each(?1) AS channels ON messages_refs.ref = '#' || channels.value
messages.content ->> 'type' = 'post' AND JOIN json_each(?2) AS following ON messages.author = following.value
messages.content ->> 'root' IS NULL AND WHERE
messages.author != ?4 messages.content ->> 'type' = 'post' AND
UNION messages.content ->> 'root' IS NULL AND
SELECT '@' AS channel, MAX(messages.rowid) AS rowid FROM messages_fts(?3) messages.author != ?4
JOIN messages ON messages.rowid = messages_fts.rowid GROUP by channel
JOIN json_each(?2) AS following ON messages.author = following.value UNION
WHERE messages.author != ?4 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(this.channels),
JSON.stringify(following), JSON.stringify(following),
@ -381,9 +391,15 @@ class TfElement extends LitElement {
this.whoami, this.whoami,
] ]
); );
this.channels_latest = Object.fromEntries( let latest = {};
channels.map((x) => [x.channel, x.rowid]) 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); console.log('channels took', (new Date() - start_time) / 1000.0);
let self = this; let self = this;
start_time = new Date(); start_time = new Date();