commit 54c895825086326410131e1fe80ef293e78368e2
parent e9f71ed07cb2c719c129416cd36e8b834bef7f30
Author: William Casarin <jb55@jb55.com>
Date:   Wed, 12 Apr 2023 18:22:16 -0700
Fix a few more hitches
Diffstat:
3 files changed, 51 insertions(+), 46 deletions(-)
diff --git a/damus/Models/HomeModel.swift b/damus/Models/HomeModel.swift
@@ -651,60 +651,65 @@ func print_filters(relay_id: String?, filters groups: [[NostrFilter]]) {
 }
 
 func process_metadata_event(our_pubkey: String, profiles: Profiles, ev: NostrEvent) {
-    guard let profile: Profile = decode_data(Data(ev.content.utf8)) else {
-        return
-    }
-    
-    if our_pubkey == ev.pubkey && (profile.deleted ?? false) {
-        DispatchQueue.main.async {
-            notify(.deleted_account, ())
-        }
-        return
-    }
-
-    var old_nip05: String? = nil
-    if let mprof = profiles.lookup_with_timestamp(id: ev.pubkey) {
-        old_nip05 = mprof.profile.nip05
-        if mprof.timestamp > ev.created_at {
-            // skip if we already have an newer profile
+    DispatchQueue.global(qos: .background).async {
+        guard let profile: Profile = decode_data(Data(ev.content.utf8)) else {
             return
         }
-    }
+        
+        DispatchQueue.main.async {
+            if our_pubkey == ev.pubkey && (profile.deleted ?? false) {
+                DispatchQueue.main.async {
+                    notify(.deleted_account, ())
+                }
+                return
+            }
 
-    let tprof = TimestampedProfile(profile: profile, timestamp: ev.created_at, event: ev)
-    profiles.add(id: ev.pubkey, profile: tprof)
-    
-    if let nip05 = profile.nip05, old_nip05 != profile.nip05 {
-        Task.detached(priority: .background) {
-            let validated = await validate_nip05(pubkey: ev.pubkey, nip05_str: nip05)
-            if validated != nil {
-                print("validated nip05 for '\(nip05)'")
+            var old_nip05: String? = nil
+            if let mprof = profiles.lookup_with_timestamp(id: ev.pubkey) {
+                old_nip05 = mprof.profile.nip05
+                if mprof.timestamp > ev.created_at {
+                    // skip if we already have an newer profile
+                    return
+                }
+            }
+
+            let tprof = TimestampedProfile(profile: profile, timestamp: ev.created_at, event: ev)
+            profiles.add(id: ev.pubkey, profile: tprof)
+            
+            if let nip05 = profile.nip05, old_nip05 != profile.nip05 {
+                Task.detached(priority: .background) {
+                    let validated = await validate_nip05(pubkey: ev.pubkey, nip05_str: nip05)
+                    if validated != nil {
+                        print("validated nip05 for '\(nip05)'")
+                    }
+                    
+                    DispatchQueue.main.async {
+                        profiles.validated[ev.pubkey] = validated
+                        profiles.nip05_pubkey[nip05] = ev.pubkey
+                        notify(.profile_updated, ProfileUpdate(pubkey: ev.pubkey, profile: profile))
+                    }
+                }
             }
             
-            DispatchQueue.main.async {
-                profiles.validated[ev.pubkey] = validated
-                profiles.nip05_pubkey[nip05] = ev.pubkey
-                notify(.profile_updated, ProfileUpdate(pubkey: ev.pubkey, profile: profile))
+            // load pfps asap
+            let picture = tprof.profile.picture ?? robohash(ev.pubkey)
+            if URL(string: picture) != nil {
+                DispatchQueue.main.async {
+                    notify(.profile_updated, ProfileUpdate(pubkey: ev.pubkey, profile: profile))
+                }
             }
-        }
-    }
-    
-    // load pfps asap
-    let picture = tprof.profile.picture ?? robohash(ev.pubkey)
-    if URL(string: picture) != nil {
-        DispatchQueue.main.async {
-            notify(.profile_updated, ProfileUpdate(pubkey: ev.pubkey, profile: profile))
-        }
-    }
-    
-    let banner = tprof.profile.banner ?? ""
-    if URL(string: banner) != nil {
-        DispatchQueue.main.async {
+            
+            let banner = tprof.profile.banner ?? ""
+            if URL(string: banner) != nil {
+                DispatchQueue.main.async {
+                    notify(.profile_updated, ProfileUpdate(pubkey: ev.pubkey, profile: profile))
+                }
+            }
+            
             notify(.profile_updated, ProfileUpdate(pubkey: ev.pubkey, profile: profile))
         }
     }
     
-    notify(.profile_updated, ProfileUpdate(pubkey: ev.pubkey, profile: profile))
 }
 
 func robohash(_ pk: String) -> String {
diff --git a/damus/Nostr/NostrEvent.swift b/damus/Nostr/NostrEvent.swift
@@ -82,7 +82,7 @@ class NostrEvent: Codable, Identifiable, CustomStringConvertible, Equatable, Has
     }
     
     var too_big: Bool {
-        return self.content.count > 16000
+        return self.content.underestimatedCount > 16000
     }
     
     var should_show_event: Bool {
diff --git a/damus/Nostr/RelayConnection.swift b/damus/Nostr/RelayConnection.swift
@@ -89,7 +89,7 @@ final class RelayConnection: WebSocketDelegate {
             self.isConnected = false
 
         case .text(let txt):
-            if txt.count > 2000 {
+            if txt.underestimatedCount > 2000 {
                 DispatchQueue.global(qos: .default).async {
                     if let ev = decode_nostr_event(txt: txt) {
                         DispatchQueue.main.async {