diff --git a/damus/Core/Nostr/RelayPool.swift b/damus/Core/Nostr/RelayPool.swift index be9e1be9..33aae481 100644 --- a/damus/Core/Nostr/RelayPool.swift +++ b/damus/Core/Nostr/RelayPool.swift @@ -99,6 +99,7 @@ class RelayPool { } } + @MainActor func register_handler(sub_id: String, handler: @escaping (RelayURL, NostrConnectionEvent) -> ()) { for handler in handlers { // don't add duplicate handlers @@ -201,8 +202,10 @@ class RelayPool { } func subscribe(sub_id: String, filters: [NostrFilter], handler: @escaping (RelayURL, NostrConnectionEvent) -> (), to: [RelayURL]? = nil) { - register_handler(sub_id: sub_id, handler: handler) - send(.subscribe(.init(filters: filters, sub_id: sub_id)), to: to) + Task { + await register_handler(sub_id: sub_id, handler: handler) + send(.subscribe(.init(filters: filters, sub_id: sub_id)), to: to) + } } /// Subscribes to data from the `RelayPool` based on a filter and a list of desired relays. @@ -264,8 +267,10 @@ class RelayPool { } func subscribe_to(sub_id: String, filters: [NostrFilter], to: [RelayURL]?, handler: @escaping (RelayURL, NostrConnectionEvent) -> ()) { - register_handler(sub_id: sub_id, handler: handler) - send(.subscribe(.init(filters: filters, sub_id: sub_id)), to: to) + Task { + await register_handler(sub_id: sub_id, handler: handler) + send(.subscribe(.init(filters: filters, sub_id: sub_id)), to: to) + } } func count_queued(relay: RelayURL) -> Int { diff --git a/damus/Features/Posting/Models/PostBox.swift b/damus/Features/Posting/Models/PostBox.swift index 061b1ec0..0f84038c 100644 --- a/damus/Features/Posting/Models/PostBox.swift +++ b/damus/Features/Posting/Models/PostBox.swift @@ -60,7 +60,7 @@ class PostBox { init(pool: RelayPool) { self.pool = pool self.events = [:] - pool.register_handler(sub_id: "postbox", handler: handle_event) + Task { await pool.register_handler(sub_id: "postbox", handler: handle_event) } } // only works reliably on delay-sent events