ssb: Load more messages at a time.
Some checks failed
Build Tilde Friends / Build-All (push) Has been cancelled

This commit is contained in:
2025-07-09 18:35:51 -04:00
parent b2085b3f28
commit 5f729efabe
2 changed files with 19 additions and 11 deletions

View File

@ -1,5 +1,5 @@
{ {
"type": "tildefriends-app", "type": "tildefriends-app",
"emoji": "🦀", "emoji": "🦀",
"previous": "&gr34tjvK2pGhEHo7FBgIPDhs9rvhHSPK3Tjkpp20/VU=.sha256" "previous": "&CRrPneLR7JTozkE2RdcTj6JJszqnAin4xPpQpNtCAFE=.sha256"
} }

View File

@ -108,6 +108,7 @@ class TfTabNewsFeedElement extends LitElement {
async fetch_messages(start_time, end_time) { async fetch_messages(start_time, end_time) {
this.time_loading = [start_time, end_time]; this.time_loading = [start_time, end_time];
let result; let result;
const k_max_results = 64;
if (this.hash == '#@') { if (this.hash == '#@') {
result = await tfrpc.rpc.query( result = await tfrpc.rpc.query(
` `
@ -118,7 +119,7 @@ class TfTabNewsFeedElement extends LitElement {
WHERE WHERE
messages.author != ?1 AND messages.author != ?1 AND
(?3 IS NULL OR messages.timestamp >= ?3) AND messages.timestamp < ?4 (?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 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 FROM mentions
JOIN messages_refs ON mentions.id = messages_refs.ref JOIN messages_refs ON mentions.id = messages_refs.ref
@ -131,6 +132,7 @@ class TfTabNewsFeedElement extends LitElement {
JSON.stringify(this.following), JSON.stringify(this.following),
start_time, start_time,
end_time, end_time,
k_max_results,
] ]
); );
} else if (this.hash.startsWith('#@')) { } 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 selected AS (SELECT rowid, id, previous, author, sequence, timestamp, hash, json(content) AS content, signature
FROM messages FROM messages
WHERE messages.author = ?1 AND (?2 IS NULL OR messages.timestamp >= 2) AND messages.timestamp < ?3 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 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 FROM selected
@ -149,7 +151,7 @@ class TfTabNewsFeedElement extends LitElement {
UNION UNION
SELECT TRUE AS is_primary, * FROM selected 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('#%')) { } else if (this.hash.startsWith('#%')) {
result = await tfrpc.rpc.query( result = await tfrpc.rpc.query(
@ -184,13 +186,14 @@ class TfTabNewsFeedElement extends LitElement {
) )
SELECT TRUE AS is_primary, all_news.* FROM all_news SELECT TRUE AS is_primary, all_news.* FROM all_news
WHERE (?2 IS NULL OR all_news.timestamp >= ?2) AND all_news.timestamp < ?3 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), JSON.stringify(this.following),
start_time, start_time,
end_time, end_time,
this.hash.substring(2), this.hash.substring(2),
k_max_results,
] ]
); );
let t1 = new Date(); let t1 = new Date();
@ -208,9 +211,14 @@ class TfTabNewsFeedElement extends LitElement {
WHERE WHERE
(?2 IS NULL OR (messages.timestamp >= ?2)) AND messages.timestamp < ?3 AND (?2 IS NULL OR (messages.timestamp >= ?2)) AND messages.timestamp < ?3 AND
json(messages.content) LIKE '"%' 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); result = (await this.decrypt(result)).filter((x) => x.decrypted);
} else if (this.hash == '#👍') { } else if (this.hash == '#👍') {
@ -222,14 +230,14 @@ class TfTabNewsFeedElement extends LitElement {
WHERE WHERE
messages.content ->> 'type' = 'vote' AND messages.content ->> 'type' = 'vote' AND
(?2 IS NULL OR messages.timestamp >= ?2) AND messages.timestamp < ?3 (?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 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 FROM votes
JOIN messages ON messages.id = votes.content ->> '$.vote.link' JOIN messages ON messages.id = votes.content ->> '$.vote.link'
UNION UNION
SELECT TRUE AS is_primary, * FROM votes 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 { } else {
let t0 = new Date(); let t0 = new Date();
@ -240,9 +248,9 @@ class TfTabNewsFeedElement extends LitElement {
JOIN json_each(?) AS following ON messages.author = following.value JOIN json_each(?) AS following ON messages.author = following.value
WHERE messages.timestamp < ?3 AND (?2 IS NULL OR messages.timestamp >= ?2) AND WHERE messages.timestamp < ?3 AND (?2 IS NULL OR messages.timestamp >= ?2) AND
messages.content ->> 'type' != 'vote' 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(); let t1 = new Date();
result = await this._fetch_related_messages(initial_messages); result = await this._fetch_related_messages(initial_messages);