diff --git a/damus/Core/Networking/NostrNetworkManager/SubscriptionManager.swift b/damus/Core/Networking/NostrNetworkManager/SubscriptionManager.swift index ca79def5..cbbef549 100644 --- a/damus/Core/Networking/NostrNetworkManager/SubscriptionManager.swift +++ b/damus/Core/Networking/NostrNetworkManager/SubscriptionManager.swift @@ -134,9 +134,14 @@ extension NostrNetworkManager { // This closure function issues (yields) an EOSE signal to the stream if all relevant conditions are met let yieldEOSEIfReady = { + let connectedToNetwork = self.pool.network_monitor.currentPath.status == .satisfied // In normal mode: Issuing EOSE requires EOSE from both NDB and the network, since they are all considered separate relays // In experimental local relay model mode: Issuing EOSE requires only EOSE from NDB, since that is the only relay that "matters" - let canIssueEOSE = self.experimentalLocalRelayModelSupport ? ndbEOSEIssued : ndbEOSEIssued && networkEOSEIssued + let canIssueEOSE = self.experimentalLocalRelayModelSupport ? + (ndbEOSEIssued) + : + (ndbEOSEIssued && (networkEOSEIssued || !connectedToNetwork)) + if canIssueEOSE { continuation.yield(.eose) } diff --git a/damus/Core/Nostr/RelayPool.swift b/damus/Core/Nostr/RelayPool.swift index c34a5e05..b15eece4 100644 --- a/damus/Core/Nostr/RelayPool.swift +++ b/damus/Core/Nostr/RelayPool.swift @@ -40,7 +40,7 @@ class RelayPool { var delegate: Delegate? private(set) var signal: SignalModel = SignalModel() - private let network_monitor = NWPathMonitor() + let network_monitor = NWPathMonitor() private let network_monitor_queue = DispatchQueue(label: "io.damus.network_monitor") private var last_network_status: NWPath.Status = .unsatisfied