commit be3e65f657f47642bb0abd34b8568c33928a9bcd
parent 245442748987b0ce68b0e79ca1f082ff1dbf336b
Author: William Casarin <jb55@jb55.com>
Date: Mon, 15 Aug 2022 15:42:12 -0700
don't process older contact events
I noticed sometimes damus would load older contact events and relays.
not good!
Signed-off-by: William Casarin <jb55@jb55.com>
Diffstat:
1 file changed, 20 insertions(+), 5 deletions(-)
diff --git a/damus/Models/HomeModel.swift b/damus/Models/HomeModel.swift
@@ -424,7 +424,7 @@ func add_contact_if_friend(contacts: Contacts, ev: NostrEvent) {
}
func load_our_contacts(contacts: Contacts, our_pubkey: String, ev: NostrEvent) {
- guard ev.pubkey == our_pubkey else {
+ guard should_process_our_contact_event(ev, contacts: contacts, our_pubkey: our_pubkey) else {
return
}
@@ -504,7 +504,7 @@ func process_metadata_event(image_cache: ImageCache, profiles: Profiles, ev: Nos
let tprof = TimestampedProfile(profile: profile, timestamp: ev.created_at)
profiles.add(id: ev.pubkey, profile: tprof)
-
+
// load pfps asap
let picture = tprof.profile.picture ?? robohash(ev.pubkey)
if let url = URL(string: picture) {
@@ -517,7 +517,7 @@ func process_metadata_event(image_cache: ImageCache, profiles: Profiles, ev: Nos
return res
}
}
-
+
notify(.profile_updated, ProfileUpdate(pubkey: ev.pubkey, profile: profile))
}
@@ -527,12 +527,27 @@ func robohash(_ pk: String) -> String {
func process_contact_event(pool: RelayPool, contacts: Contacts, pubkey: String, ev: NostrEvent) {
load_our_contacts(contacts: contacts, our_pubkey: pubkey, ev: ev)
- load_our_relays(our_pubkey: pubkey, pool: pool, ev: ev)
+ load_our_relays(our_pubkey: pubkey, contacts: contacts, pool: pool, ev: ev)
add_contact_if_friend(contacts: contacts, ev: ev)
}
-func load_our_relays(our_pubkey: String, pool: RelayPool, ev: NostrEvent) {
+func should_process_our_contact_event(_ ev: NostrEvent, contacts: Contacts, our_pubkey: String) -> Bool {
guard ev.pubkey == our_pubkey else {
+ return false
+ }
+
+ if let contacts_ev = contacts.event {
+ guard ev.created_at > contacts_ev.created_at else {
+ // this is an older contacts event, ignore
+ return false
+ }
+ }
+
+ return true
+}
+
+func load_our_relays(our_pubkey: String, contacts: Contacts, pool: RelayPool, ev: NostrEvent) {
+ guard should_process_our_contact_event(ev, contacts: contacts, our_pubkey: our_pubkey) else {
return
}