From 5f729efabeacdc6470265f3ef2d7e6f6ee3dc82b Mon Sep 17 00:00:00 2001 From: Cory McWilliams Date: Wed, 9 Jul 2025 18:35:51 -0400 Subject: [PATCH] ssb: Load more messages at a time. --- apps/ssb.json | 2 +- apps/ssb/tf-tab-news-feed.js | 28 ++++++++++++++++++---------- 2 files changed, 19 insertions(+), 11 deletions(-) diff --git a/apps/ssb.json b/apps/ssb.json index eb6b63da..a8976152 100644 --- a/apps/ssb.json +++ b/apps/ssb.json @@ -1,5 +1,5 @@ { "type": "tildefriends-app", "emoji": "🦀", - "previous": "&gr34tjvK2pGhEHo7FBgIPDhs9rvhHSPK3Tjkpp20/VU=.sha256" + "previous": "&CRrPneLR7JTozkE2RdcTj6JJszqnAin4xPpQpNtCAFE=.sha256" } diff --git a/apps/ssb/tf-tab-news-feed.js b/apps/ssb/tf-tab-news-feed.js index 7e4b3693..b86a40b7 100644 --- a/apps/ssb/tf-tab-news-feed.js +++ b/apps/ssb/tf-tab-news-feed.js @@ -108,6 +108,7 @@ class TfTabNewsFeedElement extends LitElement { async fetch_messages(start_time, end_time) { this.time_loading = [start_time, end_time]; let result; + const k_max_results = 64; if (this.hash == '#@') { result = await tfrpc.rpc.query( ` @@ -118,7 +119,7 @@ class TfTabNewsFeedElement extends LitElement { WHERE messages.author != ?1 AND (?3 IS NULL OR messages.timestamp >= ?3) AND messages.timestamp < ?4 - ORDER BY timestamp DESC limit 20) + ORDER BY timestamp DESC limit ?5) SELECT FALSE AS is_primary, messages.rowid, messages.id, messages.previous, messages.author, messages.sequence, messages.timestamp, messages.hash, json(messages.content) AS content, messages.signature FROM mentions JOIN messages_refs ON mentions.id = messages_refs.ref @@ -131,6 +132,7 @@ class TfTabNewsFeedElement extends LitElement { JSON.stringify(this.following), start_time, end_time, + k_max_results, ] ); } else if (this.hash.startsWith('#@')) { @@ -140,7 +142,7 @@ class TfTabNewsFeedElement extends LitElement { selected AS (SELECT rowid, id, previous, author, sequence, timestamp, hash, json(content) AS content, signature FROM messages WHERE messages.author = ?1 AND (?2 IS NULL OR messages.timestamp >= 2) AND messages.timestamp < ?3 - ORDER BY sequence DESC LIMIT 20 + ORDER BY sequence DESC LIMIT ?4 ) SELECT FALSE AS is_primary, messages.rowid, messages.id, messages.previous, messages.author, messages.sequence, messages.timestamp, messages.hash, json(messages.content) AS content, messages.signature FROM selected @@ -149,7 +151,7 @@ class TfTabNewsFeedElement extends LitElement { UNION SELECT TRUE AS is_primary, * FROM selected `, - [this.hash.substring(1), start_time, end_time] + [this.hash.substring(1), start_time, end_time, k_max_results] ); } else if (this.hash.startsWith('#%')) { result = await tfrpc.rpc.query( @@ -184,13 +186,14 @@ class TfTabNewsFeedElement extends LitElement { ) SELECT TRUE AS is_primary, all_news.* FROM all_news WHERE (?2 IS NULL OR all_news.timestamp >= ?2) AND all_news.timestamp < ?3 - ORDER BY all_news.timestamp DESC LIMIT 20 + ORDER BY all_news.timestamp DESC LIMIT ?5 `, [ JSON.stringify(this.following), start_time, end_time, this.hash.substring(2), + k_max_results, ] ); let t1 = new Date(); @@ -208,9 +211,14 @@ class TfTabNewsFeedElement extends LitElement { WHERE (?2 IS NULL OR (messages.timestamp >= ?2)) AND messages.timestamp < ?3 AND json(messages.content) LIKE '"%' - ORDER BY messages.rowid DESC LIMIT 20 + ORDER BY messages.rowid DESC LIMIT ?4 `, - [JSON.stringify(this.private_messages), start_time, end_time] + [ + JSON.stringify(this.private_messages), + start_time, + end_time, + k_max_results, + ] ); result = (await this.decrypt(result)).filter((x) => x.decrypted); } else if (this.hash == '#👍') { @@ -222,14 +230,14 @@ class TfTabNewsFeedElement extends LitElement { WHERE messages.content ->> 'type' = 'vote' AND (?2 IS NULL OR messages.timestamp >= ?2) AND messages.timestamp < ?3 - ORDER BY timestamp DESC limit 20) + ORDER BY timestamp DESC limit ?4) SELECT FALSE AS is_primary, messages.rowid, messages.id, messages.previous, messages.author, messages.sequence, messages.timestamp, messages.hash, json(messages.content) AS content, messages.signature FROM votes JOIN messages ON messages.id = votes.content ->> '$.vote.link' UNION SELECT TRUE AS is_primary, * FROM votes `, - [JSON.stringify(this.following), start_time, end_time] + [JSON.stringify(this.following), start_time, end_time, k_max_results] ); } else { let t0 = new Date(); @@ -240,9 +248,9 @@ class TfTabNewsFeedElement extends LitElement { JOIN json_each(?) AS following ON messages.author = following.value WHERE messages.timestamp < ?3 AND (?2 IS NULL OR messages.timestamp >= ?2) AND messages.content ->> 'type' != 'vote' - ORDER BY timestamp DESC LIMIT 20 + ORDER BY timestamp DESC LIMIT ?4 `, - [JSON.stringify(this.following), start_time, end_time] + [JSON.stringify(this.following), start_time, end_time, k_max_results] ); let t1 = new Date(); result = await this._fetch_related_messages(initial_messages);