Browse Source

fix(thread): show sub replies that don't tag root

some clients such as primal do not inherit the e 'root'
from the event they are replying to.
we therefore need to subscribe to all replies individually
to ensure we have the entire thread
master
DanConwayDev 2 years ago
parent
commit
041860438b
No known key found for this signature in database
GPG Key ID: 68E15486D73F75E1
  1. 23
      src/lib/stores/Issue.ts
  2. 51
      src/lib/stores/Proposal.ts

23
src/lib/stores/Issue.ts

@ -30,6 +30,8 @@ let sub: NDKSubscription
let sub_replies: NDKSubscription let sub_replies: NDKSubscription
const sub_replies_to_replies: NDKSubscription[] = []
export const ensureIssueFull = (repo_identifier: string, issue_id: string) => { export const ensureIssueFull = (repo_identifier: string, issue_id: string) => {
if (selected_issue_id == issue_id) return if (selected_issue_id == issue_id) return
if (issue_id == '') { if (issue_id == '') {
@ -40,6 +42,7 @@ export const ensureIssueFull = (repo_identifier: string, issue_id: string) => {
if (sub) sub.stop() if (sub) sub.stop()
if (sub_replies) sub_replies.stop() if (sub_replies) sub_replies.stop()
sub_replies_to_replies.forEach((sub) => sub.stop())
selected_issue_repo_id = repo_identifier selected_issue_repo_id = repo_identifier
selected_issue_id = issue_id selected_issue_id = issue_id
@ -170,7 +173,25 @@ export const ensureIssueFull = (repo_identifier: string, issue_id: string) => {
}) })
} }
selected_issue_replies.update((replies) => { selected_issue_replies.update((replies) => {
return [...replies, event] if (!replies.some((e) => e.id === event.id)) {
const sub_replies_to_reply = ndk.subscribe(
{
'#e': [event.id],
},
{
groupable: true,
groupableDelay: 300,
closeOnEose: false,
},
NDKRelaySet.fromRelayUrls(relays_to_use, ndk)
)
sub_replies_to_reply.on('event', (event: NDKEvent) => {
process_replies(event)
})
sub_replies_to_replies.push(sub_replies_to_reply)
return [...replies, event]
}
return [...replies]
}) })
} }

51
src/lib/stores/Proposal.ts

@ -30,9 +30,7 @@ let sub: NDKSubscription
let sub_replies: NDKSubscription let sub_replies: NDKSubscription
const sub_revisions: NDKSubscription[] = [] const sub_replies_to_replies: NDKSubscription[] = []
let revision_ids_queried: string[]
export const ensureProposalFull = ( export const ensureProposalFull = (
repo_identifier: string, repo_identifier: string,
@ -47,13 +45,12 @@ export const ensureProposalFull = (
if (sub) sub.stop() if (sub) sub.stop()
if (sub_replies) sub_replies.stop() if (sub_replies) sub_replies.stop()
sub_revisions.forEach((sub) => sub.stop()) sub_replies_to_replies.forEach((sub) => sub.stop())
selected_proposal_repo_id = repo_identifier selected_proposal_repo_id = repo_identifier
selected_proposal_id = proposal_id selected_proposal_id = proposal_id
selected_proposal_status_date = 0 selected_proposal_status_date = 0
selected_proposal_replies.set([]) selected_proposal_replies.set([])
revision_ids_queried = []
selected_proposal_full.set({ selected_proposal_full.set({
...full_defaults, ...full_defaults,
@ -185,32 +182,26 @@ export const ensureProposalFull = (
}) })
} }
selected_proposal_replies.update((replies) => { selected_proposal_replies.update((replies) => {
return [...replies, event] if (!replies.some((e) => e.id === event.id)) {
const sub_replies_to_reply = ndk.subscribe(
{
'#e': [event.id],
},
{
groupable: true,
groupableDelay: 300,
closeOnEose: false,
},
NDKRelaySet.fromRelayUrls(relays_to_use, ndk)
)
sub_replies_to_reply.on('event', (event: NDKEvent) => {
process_replies(event)
})
sub_replies_to_replies.push(sub_replies_to_reply)
return [...replies, event]
}
return [...replies]
}) })
if (
event.tags.some((t) => t.length > 1 && t[1] === 'revision-root') &&
!revision_ids_queried.includes(event.id)
) {
// prevents an infinate loop of querying the same revision
revision_ids_queried.push(event.id)
const sub_revision_replies = ndk.subscribe(
{
'#e': [event.id],
limit: 100,
},
{
groupable: true,
// default 100
groupableDelay: 200,
closeOnEose: false,
},
NDKRelaySet.fromRelayUrls(relays_to_use, ndk)
)
sub_revision_replies.on('event', (event: NDKEvent) => {
process_replies(event)
})
sub_revisions.push(sub_revision_replies)
}
} }
sub_replies.on('event', (event: NDKEvent) => { sub_replies.on('event', (event: NDKEvent) => {

Loading…
Cancel
Save