ssb: Treat timestamps of related messages separately from those of the primary queried messages.
All checks were successful
Build Tilde Friends / Build-All (push) Successful in 21m49s
All checks were successful
Build Tilde Friends / Build-All (push) Successful in 21m49s
This commit is contained in:
parent
18cf058af3
commit
01d8f720e8
@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"type": "tildefriends-app",
|
"type": "tildefriends-app",
|
||||||
"emoji": "🦀",
|
"emoji": "🦀",
|
||||||
"previous": "&QQhMV7DY8GfmrAfjLFhOA2VScoGXlSA0MW520Pigrjg=.sha256"
|
"previous": "&0nbuLC0KYS8PwAN9MMUbKQjHxjk+m68Kzw8qEw6/TBI=.sha256"
|
||||||
}
|
}
|
||||||
|
@ -46,6 +46,7 @@ class TfTabNewsFeedElement extends LitElement {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async fetch_messages(start_time, end_time) {
|
async fetch_messages(start_time, end_time) {
|
||||||
|
console.log('fetch_messages', this.hash, start_time, end_time);
|
||||||
this.time_loading = [start_time, end_time];
|
this.time_loading = [start_time, end_time];
|
||||||
let result;
|
let result;
|
||||||
if (this.hash == '#@') {
|
if (this.hash == '#@') {
|
||||||
@ -59,12 +60,12 @@ class TfTabNewsFeedElement extends LitElement {
|
|||||||
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 20)
|
||||||
SELECT 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
|
||||||
JOIN messages ON messages_refs.message = messages.id
|
JOIN messages ON messages_refs.message = messages.id
|
||||||
UNION
|
UNION
|
||||||
SELECT * FROM mentions
|
SELECT TRUE AS is_primary, * FROM mentions
|
||||||
`,
|
`,
|
||||||
[
|
[
|
||||||
'"' + this.whoami.replace('"', '""') + '"',
|
'"' + this.whoami.replace('"', '""') + '"',
|
||||||
@ -85,23 +86,23 @@ class TfTabNewsFeedElement extends LitElement {
|
|||||||
WHERE ?2 IS NULL OR (mine.timestamp >= 2 AND mine.timestamp < ?3)
|
WHERE ?2 IS NULL OR (mine.timestamp >= 2 AND mine.timestamp < ?3)
|
||||||
ORDER BY sequence DESC LIMIT 20
|
ORDER BY sequence DESC LIMIT 20
|
||||||
)
|
)
|
||||||
SELECT 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
|
||||||
JOIN messages_refs ON selected.id = messages_refs.ref
|
JOIN messages_refs ON selected.id = messages_refs.ref
|
||||||
JOIN messages ON messages_refs.message = messages.id
|
JOIN messages ON messages_refs.message = messages.id
|
||||||
UNION
|
UNION
|
||||||
SELECT * 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]
|
||||||
);
|
);
|
||||||
} else if (this.hash.startsWith('#%')) {
|
} else if (this.hash.startsWith('#%')) {
|
||||||
result = await tfrpc.rpc.query(
|
result = await tfrpc.rpc.query(
|
||||||
`
|
`
|
||||||
SELECT id, previous, author, sequence, timestamp, hash, json(content) AS content, signature
|
SELECT TRUE AS is_primary, id, previous, author, sequence, timestamp, hash, json(content) AS content, signature
|
||||||
FROM messages
|
FROM messages
|
||||||
WHERE messages.id = ?1
|
WHERE messages.id = ?1
|
||||||
UNION
|
UNION
|
||||||
SELECT id, previous, author, sequence, timestamp, hash, json(content) AS content, signature
|
SELECT FALSE AS is_primary, id, previous, author, sequence, timestamp, hash, json(content) AS content, signature
|
||||||
FROM messages JOIN messages_refs
|
FROM messages JOIN messages_refs
|
||||||
ON messages.id = messages_refs.message
|
ON messages.id = messages_refs.message
|
||||||
WHERE messages_refs.ref = ?1
|
WHERE messages_refs.ref = ?1
|
||||||
@ -130,17 +131,17 @@ class TfTabNewsFeedElement extends LitElement {
|
|||||||
news AS (SELECT * FROM all_news
|
news AS (SELECT * 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 20)
|
||||||
SELECT 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 news
|
FROM news
|
||||||
JOIN messages_refs ON news.id = messages_refs.ref
|
JOIN messages_refs ON news.id = messages_refs.ref
|
||||||
JOIN messages ON messages_refs.message = messages.id
|
JOIN messages ON messages_refs.message = messages.id
|
||||||
UNION
|
UNION
|
||||||
SELECT 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 news
|
FROM news
|
||||||
JOIN messages_refs ON news.id = messages_refs.message
|
JOIN messages_refs ON news.id = messages_refs.message
|
||||||
JOIN messages ON messages_refs.ref = messages.id
|
JOIN messages ON messages_refs.ref = messages.id
|
||||||
UNION
|
UNION
|
||||||
SELECT news.* FROM news
|
SELECT TRUE AS is_primary, news.* FROM news
|
||||||
`,
|
`,
|
||||||
[
|
[
|
||||||
JSON.stringify(this.following.slice(i, i + k_following_limit)),
|
JSON.stringify(this.following.slice(i, i + k_following_limit)),
|
||||||
@ -156,7 +157,7 @@ class TfTabNewsFeedElement extends LitElement {
|
|||||||
} else if (this.hash == '#🔐') {
|
} else if (this.hash == '#🔐') {
|
||||||
result = await tfrpc.rpc.query(
|
result = await tfrpc.rpc.query(
|
||||||
`
|
`
|
||||||
SELECT messages.rowid, messages.id, previous, author, sequence, timestamp, hash, json(content) AS content, signature
|
SELECT TRUE AS is_primary, messages.rowid, messages.id, previous, author, sequence, timestamp, hash, json(content) AS content, signature
|
||||||
FROM messages
|
FROM messages
|
||||||
JOIN json_each(?1) AS following ON messages.author = following.value
|
JOIN json_each(?1) AS following ON messages.author = following.value
|
||||||
WHERE
|
WHERE
|
||||||
@ -168,11 +169,7 @@ class TfTabNewsFeedElement extends LitElement {
|
|||||||
);
|
);
|
||||||
result = (await this.decrypt(result)).filter((x) => x.decrypted);
|
result = (await this.decrypt(result)).filter((x) => x.decrypted);
|
||||||
} else {
|
} else {
|
||||||
let promises = [];
|
result = await tfrpc.rpc.query(
|
||||||
const k_following_limit = 256;
|
|
||||||
for (let i = 0; i < this.following.length; i += k_following_limit) {
|
|
||||||
promises.push(
|
|
||||||
tfrpc.rpc.query(
|
|
||||||
`
|
`
|
||||||
WITH
|
WITH
|
||||||
all_news AS (
|
all_news AS (
|
||||||
@ -185,39 +182,37 @@ class TfTabNewsFeedElement extends LitElement {
|
|||||||
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 timestamp DESC LIMIT 20
|
ORDER BY timestamp DESC LIMIT 20
|
||||||
)
|
)
|
||||||
SELECT 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 news
|
FROM news
|
||||||
JOIN messages_refs ON news.id = messages_refs.ref
|
JOIN messages_refs ON news.id = messages_refs.ref
|
||||||
JOIN messages ON messages_refs.message = messages.id
|
JOIN messages ON messages_refs.message = messages.id
|
||||||
UNION
|
UNION
|
||||||
SELECT 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 news
|
FROM news
|
||||||
JOIN messages_refs ON news.id = messages_refs.message
|
JOIN messages_refs ON news.id = messages_refs.message
|
||||||
JOIN messages ON messages_refs.ref = messages.id
|
JOIN messages ON messages_refs.ref = messages.id
|
||||||
UNION
|
UNION
|
||||||
SELECT news.* FROM news
|
SELECT TRUE AS is_primary, news.* FROM news
|
||||||
`,
|
`,
|
||||||
[
|
[
|
||||||
JSON.stringify(this.following.slice(i, i + k_following_limit)),
|
JSON.stringify(this.following),
|
||||||
start_time,
|
start_time,
|
||||||
end_time,
|
end_time,
|
||||||
]
|
]
|
||||||
)
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
result = [].concat(...(await Promise.all(promises)));
|
|
||||||
}
|
|
||||||
this.time_loading = undefined;
|
this.time_loading = undefined;
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
update_time_range_from_messages(messages) {
|
update_time_range_from_messages(messages) {
|
||||||
|
let only_primary = messages.filter((x) => x.is_primary);
|
||||||
this.time_range = [
|
this.time_range = [
|
||||||
messages.reduce(
|
only_primary.reduce(
|
||||||
(accumulator, current) => Math.min(accumulator, current.timestamp),
|
(accumulator, current) => Math.min(accumulator, current.timestamp),
|
||||||
this.time_range[0]
|
this.time_range[0]
|
||||||
),
|
),
|
||||||
messages.reduce(
|
only_primary.reduce(
|
||||||
(accumulator, current) => Math.max(accumulator, current.timestamp),
|
(accumulator, current) => Math.max(accumulator, current.timestamp),
|
||||||
this.time_range[1]
|
this.time_range[1]
|
||||||
),
|
),
|
||||||
|
Loading…
x
Reference in New Issue
Block a user