threadv2: refactor handle_event logic
This commit is contained in:
@@ -84,6 +84,86 @@ struct BuildThreadV2View: View {
|
||||
return sub_id
|
||||
}
|
||||
|
||||
func handle_current_events(ev: NostrEvent) {
|
||||
if current_event != nil {
|
||||
return
|
||||
}
|
||||
|
||||
current_event = ev
|
||||
|
||||
thread = ThreadV2(
|
||||
parentEvents: [],
|
||||
current: current_event!,
|
||||
childEvents: []
|
||||
)
|
||||
|
||||
// Get parents
|
||||
parents_ids = current_event!.tags.enumerated().filter { (index, tag) in
|
||||
return tag.count >= 2 && tag[0] == "e" && !current_event!.content.contains("#[\(index)]")
|
||||
}.map { tag in
|
||||
return tag.1[1]
|
||||
}
|
||||
|
||||
print("ThreadV2View: Parents list: (\(parents_ids)")
|
||||
|
||||
if parents_ids.count > 0 {
|
||||
// Ask for parents
|
||||
let parents_events = NostrFilter(
|
||||
ids: parents_ids,
|
||||
limit: UInt32(parents_ids.count)
|
||||
)
|
||||
|
||||
let uuid = subscribe(filters: [parents_events])
|
||||
parents_events_uuids.append(uuid)
|
||||
print("ThreadV2View: Ask for parents (\(uuid)) (\(parents_events))")
|
||||
}
|
||||
|
||||
// Ask for children
|
||||
let childs_events = NostrFilter(
|
||||
kinds: [1],
|
||||
referenced_ids: [self.event_id],
|
||||
limit: 50
|
||||
)
|
||||
childs_events_uuid = subscribe(filters: [childs_events])
|
||||
print("ThreadV2View: Ask for children (\(childs_events) (\(childs_events_uuid))")
|
||||
}
|
||||
|
||||
func handle_parent_events(sub_id: String, nostr_event: NostrEvent) {
|
||||
|
||||
// We are filtering this later
|
||||
thread!.parentEvents.append(nostr_event)
|
||||
|
||||
// Get parents of parents
|
||||
let local_parents_ids = nostr_event.tags.enumerated().filter { (index, tag) in
|
||||
return tag.count >= 2 && tag[0] == "e" && !nostr_event.content.contains("#[\(index)]")
|
||||
}.map { tag in
|
||||
return tag.1[1]
|
||||
}.filter { tag_id in
|
||||
return !parents_ids.contains(tag_id)
|
||||
}
|
||||
|
||||
print("ThreadV2View: Sub Parents list: (\(local_parents_ids))")
|
||||
|
||||
// Expand new parents id
|
||||
parents_ids.append(contentsOf: local_parents_ids)
|
||||
|
||||
if local_parents_ids.count > 0 {
|
||||
// Ask for parents
|
||||
let parents_events = NostrFilter(
|
||||
ids: local_parents_ids,
|
||||
limit: UInt32(local_parents_ids.count)
|
||||
)
|
||||
let uuid = subscribe(filters: [parents_events])
|
||||
parents_events_uuids.append(uuid)
|
||||
print("ThreadV2View: Ask for sub_parents (\(local_parents_ids)) \(uuid)")
|
||||
}
|
||||
|
||||
thread!.clean()
|
||||
unsubscribe(sub_id)
|
||||
return
|
||||
|
||||
}
|
||||
|
||||
func handle_event(relay_id: String, ev: NostrConnectionEvent) {
|
||||
guard case .nostr_event(let nostr_response) = ev else {
|
||||
return
|
||||
@@ -95,82 +175,12 @@ struct BuildThreadV2View: View {
|
||||
|
||||
// Is current event
|
||||
if id == current_events_uuid {
|
||||
if current_event != nil {
|
||||
return
|
||||
}
|
||||
|
||||
current_event = nostr_event
|
||||
|
||||
thread = ThreadV2(
|
||||
parentEvents: [],
|
||||
current: current_event!,
|
||||
childEvents: []
|
||||
)
|
||||
|
||||
// Get parents
|
||||
parents_ids = current_event!.tags.enumerated().filter { (index, tag) in
|
||||
return tag.count >= 2 && tag[0] == "e" && !current_event!.content.contains("#[\(index)]")
|
||||
}.map { tag in
|
||||
return tag.1[1]
|
||||
}
|
||||
|
||||
print("ThreadV2View: Parents list: (\(parents_ids)")
|
||||
|
||||
if parents_ids.count > 0 {
|
||||
// Ask for parents
|
||||
let parents_events = NostrFilter(
|
||||
ids: parents_ids,
|
||||
limit: UInt32(parents_ids.count)
|
||||
)
|
||||
|
||||
let uuid = subscribe(filters: [parents_events])
|
||||
parents_events_uuids.append(uuid)
|
||||
print("ThreadV2View: Ask for parents (\(uuid)) (\(parents_events))")
|
||||
}
|
||||
|
||||
// Ask for children
|
||||
let childs_events = NostrFilter(
|
||||
kinds: [1],
|
||||
referenced_ids: [self.event_id],
|
||||
limit: 50
|
||||
)
|
||||
childs_events_uuid = subscribe(filters: [childs_events])
|
||||
print("ThreadV2View: Ask for children (\(childs_events) (\(childs_events_uuid))")
|
||||
|
||||
handle_current_events(ev: nostr_event)
|
||||
return
|
||||
}
|
||||
|
||||
if parents_events_uuids.contains(id) {
|
||||
// We are filtering this later
|
||||
thread!.parentEvents.append(nostr_event)
|
||||
|
||||
// Get parents of parents
|
||||
let local_parents_ids = nostr_event.tags.enumerated().filter { (index, tag) in
|
||||
return tag.count >= 2 && tag[0] == "e" && !nostr_event.content.contains("#[\(index)]")
|
||||
}.map { tag in
|
||||
return tag.1[1]
|
||||
}.filter { tag_id in
|
||||
return !parents_ids.contains(tag_id)
|
||||
}
|
||||
|
||||
print("ThreadV2View: Sub Parents list: (\(local_parents_ids))")
|
||||
|
||||
// Expand new parents id
|
||||
parents_ids.append(contentsOf: local_parents_ids)
|
||||
|
||||
if local_parents_ids.count > 0 {
|
||||
// Ask for parents
|
||||
let parents_events = NostrFilter(
|
||||
ids: local_parents_ids,
|
||||
limit: UInt32(local_parents_ids.count)
|
||||
)
|
||||
let uuid = subscribe(filters: [parents_events])
|
||||
parents_events_uuids.append(uuid)
|
||||
print("ThreadV2View: Ask for sub_parents (\(local_parents_ids)) \(uuid)")
|
||||
}
|
||||
|
||||
thread!.clean()
|
||||
unsubscribe(id)
|
||||
handle_parent_events(sub_id: id, nostr_event: nostr_event)
|
||||
return
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user