From 5bb05400596ef717370181ac2b7808469b7ac328 Mon Sep 17 00:00:00 2001 From: mplorentz Date: Thu, 30 May 2024 14:26:52 -0400 Subject: [PATCH 1/3] Clean up unecessary subscriptions in PagedRelaySubscription --- Nos/Service/Relay/PagedRelaySubscription.swift | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/Nos/Service/Relay/PagedRelaySubscription.swift b/Nos/Service/Relay/PagedRelaySubscription.swift index abc60bb48..319860a8f 100644 --- a/Nos/Service/Relay/PagedRelaySubscription.swift +++ b/Nos/Service/Relay/PagedRelaySubscription.swift @@ -12,10 +12,10 @@ class PagedRelaySubscription { private var subscriptionManager: RelaySubscriptionManager /// A set of subscriptions fetching older events. - private var pagedSubscriptionIDs = [RelaySubscription.ID]() + private var pagedSubscriptionIDs = Set() /// A set of subscriptions always listening for new events published after the `startDate`. - private var newEventsSubscriptionIDs = [RelaySubscription.ID]() + private var newEventsSubscriptionIDs = Set() init( startDate: Date, @@ -36,10 +36,10 @@ class PagedRelaySubscription { var newEventsFilter = filter newEventsFilter.since = startDate for relayAddress in relayAddresses { - newEventsSubscriptionIDs.append( + newEventsSubscriptionIDs.insert( await subscriptionManager.queueSubscription(with: filter, to: relayAddress) ) - pagedSubscriptionIDs.append( + pagedSubscriptionIDs.insert( await subscriptionManager.queueSubscription(with: pagedEventsFilter, to: relayAddress) ) } @@ -61,6 +61,7 @@ class PagedRelaySubscription { func loadMore() { Task { [self] in var newUntilDates = [URL: Date]() + var subscriptionsToRemove = [RelaySubscription]() for subscriptionID in pagedSubscriptionIDs { if let subscription = await subscriptionManager.subscription(from: subscriptionID), @@ -72,14 +73,19 @@ class PagedRelaySubscription { } newUntilDates[subscription.relayAddress] = newDate - await subscriptionManager.decrementSubscriptionCount(for: subscriptionID) + await subscriptionManager.decrementSubscriptionCount(for: subscription.id) + subscriptionsToRemove.append(subscription) } } + subscriptionsToRemove.forEach { subscription in + pagedSubscriptionIDs.remove(subscription.id) + } + for (relayAddress, until) in newUntilDates { var newEventsFilter = self.filter newEventsFilter.until = until - pagedSubscriptionIDs.append( + pagedSubscriptionIDs.insert( await subscriptionManager.queueSubscription(with: newEventsFilter, to: relayAddress) ) } From d6c9a0c8c81db0fd7cb83dcfbe0b37698903c8ca Mon Sep 17 00:00:00 2001 From: mplorentz Date: Thu, 30 May 2024 14:31:24 -0400 Subject: [PATCH 2/3] remove unnecessary change --- Nos/Service/Relay/PagedRelaySubscription.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Nos/Service/Relay/PagedRelaySubscription.swift b/Nos/Service/Relay/PagedRelaySubscription.swift index 319860a8f..f2b9ab815 100644 --- a/Nos/Service/Relay/PagedRelaySubscription.swift +++ b/Nos/Service/Relay/PagedRelaySubscription.swift @@ -73,7 +73,7 @@ class PagedRelaySubscription { } newUntilDates[subscription.relayAddress] = newDate - await subscriptionManager.decrementSubscriptionCount(for: subscription.id) + await subscriptionManager.decrementSubscriptionCount(for: subscriptionID) subscriptionsToRemove.append(subscription) } } From c477f9ab109798afde92dc06a4a8690b46bdbdff Mon Sep 17 00:00:00 2001 From: mplorentz Date: Mon, 3 Jun 2024 14:01:15 -0400 Subject: [PATCH 3/3] use a Set for subscriptionsToRemove --- Nos/Models/RelaySubscription.swift | 2 +- Nos/Service/Relay/PagedRelaySubscription.swift | 8 +++----- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/Nos/Models/RelaySubscription.swift b/Nos/Models/RelaySubscription.swift index 11e00acc2..2260e3137 100644 --- a/Nos/Models/RelaySubscription.swift +++ b/Nos/Models/RelaySubscription.swift @@ -2,7 +2,7 @@ import Foundation import Logger /// Models a request to a relay for Nostr Events. -struct RelaySubscription: Identifiable { +struct RelaySubscription: Identifiable, Hashable { var id: String diff --git a/Nos/Service/Relay/PagedRelaySubscription.swift b/Nos/Service/Relay/PagedRelaySubscription.swift index f2b9ab815..9f44cb34b 100644 --- a/Nos/Service/Relay/PagedRelaySubscription.swift +++ b/Nos/Service/Relay/PagedRelaySubscription.swift @@ -61,7 +61,7 @@ class PagedRelaySubscription { func loadMore() { Task { [self] in var newUntilDates = [URL: Date]() - var subscriptionsToRemove = [RelaySubscription]() + var subscriptionsToRemove = Set() for subscriptionID in pagedSubscriptionIDs { if let subscription = await subscriptionManager.subscription(from: subscriptionID), @@ -74,13 +74,11 @@ class PagedRelaySubscription { newUntilDates[subscription.relayAddress] = newDate await subscriptionManager.decrementSubscriptionCount(for: subscriptionID) - subscriptionsToRemove.append(subscription) + subscriptionsToRemove.insert(subscription.id) } } - subscriptionsToRemove.forEach { subscription in - pagedSubscriptionIDs.remove(subscription.id) - } + pagedSubscriptionIDs.subtract(subscriptionsToRemove) for (relayAddress, until) in newUntilDates { var newEventsFilter = self.filter