From a453f4461ddecca158adcb7b64ce7b265f9e730b Mon Sep 17 00:00:00 2001 From: Bartosz Rozwarski Date: Mon, 6 Feb 2023 16:07:12 +0100 Subject: [PATCH 01/10] add push messages viper files --- Example/ExampleApp.xcodeproj/project.pbxproj | 28 +++++++++++++++ .../PushMessages/PushMessagesInteractor.swift | 6 ++++ .../PushMessages/PushMessagesModule.swift | 18 ++++++++++ .../PushMessages/PushMessagesPresenter.swift | 36 +++++++++++++++++++ .../PushMessages/PushMessagesRouter.swift | 12 +++++++ .../PushMessages/PushMessagesView.swift | 18 ++++++++++ 6 files changed, 118 insertions(+) create mode 100644 Example/WalletApp/PresentationLayer/Wallet/PushMessages/PushMessagesInteractor.swift create mode 100644 Example/WalletApp/PresentationLayer/Wallet/PushMessages/PushMessagesModule.swift create mode 100644 Example/WalletApp/PresentationLayer/Wallet/PushMessages/PushMessagesPresenter.swift create mode 100644 Example/WalletApp/PresentationLayer/Wallet/PushMessages/PushMessagesRouter.swift create mode 100644 Example/WalletApp/PresentationLayer/Wallet/PushMessages/PushMessagesView.swift diff --git a/Example/ExampleApp.xcodeproj/project.pbxproj b/Example/ExampleApp.xcodeproj/project.pbxproj index c316bb1ad..79fa7e25c 100644 --- a/Example/ExampleApp.xcodeproj/project.pbxproj +++ b/Example/ExampleApp.xcodeproj/project.pbxproj @@ -55,6 +55,11 @@ 84B7677D2954554A00E92316 /* PushDecryptionService.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = 84B767762954554A00E92316 /* PushDecryptionService.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; 84B76789295494D500E92316 /* WalletConnectPush in Frameworks */ = {isa = PBXBuildFile; productRef = 84B76788295494D500E92316 /* WalletConnectPush */; }; 84B8154E2991099000FAD54E /* BuildConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84B8154D2991099000FAD54E /* BuildConfiguration.swift */; }; + 84B815542991217900FAD54E /* PushMessagesModule.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84B8154F2991217900FAD54E /* PushMessagesModule.swift */; }; + 84B815552991217900FAD54E /* PushMessagesPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84B815502991217900FAD54E /* PushMessagesPresenter.swift */; }; + 84B815562991217900FAD54E /* PushMessagesRouter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84B815512991217900FAD54E /* PushMessagesRouter.swift */; }; + 84B815572991217900FAD54E /* PushMessagesInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84B815522991217900FAD54E /* PushMessagesInteractor.swift */; }; + 84B815582991217900FAD54E /* PushMessagesView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84B815532991217900FAD54E /* PushMessagesView.swift */; }; 84CE641F27981DED00142511 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84CE641E27981DED00142511 /* AppDelegate.swift */; }; 84CE642127981DED00142511 /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84CE642027981DED00142511 /* SceneDelegate.swift */; }; 84CE642827981DF000142511 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 84CE642727981DF000142511 /* Assets.xcassets */; }; @@ -398,6 +403,11 @@ 84B767782954554A00E92316 /* NotificationService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationService.swift; sourceTree = ""; }; 84B7677A2954554A00E92316 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 84B8154D2991099000FAD54E /* BuildConfiguration.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BuildConfiguration.swift; sourceTree = ""; }; + 84B8154F2991217900FAD54E /* PushMessagesModule.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PushMessagesModule.swift; sourceTree = ""; }; + 84B815502991217900FAD54E /* PushMessagesPresenter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PushMessagesPresenter.swift; sourceTree = ""; }; + 84B815512991217900FAD54E /* PushMessagesRouter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PushMessagesRouter.swift; sourceTree = ""; }; + 84B815522991217900FAD54E /* PushMessagesInteractor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PushMessagesInteractor.swift; sourceTree = ""; }; + 84B815532991217900FAD54E /* PushMessagesView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PushMessagesView.swift; sourceTree = ""; }; 84CE641C27981DED00142511 /* DApp.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = DApp.app; sourceTree = BUILT_PRODUCTS_DIR; }; 84CE641E27981DED00142511 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 84CE642027981DED00142511 /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = ""; }; @@ -887,6 +897,18 @@ path = PushDecryptionService; sourceTree = ""; }; + 84B815592991217F00FAD54E /* PushMessages */ = { + isa = PBXGroup; + children = ( + 84B8154F2991217900FAD54E /* PushMessagesModule.swift */, + 84B815502991217900FAD54E /* PushMessagesPresenter.swift */, + 84B815512991217900FAD54E /* PushMessagesRouter.swift */, + 84B815522991217900FAD54E /* PushMessagesInteractor.swift */, + 84B815532991217900FAD54E /* PushMessagesView.swift */, + ); + path = PushMessages; + sourceTree = ""; + }; 84CE641D27981DED00142511 /* DApp */ = { isa = PBXGroup; children = ( @@ -1542,6 +1564,7 @@ C56EE22A293F5668004840D1 /* Wallet */, 84E6B8592981625A00428BAF /* PushRequest */, 847BD1E9298A807000076C90 /* Notifications */, + 84B815592991217F00FAD54E /* PushMessages */, ); path = Wallet; sourceTree = ""; @@ -2259,8 +2282,10 @@ C56EE240293F566D004840D1 /* ScanQRView.swift in Sources */, C56EE250293F566D004840D1 /* ScanTargetView.swift in Sources */, C56EE28F293F5757004840D1 /* MigrationConfigurator.swift in Sources */, + 84B815552991217900FAD54E /* PushMessagesPresenter.swift in Sources */, 847BD1DD2989494F00076C90 /* TabPage.swift in Sources */, C55D348B295DD8CA0004314A /* PasteUriRouter.swift in Sources */, + 84B815572991217900FAD54E /* PushMessagesInteractor.swift in Sources */, 847BD1E4298A806800076C90 /* NotificationsModule.swift in Sources */, C55D348C295DD8CA0004314A /* PasteUriInteractor.swift in Sources */, 847BD1D92989492500076C90 /* MainPresenter.swift in Sources */, @@ -2290,6 +2315,7 @@ 847BD1D62989492500076C90 /* MainViewController.swift in Sources */, C5B2F6FA29705293000DBA0E /* SessionRequestInteractor.swift in Sources */, C55D34AE2965FB750004314A /* SessionProposalModule.swift in Sources */, + 84B815582991217900FAD54E /* PushMessagesView.swift in Sources */, C55D34B02965FB750004314A /* SessionProposalRouter.swift in Sources */, C55D3495295DFA750004314A /* WelcomeRouter.swift in Sources */, C5B2F6F729705293000DBA0E /* SessionRequestRouter.swift in Sources */, @@ -2297,11 +2323,13 @@ C55D34B22965FB750004314A /* SessionProposalView.swift in Sources */, C56EE248293F566D004840D1 /* ScanQR.swift in Sources */, 847BD1EB298A87AB00076C90 /* SubscriptionsViewModel.swift in Sources */, + 84B815542991217900FAD54E /* PushMessagesModule.swift in Sources */, C55D349B2965BC2F0004314A /* TagsView.swift in Sources */, 84B8154E2991099000FAD54E /* BuildConfiguration.swift in Sources */, C56EE289293F5757004840D1 /* Application.swift in Sources */, C56EE273293F56D7004840D1 /* UIColor.swift in Sources */, C5F32A322954816C00A6476E /* ConnectionDetailsPresenter.swift in Sources */, + 84B815562991217900FAD54E /* PushMessagesRouter.swift in Sources */, C56EE246293F566D004840D1 /* ScanRouter.swift in Sources */, C55D349D2965F8D40004314A /* Proposal.swift in Sources */, C55D3481295DD7140004314A /* AuthRequestRouter.swift in Sources */, diff --git a/Example/WalletApp/PresentationLayer/Wallet/PushMessages/PushMessagesInteractor.swift b/Example/WalletApp/PresentationLayer/Wallet/PushMessages/PushMessagesInteractor.swift new file mode 100644 index 000000000..b815ac464 --- /dev/null +++ b/Example/WalletApp/PresentationLayer/Wallet/PushMessages/PushMessagesInteractor.swift @@ -0,0 +1,6 @@ +import WalletConnectPush + +final class PushMessagesInteractor { + + let subscription: PushSubscription +} diff --git a/Example/WalletApp/PresentationLayer/Wallet/PushMessages/PushMessagesModule.swift b/Example/WalletApp/PresentationLayer/Wallet/PushMessages/PushMessagesModule.swift new file mode 100644 index 000000000..c02867032 --- /dev/null +++ b/Example/WalletApp/PresentationLayer/Wallet/PushMessages/PushMessagesModule.swift @@ -0,0 +1,18 @@ +import SwiftUI + +final class PushMessagesModule { + + @discardableResult + static func create(app: Application) -> UIViewController { + let router = PushMessagesRouter(app: app) + let interactor = PushMessagesInteractor() + let presenter = PushMessagesPresenter(interactor: interactor, router: router) + let view = PushMessagesView().environmentObject(presenter) + let viewController = SceneViewController(viewModel: presenter, content: view) + + router.viewController = viewController + + return viewController + } + +} diff --git a/Example/WalletApp/PresentationLayer/Wallet/PushMessages/PushMessagesPresenter.swift b/Example/WalletApp/PresentationLayer/Wallet/PushMessages/PushMessagesPresenter.swift new file mode 100644 index 000000000..fec5b02da --- /dev/null +++ b/Example/WalletApp/PresentationLayer/Wallet/PushMessages/PushMessagesPresenter.swift @@ -0,0 +1,36 @@ +import UIKit +import Combine + +final class PushMessagesPresenter: ObservableObject { + + private let interactor: PushMessagesInteractor + private let router: PushMessagesRouter + private var disposeBag = Set() + + init(interactor: PushMessagesInteractor, router: PushMessagesRouter) { + defer { setupInitialState() } + self.interactor = interactor + self.router = router + } +} + +// MARK: SceneViewModel + +extension PushMessagesPresenter: SceneViewModel { + var sceneTitle: String? { + return interactor.subscriptionProvider + } + + var largeTitleDisplayMode: UINavigationItem.LargeTitleDisplayMode { + return .always + } +} + +// MARK: Privates + +private extension PushMessagesPresenter { + + func setupInitialState() { + + } +} diff --git a/Example/WalletApp/PresentationLayer/Wallet/PushMessages/PushMessagesRouter.swift b/Example/WalletApp/PresentationLayer/Wallet/PushMessages/PushMessagesRouter.swift new file mode 100644 index 000000000..0dd264603 --- /dev/null +++ b/Example/WalletApp/PresentationLayer/Wallet/PushMessages/PushMessagesRouter.swift @@ -0,0 +1,12 @@ +import UIKit + +final class PushMessagesRouter { + + weak var viewController: UIViewController! + + private let app: Application + + init(app: Application) { + self.app = app + } +} diff --git a/Example/WalletApp/PresentationLayer/Wallet/PushMessages/PushMessagesView.swift b/Example/WalletApp/PresentationLayer/Wallet/PushMessages/PushMessagesView.swift new file mode 100644 index 000000000..2f8b7635d --- /dev/null +++ b/Example/WalletApp/PresentationLayer/Wallet/PushMessages/PushMessagesView.swift @@ -0,0 +1,18 @@ +import SwiftUI + +struct PushMessagesView: View { + + @EnvironmentObject var presenter: PushMessagesPresenter + + var body: some View { + Text("PushMessages module") + } +} + +#if DEBUG +struct PushMessagesView_Previews: PreviewProvider { + static var previews: some View { + PushMessagesView() + } +} +#endif From ce97af032a040c2f1c9d12673645f5e13f031c73 Mon Sep 17 00:00:00 2001 From: Bartosz Rozwarski Date: Tue, 7 Feb 2023 16:08:02 +0100 Subject: [PATCH 02/10] update notification router --- .../Wallet/Notifications/NotificationsRouter.swift | 4 +++- .../Wallet/PushMessages/PushMessagesInteractor.swift | 3 +++ .../Wallet/PushMessages/PushMessagesModule.swift | 5 +++-- .../Wallet/PushMessages/PushMessagesPresenter.swift | 2 +- 4 files changed, 10 insertions(+), 4 deletions(-) diff --git a/Example/WalletApp/PresentationLayer/Wallet/Notifications/NotificationsRouter.swift b/Example/WalletApp/PresentationLayer/Wallet/Notifications/NotificationsRouter.swift index 61d90dcfc..a7ae810ff 100644 --- a/Example/WalletApp/PresentationLayer/Wallet/Notifications/NotificationsRouter.swift +++ b/Example/WalletApp/PresentationLayer/Wallet/Notifications/NotificationsRouter.swift @@ -12,6 +12,8 @@ final class NotificationsRouter { } func presentNotifications(subscription: WalletConnectPush.PushSubscription) { - + PushMessagesModule.create(app: app, subscription: subscription) + .wrapToNavigationController() + .present(from: viewController) } } diff --git a/Example/WalletApp/PresentationLayer/Wallet/PushMessages/PushMessagesInteractor.swift b/Example/WalletApp/PresentationLayer/Wallet/PushMessages/PushMessagesInteractor.swift index b815ac464..feb0dafc0 100644 --- a/Example/WalletApp/PresentationLayer/Wallet/PushMessages/PushMessagesInteractor.swift +++ b/Example/WalletApp/PresentationLayer/Wallet/PushMessages/PushMessagesInteractor.swift @@ -3,4 +3,7 @@ import WalletConnectPush final class PushMessagesInteractor { let subscription: PushSubscription + init(subscription: PushSubscription) { + self.subscription = subscription + } } diff --git a/Example/WalletApp/PresentationLayer/Wallet/PushMessages/PushMessagesModule.swift b/Example/WalletApp/PresentationLayer/Wallet/PushMessages/PushMessagesModule.swift index c02867032..e7b6cc382 100644 --- a/Example/WalletApp/PresentationLayer/Wallet/PushMessages/PushMessagesModule.swift +++ b/Example/WalletApp/PresentationLayer/Wallet/PushMessages/PushMessagesModule.swift @@ -1,11 +1,12 @@ import SwiftUI +import WalletConnectPush final class PushMessagesModule { @discardableResult - static func create(app: Application) -> UIViewController { + static func create(app: Application, subscription: PushSubscription) -> UIViewController { let router = PushMessagesRouter(app: app) - let interactor = PushMessagesInteractor() + let interactor = PushMessagesInteractor(subscription: subscription) let presenter = PushMessagesPresenter(interactor: interactor, router: router) let view = PushMessagesView().environmentObject(presenter) let viewController = SceneViewController(viewModel: presenter, content: view) diff --git a/Example/WalletApp/PresentationLayer/Wallet/PushMessages/PushMessagesPresenter.swift b/Example/WalletApp/PresentationLayer/Wallet/PushMessages/PushMessagesPresenter.swift index fec5b02da..75cfbad04 100644 --- a/Example/WalletApp/PresentationLayer/Wallet/PushMessages/PushMessagesPresenter.swift +++ b/Example/WalletApp/PresentationLayer/Wallet/PushMessages/PushMessagesPresenter.swift @@ -18,7 +18,7 @@ final class PushMessagesPresenter: ObservableObject { extension PushMessagesPresenter: SceneViewModel { var sceneTitle: String? { - return interactor.subscriptionProvider + return interactor.subscription.metadata.name } var largeTitleDisplayMode: UINavigationItem.LargeTitleDisplayMode { From 19f866a499c7ac3a23cffef83ca9a49a1bfd6b9f Mon Sep 17 00:00:00 2001 From: Bartosz Rozwarski Date: Wed, 8 Feb 2023 08:53:59 +0100 Subject: [PATCH 03/10] savepoint --- Example/ExampleApp.xcodeproj/project.pbxproj | 12 +++ .../NotificationsInteractor.swift | 4 +- .../NotificationsPresenter.swift | 7 +- .../Notifications/NotificationsRouter.swift | 3 +- .../Models/PushMessageViewModel.swift | 19 +++++ .../PushMessages/PushMessagesInteractor.swift | 10 +++ .../PushMessages/PushMessagesPresenter.swift | 7 +- .../PushMessages/PushMessagesView.swift | 78 ++++++++++++++++++- .../DeletePushSubscriptionService.swift | 5 +- .../Client/Wallet/PushMessagesProvider.swift | 2 + .../Wallet/PushSubscriptionsObserver.swift | 4 +- 11 files changed, 142 insertions(+), 9 deletions(-) create mode 100644 Example/WalletApp/PresentationLayer/Wallet/PushMessages/Models/PushMessageViewModel.swift diff --git a/Example/ExampleApp.xcodeproj/project.pbxproj b/Example/ExampleApp.xcodeproj/project.pbxproj index 79fa7e25c..7871a8a87 100644 --- a/Example/ExampleApp.xcodeproj/project.pbxproj +++ b/Example/ExampleApp.xcodeproj/project.pbxproj @@ -60,6 +60,7 @@ 84B815562991217900FAD54E /* PushMessagesRouter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84B815512991217900FAD54E /* PushMessagesRouter.swift */; }; 84B815572991217900FAD54E /* PushMessagesInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84B815522991217900FAD54E /* PushMessagesInteractor.swift */; }; 84B815582991217900FAD54E /* PushMessagesView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84B815532991217900FAD54E /* PushMessagesView.swift */; }; + 84B8155B2992A18D00FAD54E /* PushMessageViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84B8155A2992A18D00FAD54E /* PushMessageViewModel.swift */; }; 84CE641F27981DED00142511 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84CE641E27981DED00142511 /* AppDelegate.swift */; }; 84CE642127981DED00142511 /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84CE642027981DED00142511 /* SceneDelegate.swift */; }; 84CE642827981DF000142511 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 84CE642727981DF000142511 /* Assets.xcassets */; }; @@ -408,6 +409,7 @@ 84B815512991217900FAD54E /* PushMessagesRouter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PushMessagesRouter.swift; sourceTree = ""; }; 84B815522991217900FAD54E /* PushMessagesInteractor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PushMessagesInteractor.swift; sourceTree = ""; }; 84B815532991217900FAD54E /* PushMessagesView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PushMessagesView.swift; sourceTree = ""; }; + 84B8155A2992A18D00FAD54E /* PushMessageViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PushMessageViewModel.swift; sourceTree = ""; }; 84CE641C27981DED00142511 /* DApp.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = DApp.app; sourceTree = BUILT_PRODUCTS_DIR; }; 84CE641E27981DED00142511 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 84CE642027981DED00142511 /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = ""; }; @@ -905,10 +907,19 @@ 84B815512991217900FAD54E /* PushMessagesRouter.swift */, 84B815522991217900FAD54E /* PushMessagesInteractor.swift */, 84B815532991217900FAD54E /* PushMessagesView.swift */, + 84B8155C2992A19200FAD54E /* Models */, ); path = PushMessages; sourceTree = ""; }; + 84B8155C2992A19200FAD54E /* Models */ = { + isa = PBXGroup; + children = ( + 84B8155A2992A18D00FAD54E /* PushMessageViewModel.swift */, + ); + path = Models; + sourceTree = ""; + }; 84CE641D27981DED00142511 /* DApp */ = { isa = PBXGroup; children = ( @@ -2297,6 +2308,7 @@ C5F32A342954817600A6476E /* ConnectionDetailsView.swift in Sources */, C55D348A295DD8CA0004314A /* PasteUriPresenter.swift in Sources */, C56EE28E293F5757004840D1 /* ApplicationConfigurator.swift in Sources */, + 84B8155B2992A18D00FAD54E /* PushMessageViewModel.swift in Sources */, C55D347F295DD7140004314A /* AuthRequestModule.swift in Sources */, C56EE242293F566D004840D1 /* ScanPresenter.swift in Sources */, C56EE28B293F5757004840D1 /* SceneDelegate.swift in Sources */, diff --git a/Example/WalletApp/PresentationLayer/Wallet/Notifications/NotificationsInteractor.swift b/Example/WalletApp/PresentationLayer/Wallet/Notifications/NotificationsInteractor.swift index 48077e2a3..276b02d2b 100644 --- a/Example/WalletApp/PresentationLayer/Wallet/Notifications/NotificationsInteractor.swift +++ b/Example/WalletApp/PresentationLayer/Wallet/Notifications/NotificationsInteractor.swift @@ -8,7 +8,9 @@ final class NotificationsInteractor { } func getSubscriptions() -> [PushSubscription] { - Push.wallet.getActiveSubscriptions() + let subs = Push.wallet.getActiveSubscriptions() + print(subs) + return subs } func removeSubscription(_ subscription: PushSubscription) async { diff --git a/Example/WalletApp/PresentationLayer/Wallet/Notifications/NotificationsPresenter.swift b/Example/WalletApp/PresentationLayer/Wallet/Notifications/NotificationsPresenter.swift index 2a694bfe7..7dd0298b0 100644 --- a/Example/WalletApp/PresentationLayer/Wallet/Notifications/NotificationsPresenter.swift +++ b/Example/WalletApp/PresentationLayer/Wallet/Notifications/NotificationsPresenter.swift @@ -17,6 +17,7 @@ final class NotificationsPresenter: ObservableObject { } func didPress(_ subscription: SubscriptionsViewModel) { + print(subscription.id) router.presentNotifications(subscription: subscription.subscription) } @@ -49,7 +50,11 @@ private extension NotificationsPresenter { func setupSubscriptions() { self.subscriptions = interactor.getSubscriptions() - .map { SubscriptionsViewModel(subscription: $0) } + .map { + print($0) + return SubscriptionsViewModel(subscription: $0) + + } interactor.subscriptionsPublisher .receive(on: DispatchQueue.main) .sink { [weak self] pushSubscriptions in diff --git a/Example/WalletApp/PresentationLayer/Wallet/Notifications/NotificationsRouter.swift b/Example/WalletApp/PresentationLayer/Wallet/Notifications/NotificationsRouter.swift index a7ae810ff..1441d32ba 100644 --- a/Example/WalletApp/PresentationLayer/Wallet/Notifications/NotificationsRouter.swift +++ b/Example/WalletApp/PresentationLayer/Wallet/Notifications/NotificationsRouter.swift @@ -13,7 +13,6 @@ final class NotificationsRouter { func presentNotifications(subscription: WalletConnectPush.PushSubscription) { PushMessagesModule.create(app: app, subscription: subscription) - .wrapToNavigationController() - .present(from: viewController) + .push(from: viewController) } } diff --git a/Example/WalletApp/PresentationLayer/Wallet/PushMessages/Models/PushMessageViewModel.swift b/Example/WalletApp/PresentationLayer/Wallet/PushMessages/Models/PushMessageViewModel.swift new file mode 100644 index 000000000..49760ebdb --- /dev/null +++ b/Example/WalletApp/PresentationLayer/Wallet/PushMessages/Models/PushMessageViewModel.swift @@ -0,0 +1,19 @@ + +import Foundation +import WalletConnectPush + +struct PushMessageViewModel { + let pushMessage: WalletConnectPush.PushMessage + + var imageUrl: String { + return pushMessage.icon + } + + var title: String { + return pushMessage.title + } + + var subtitle: String { + return pushMessage.body + } +} diff --git a/Example/WalletApp/PresentationLayer/Wallet/PushMessages/PushMessagesInteractor.swift b/Example/WalletApp/PresentationLayer/Wallet/PushMessages/PushMessagesInteractor.swift index feb0dafc0..4bfda8377 100644 --- a/Example/WalletApp/PresentationLayer/Wallet/PushMessages/PushMessagesInteractor.swift +++ b/Example/WalletApp/PresentationLayer/Wallet/PushMessages/PushMessagesInteractor.swift @@ -1,9 +1,19 @@ import WalletConnectPush +import Combine final class PushMessagesInteractor { let subscription: PushSubscription +// var pushMessagesPublisher: AnyPublisher<[PushMessage], Never> { +// return Push.wallet.pushMessagesPublisher +// } + init(subscription: PushSubscription) { self.subscription = subscription } + + func getPushMessages() -> [PushMessage] { + print(subscription.topic) + return Push.wallet.getMessageHistory(topic: subscription.topic) + } } diff --git a/Example/WalletApp/PresentationLayer/Wallet/PushMessages/PushMessagesPresenter.swift b/Example/WalletApp/PresentationLayer/Wallet/PushMessages/PushMessagesPresenter.swift index 75cfbad04..d4940d17d 100644 --- a/Example/WalletApp/PresentationLayer/Wallet/PushMessages/PushMessagesPresenter.swift +++ b/Example/WalletApp/PresentationLayer/Wallet/PushMessages/PushMessagesPresenter.swift @@ -1,11 +1,13 @@ import UIKit import Combine +import WalletConnectPush final class PushMessagesPresenter: ObservableObject { private let interactor: PushMessagesInteractor private let router: PushMessagesRouter private var disposeBag = Set() + @Published var pushMessages: [PushMessageViewModel] = [] init(interactor: PushMessagesInteractor, router: PushMessagesRouter) { defer { setupInitialState() } @@ -31,6 +33,9 @@ extension PushMessagesPresenter: SceneViewModel { private extension PushMessagesPresenter { func setupInitialState() { - + self.pushMessages = interactor.getPushMessages().map({ pushMessage in + PushMessageViewModel(pushMessage: pushMessage) + }) } } + diff --git a/Example/WalletApp/PresentationLayer/Wallet/PushMessages/PushMessagesView.swift b/Example/WalletApp/PresentationLayer/Wallet/PushMessages/PushMessagesView.swift index 2f8b7635d..68a4bc6e8 100644 --- a/Example/WalletApp/PresentationLayer/Wallet/PushMessages/PushMessagesView.swift +++ b/Example/WalletApp/PresentationLayer/Wallet/PushMessages/PushMessagesView.swift @@ -5,7 +5,83 @@ struct PushMessagesView: View { @EnvironmentObject var presenter: PushMessagesPresenter var body: some View { - Text("PushMessages module") + ZStack { + Color.grey100 + .edgesIgnoringSafeArea(.all) + + VStack(alignment: .leading, spacing: 16) { + ZStack { + if presenter.pushMessages.isEmpty { + VStack(spacing: 10) { + Image(systemName: "bell.badge.fill") + .resizable() + .frame(width: 32, height: 32) + .aspectRatio(contentMode: .fit) + .foregroundColor(.grey50) + + Text("Notifications from connected apps will appear here. To enable notifications, visit the app in your browser and look for a \(Image(systemName: "bell.fill")) notifications toggle \(Image(systemName: "switch.2"))") + .foregroundColor(.grey50) + .font(.system(size: 15, weight: .regular, design: .rounded)) + .multilineTextAlignment(.center) + .lineSpacing(4) + } + .padding(20) + } + + VStack { + if !presenter.pushMessages.isEmpty { + List { + ForEach(presenter.pushMessages, id: \.title) { pm in + notificationView(pushMessage: pm) + .listRowSeparator(.hidden) + .listRowInsets(EdgeInsets(top: 0, leading: 0, bottom: 16, trailing: 0)) + } + .onDelete { indexSet in + Task(priority: .high) { + // await presenter.removeSubscribtion(at: indexSet) + } + } + } + .listStyle(PlainListStyle()) + } + } + } + } + .padding(.vertical, 20) + } + } + + + + private func notificationView(pushMessage: PushMessageViewModel) -> some View { + VStack { + HStack(spacing: 10) { + AsyncImage(url: URL(string: pushMessage.imageUrl)) { phase in + if let image = phase.image { + image + .resizable() + .frame(width: 60, height: 60) + .background(Color.black) + .cornerRadius(30, corners: .allCorners) + } else { + Color.black + .frame(width: 60, height: 60) + .cornerRadius(30, corners: .allCorners) + } + } + .padding(.leading, 20) + + VStack(alignment: .leading, spacing: 2) { + Text(pushMessage.title) + .foregroundColor(.grey8) + .font(.system(size: 20, weight: .semibold, design: .rounded)) + + Text(pushMessage.subtitle) + .foregroundColor(.grey50) + .font(.system(size: 13, weight: .medium, design: .rounded)) + } + } + } } } diff --git a/Sources/WalletConnectPush/Client/Common/DeletePushSubscriptionService.swift b/Sources/WalletConnectPush/Client/Common/DeletePushSubscriptionService.swift index cc4e07a23..bf0a775ea 100644 --- a/Sources/WalletConnectPush/Client/Common/DeletePushSubscriptionService.swift +++ b/Sources/WalletConnectPush/Client/Common/DeletePushSubscriptionService.swift @@ -27,12 +27,13 @@ class DeletePushSubscriptionService { let protocolMethod = PushDeleteProtocolMethod() let params = PushDeleteParams.userDisconnected logger.debug("Will delete push subscription for reason: message: \(params.message) code: \(params.code)") + pushSubscriptionStore.delete(forKey: topic) + let request = RPCRequest(method: protocolMethod.method, params: params) try await networkingInteractor.request(request, topic: topic, protocolMethod: protocolMethod) networkingInteractor.unsubscribe(topic: topic) - pushSubscriptionStore.delete(forKey: topic) - logger.debug("Subscription removed") + logger.debug("Subscription removed, topic: \(topic)") kms.deleteSymmetricKey(for: topic) } diff --git a/Sources/WalletConnectPush/Client/Wallet/PushMessagesProvider.swift b/Sources/WalletConnectPush/Client/Wallet/PushMessagesProvider.swift index 236fb0879..b635753d9 100644 --- a/Sources/WalletConnectPush/Client/Wallet/PushMessagesProvider.swift +++ b/Sources/WalletConnectPush/Client/Wallet/PushMessagesProvider.swift @@ -1,6 +1,7 @@ import Foundation import WalletConnectUtils +import Combine class PushMessagesProvider { private let history: RPCHistory @@ -12,4 +13,5 @@ class PushMessagesProvider { public func getMessageHistory(topic: String) -> [PushMessage] { history.getAll(of: PushMessage.self, topic: topic) } + } diff --git a/Sources/WalletConnectPush/Client/Wallet/PushSubscriptionsObserver.swift b/Sources/WalletConnectPush/Client/Wallet/PushSubscriptionsObserver.swift index ae1e026a5..f79e6fa1d 100644 --- a/Sources/WalletConnectPush/Client/Wallet/PushSubscriptionsObserver.swift +++ b/Sources/WalletConnectPush/Client/Wallet/PushSubscriptionsObserver.swift @@ -16,7 +16,9 @@ class PushSubscriptionsObserver { func setUpSubscription() { store.onStoreUpdate = { [unowned self] in - subscriptionsPublisherSubject.send(store.getAll()) + let subscriptions = store.getAll() + print("subscriptions update: \(subscriptions.map{$0.topic})") + subscriptionsPublisherSubject.send(subscriptions) } } } From e43c14a82887e7fe09bd822322a1082fefb068ac Mon Sep 17 00:00:00 2001 From: Bartosz Rozwarski Date: Wed, 8 Feb 2023 08:55:41 +0100 Subject: [PATCH 04/10] rename PN store --- ...PushMessagesProvider.swift => PushMessagesStore.swift} | 8 ++++++-- .../Client/Wallet/WalletPushClient.swift | 8 ++++---- .../Client/Wallet/WalletPushClientFactory.swift | 4 ++-- 3 files changed, 12 insertions(+), 8 deletions(-) rename Sources/WalletConnectPush/Client/Wallet/{PushMessagesProvider.swift => PushMessagesStore.swift} (56%) diff --git a/Sources/WalletConnectPush/Client/Wallet/PushMessagesProvider.swift b/Sources/WalletConnectPush/Client/Wallet/PushMessagesStore.swift similarity index 56% rename from Sources/WalletConnectPush/Client/Wallet/PushMessagesProvider.swift rename to Sources/WalletConnectPush/Client/Wallet/PushMessagesStore.swift index b635753d9..001101e12 100644 --- a/Sources/WalletConnectPush/Client/Wallet/PushMessagesProvider.swift +++ b/Sources/WalletConnectPush/Client/Wallet/PushMessagesStore.swift @@ -3,15 +3,19 @@ import Foundation import WalletConnectUtils import Combine -class PushMessagesProvider { +class PushMessagesStore { private let history: RPCHistory init(history: RPCHistory) { self.history = history } - public func getMessageHistory(topic: String) -> [PushMessage] { + func getPushMessages(topic: String) -> [PushMessage] { history.getAll(of: PushMessage.self, topic: topic) } + func deletePushMessages(topic: String) { + history.deleteAll(forTopic: topic) + } + } diff --git a/Sources/WalletConnectPush/Client/Wallet/WalletPushClient.swift b/Sources/WalletConnectPush/Client/Wallet/WalletPushClient.swift index 30624d062..b554ab6ca 100644 --- a/Sources/WalletConnectPush/Client/Wallet/WalletPushClient.swift +++ b/Sources/WalletConnectPush/Client/Wallet/WalletPushClient.swift @@ -43,7 +43,7 @@ public class WalletPushClient { private let proposeResponder: PushRequestResponder private let pushMessageSubscriber: PushMessageSubscriber private let subscriptionsProvider: SubscriptionsProvider - private let pushMessagesProvider: PushMessagesProvider + private let pushMessagesStore: PushMessagesStore private let resubscribeService: PushResubscribeService init(logger: ConsoleLogging, @@ -53,7 +53,7 @@ public class WalletPushClient { proposeResponder: PushRequestResponder, pushMessageSubscriber: PushMessageSubscriber, subscriptionsProvider: SubscriptionsProvider, - pushMessagesProvider: PushMessagesProvider, + pushMessagesStore: PushMessagesStore, deletePushSubscriptionService: DeletePushSubscriptionService, deletePushSubscriptionSubscriber: DeletePushSubscriptionSubscriber, resubscribeService: PushResubscribeService, @@ -64,7 +64,7 @@ public class WalletPushClient { self.echoClient = echoClient self.pushMessageSubscriber = pushMessageSubscriber self.subscriptionsProvider = subscriptionsProvider - self.pushMessagesProvider = pushMessagesProvider + self.pushMessagesStore = pushMessagesStore self.deletePushSubscriptionService = deletePushSubscriptionService self.deletePushSubscriptionSubscriber = deletePushSubscriptionSubscriber self.resubscribeService = resubscribeService @@ -85,7 +85,7 @@ public class WalletPushClient { } public func getMessageHistory(topic: String) -> [PushMessage] { - pushMessagesProvider.getMessageHistory(topic: topic) + pushMessagesStore.getPushMessages(topic: topic) } public func delete(topic: String) async throws { diff --git a/Sources/WalletConnectPush/Client/Wallet/WalletPushClientFactory.swift b/Sources/WalletConnectPush/Client/Wallet/WalletPushClientFactory.swift index 22358f13f..ddbdc4707 100644 --- a/Sources/WalletConnectPush/Client/Wallet/WalletPushClientFactory.swift +++ b/Sources/WalletConnectPush/Client/Wallet/WalletPushClientFactory.swift @@ -33,10 +33,10 @@ public struct WalletPushClientFactory { let pushMessageSubscriber = PushMessageSubscriber(networkingInteractor: networkInteractor, logger: logger) let subscriptionProvider = SubscriptionsProvider(store: subscriptionStore) + let pushMessagesStore = PushMessagesStore(history: history) let deletePushSubscriptionService = DeletePushSubscriptionService(networkingInteractor: networkInteractor, kms: kms, logger: logger, pushSubscriptionStore: subscriptionStore) let deletePushSubscriptionSubscriber = DeletePushSubscriptionSubscriber(networkingInteractor: networkInteractor, kms: kms, logger: logger, pushSubscriptionStore: subscriptionStore) let resubscribeService = PushResubscribeService(networkInteractor: networkInteractor, subscriptionsStorage: subscriptionStore) - let pushMessagesProvider = PushMessagesProvider(history: history) let pushSubscriptionsObserver = PushSubscriptionsObserver(store: subscriptionStore) return WalletPushClient( logger: logger, @@ -46,7 +46,7 @@ public struct WalletPushClientFactory { proposeResponder: proposeResponder, pushMessageSubscriber: pushMessageSubscriber, subscriptionsProvider: subscriptionProvider, - pushMessagesProvider: pushMessagesProvider, + pushMessagesStore: pushMessagesStore, deletePushSubscriptionService: deletePushSubscriptionService, deletePushSubscriptionSubscriber: deletePushSubscriptionSubscriber, resubscribeService: resubscribeService, From 10fc8990e9f628bf42235ce24ce706b7890b17ac Mon Sep 17 00:00:00 2001 From: Bartosz Rozwarski Date: Wed, 8 Feb 2023 11:58:47 +0100 Subject: [PATCH 05/10] Add push message record --- .../Models/PushMessageViewModel.swift | 8 ++--- .../PushMessages/PushMessagesInteractor.swift | 3 +- .../PushMessages/PushMessagesPresenter.swift | 4 +-- .../DeletePushSubscriptionService.swift | 8 +++-- .../Client/Dapp/DappPushClientFactory.swift | 2 +- .../Client/Wallet/PushMessageSubscriber.swift | 10 ++++-- .../Client/Wallet/PushMessagesDatabase.swift | 32 +++++++++++++++++++ .../Client/Wallet/PushMessagesStore.swift | 21 ------------ .../Client/Wallet/WalletPushClient.swift | 18 +++++------ .../Wallet/WalletPushClientFactory.swift | 9 +++--- .../PushStorageIdntifiers.swift | 1 + Sources/WalletConnectUtils/CodableStore.swift | 7 ++++ 12 files changed, 75 insertions(+), 48 deletions(-) create mode 100644 Sources/WalletConnectPush/Client/Wallet/PushMessagesDatabase.swift delete mode 100644 Sources/WalletConnectPush/Client/Wallet/PushMessagesStore.swift diff --git a/Example/WalletApp/PresentationLayer/Wallet/PushMessages/Models/PushMessageViewModel.swift b/Example/WalletApp/PresentationLayer/Wallet/PushMessages/Models/PushMessageViewModel.swift index 49760ebdb..9006f203b 100644 --- a/Example/WalletApp/PresentationLayer/Wallet/PushMessages/Models/PushMessageViewModel.swift +++ b/Example/WalletApp/PresentationLayer/Wallet/PushMessages/Models/PushMessageViewModel.swift @@ -3,17 +3,17 @@ import Foundation import WalletConnectPush struct PushMessageViewModel { - let pushMessage: WalletConnectPush.PushMessage + let pushMessageRecord: WalletConnectPush.PushMessageRecord var imageUrl: String { - return pushMessage.icon + return pushMessageRecord.message.icon } var title: String { - return pushMessage.title + return pushMessageRecord.message.title } var subtitle: String { - return pushMessage.body + return pushMessageRecord.message.body } } diff --git a/Example/WalletApp/PresentationLayer/Wallet/PushMessages/PushMessagesInteractor.swift b/Example/WalletApp/PresentationLayer/Wallet/PushMessages/PushMessagesInteractor.swift index 4bfda8377..fe8055889 100644 --- a/Example/WalletApp/PresentationLayer/Wallet/PushMessages/PushMessagesInteractor.swift +++ b/Example/WalletApp/PresentationLayer/Wallet/PushMessages/PushMessagesInteractor.swift @@ -12,8 +12,7 @@ final class PushMessagesInteractor { self.subscription = subscription } - func getPushMessages() -> [PushMessage] { - print(subscription.topic) + func getPushMessages() -> [PushMessageRecord] { return Push.wallet.getMessageHistory(topic: subscription.topic) } } diff --git a/Example/WalletApp/PresentationLayer/Wallet/PushMessages/PushMessagesPresenter.swift b/Example/WalletApp/PresentationLayer/Wallet/PushMessages/PushMessagesPresenter.swift index d4940d17d..f161f4206 100644 --- a/Example/WalletApp/PresentationLayer/Wallet/PushMessages/PushMessagesPresenter.swift +++ b/Example/WalletApp/PresentationLayer/Wallet/PushMessages/PushMessagesPresenter.swift @@ -33,8 +33,8 @@ extension PushMessagesPresenter: SceneViewModel { private extension PushMessagesPresenter { func setupInitialState() { - self.pushMessages = interactor.getPushMessages().map({ pushMessage in - PushMessageViewModel(pushMessage: pushMessage) + self.pushMessages = interactor.getPushMessages().map({ pushMessageRecord in + PushMessageViewModel(pushMessageRecord: pushMessageRecord) }) } } diff --git a/Sources/WalletConnectPush/Client/Common/DeletePushSubscriptionService.swift b/Sources/WalletConnectPush/Client/Common/DeletePushSubscriptionService.swift index bf0a775ea..eceb48b29 100644 --- a/Sources/WalletConnectPush/Client/Common/DeletePushSubscriptionService.swift +++ b/Sources/WalletConnectPush/Client/Common/DeletePushSubscriptionService.swift @@ -10,14 +10,16 @@ class DeletePushSubscriptionService { private let kms: KeyManagementServiceProtocol private let logger: ConsoleLogging private let pushSubscriptionStore: CodableStore - + private let pushMessagesDatabase: PushMessagesDatabase? init(networkingInteractor: NetworkInteracting, kms: KeyManagementServiceProtocol, logger: ConsoleLogging, - pushSubscriptionStore: CodableStore) { + pushSubscriptionStore: CodableStore, + pushMessagesDatabase: PushMessagesDatabase?) { self.networkingInteractor = networkingInteractor self.kms = kms self.logger = logger + self.pushMessagesDatabase = pushMessagesDatabase self.pushSubscriptionStore = pushSubscriptionStore } @@ -28,7 +30,7 @@ class DeletePushSubscriptionService { let params = PushDeleteParams.userDisconnected logger.debug("Will delete push subscription for reason: message: \(params.message) code: \(params.code)") pushSubscriptionStore.delete(forKey: topic) - + pushMessagesDatabase?.deletePushMessages(topic: topic) let request = RPCRequest(method: protocolMethod.method, params: params) try await networkingInteractor.request(request, topic: topic, protocolMethod: protocolMethod) diff --git a/Sources/WalletConnectPush/Client/Dapp/DappPushClientFactory.swift b/Sources/WalletConnectPush/Client/Dapp/DappPushClientFactory.swift index e6f9e2c71..e43460388 100644 --- a/Sources/WalletConnectPush/Client/Dapp/DappPushClientFactory.swift +++ b/Sources/WalletConnectPush/Client/Dapp/DappPushClientFactory.swift @@ -23,7 +23,7 @@ public struct DappPushClientFactory { let proposalResponseSubscriber = ProposalResponseSubscriber(networkingInteractor: networkInteractor, kms: kms, logger: logger, metadata: metadata, relay: RelayProtocolOptions(protocol: "irn", data: nil), subscriptionsStore: subscriptionStore) let pushMessageSender = PushMessageSender(networkingInteractor: networkInteractor, kms: kms, logger: logger) let subscriptionProvider = SubscriptionsProvider(store: subscriptionStore) - let deletePushSubscriptionService = DeletePushSubscriptionService(networkingInteractor: networkInteractor, kms: kms, logger: logger, pushSubscriptionStore: subscriptionStore) + let deletePushSubscriptionService = DeletePushSubscriptionService(networkingInteractor: networkInteractor, kms: kms, logger: logger, pushSubscriptionStore: subscriptionStore, pushMessagesDatabase: nil) let deletePushSubscriptionSubscriber = DeletePushSubscriptionSubscriber(networkingInteractor: networkInteractor, kms: kms, logger: logger, pushSubscriptionStore: subscriptionStore) let resubscribeService = PushResubscribeService(networkInteractor: networkInteractor, subscriptionsStorage: subscriptionStore) return DappPushClient( diff --git a/Sources/WalletConnectPush/Client/Wallet/PushMessageSubscriber.swift b/Sources/WalletConnectPush/Client/Wallet/PushMessageSubscriber.swift index c1ea0a2b4..b3a218c31 100644 --- a/Sources/WalletConnectPush/Client/Wallet/PushMessageSubscriber.swift +++ b/Sources/WalletConnectPush/Client/Wallet/PushMessageSubscriber.swift @@ -5,13 +5,16 @@ import WalletConnectPairing class PushMessageSubscriber { private let networkingInteractor: NetworkInteracting + private let pushMessagesDatabase: PushMessagesDatabase private let logger: ConsoleLogging private var publishers = [AnyCancellable]() - var onPushMessage: ((_ message: PushMessage) -> Void)? + var onPushMessage: ((_ message: PushMessageRecord) -> Void)? init(networkingInteractor: NetworkInteracting, + pushMessagesDatabase: PushMessagesDatabase, logger: ConsoleLogging) { self.networkingInteractor = networkingInteractor + self.pushMessagesDatabase = pushMessagesDatabase self.logger = logger subscribeForPushMessages() } @@ -21,7 +24,10 @@ class PushMessageSubscriber { networkingInteractor.requestSubscription(on: protocolMethod) .sink { [unowned self] (payload: RequestSubscriptionPayload) in logger.debug("Received Push Message") - onPushMessage?(payload.request) + + let record = PushMessageRecord(id: payload.id.string, topic: payload.topic, message: payload.request) + pushMessagesDatabase.setPushMessageRecord(record) + onPushMessage?(record) }.store(in: &publishers) diff --git a/Sources/WalletConnectPush/Client/Wallet/PushMessagesDatabase.swift b/Sources/WalletConnectPush/Client/Wallet/PushMessagesDatabase.swift new file mode 100644 index 000000000..958cb9171 --- /dev/null +++ b/Sources/WalletConnectPush/Client/Wallet/PushMessagesDatabase.swift @@ -0,0 +1,32 @@ + +import Foundation +import WalletConnectUtils +import Combine + +class PushMessagesDatabase { + private let store: CodableStore + + init(store: CodableStore) { + self.store = store + } + + func getPushMessages(topic: String) -> [PushMessageRecord] { + store.getAll().filter{$0.topic == topic} + } + + func deletePushMessages(topic: String) { + let messagesKeys = getPushMessages(topic: topic).map{$0.id} + store.delete(forKeys: messagesKeys) + } + + func setPushMessageRecord(_ record: PushMessageRecord) { + store.set(record, forKey: record.id) + } + +} + +public struct PushMessageRecord: Codable, Equatable { + public let id: String + public let topic: String + public let message: PushMessage +} diff --git a/Sources/WalletConnectPush/Client/Wallet/PushMessagesStore.swift b/Sources/WalletConnectPush/Client/Wallet/PushMessagesStore.swift deleted file mode 100644 index 001101e12..000000000 --- a/Sources/WalletConnectPush/Client/Wallet/PushMessagesStore.swift +++ /dev/null @@ -1,21 +0,0 @@ - -import Foundation -import WalletConnectUtils -import Combine - -class PushMessagesStore { - private let history: RPCHistory - - init(history: RPCHistory) { - self.history = history - } - - func getPushMessages(topic: String) -> [PushMessage] { - history.getAll(of: PushMessage.self, topic: topic) - } - - func deletePushMessages(topic: String) { - history.deleteAll(forTopic: topic) - } - -} diff --git a/Sources/WalletConnectPush/Client/Wallet/WalletPushClient.swift b/Sources/WalletConnectPush/Client/Wallet/WalletPushClient.swift index b554ab6ca..a48708778 100644 --- a/Sources/WalletConnectPush/Client/Wallet/WalletPushClient.swift +++ b/Sources/WalletConnectPush/Client/Wallet/WalletPushClient.swift @@ -21,9 +21,9 @@ public class WalletPushClient { requestPublisherSubject.eraseToAnyPublisher() } - private let pushMessagePublisherSubject = PassthroughSubject() + private let pushMessagePublisherSubject = PassthroughSubject() - public var pushMessagePublisher: AnyPublisher { + public var pushMessagePublisher: AnyPublisher { pushMessagePublisherSubject.eraseToAnyPublisher() } @@ -43,7 +43,7 @@ public class WalletPushClient { private let proposeResponder: PushRequestResponder private let pushMessageSubscriber: PushMessageSubscriber private let subscriptionsProvider: SubscriptionsProvider - private let pushMessagesStore: PushMessagesStore + private let pushMessagesDatabase: PushMessagesDatabase private let resubscribeService: PushResubscribeService init(logger: ConsoleLogging, @@ -53,7 +53,7 @@ public class WalletPushClient { proposeResponder: PushRequestResponder, pushMessageSubscriber: PushMessageSubscriber, subscriptionsProvider: SubscriptionsProvider, - pushMessagesStore: PushMessagesStore, + pushMessagesDatabase: PushMessagesDatabase, deletePushSubscriptionService: DeletePushSubscriptionService, deletePushSubscriptionSubscriber: DeletePushSubscriptionSubscriber, resubscribeService: PushResubscribeService, @@ -64,7 +64,7 @@ public class WalletPushClient { self.echoClient = echoClient self.pushMessageSubscriber = pushMessageSubscriber self.subscriptionsProvider = subscriptionsProvider - self.pushMessagesStore = pushMessagesStore + self.pushMessagesDatabase = pushMessagesDatabase self.deletePushSubscriptionService = deletePushSubscriptionService self.deletePushSubscriptionSubscriber = deletePushSubscriptionSubscriber self.resubscribeService = resubscribeService @@ -84,8 +84,8 @@ public class WalletPushClient { subscriptionsProvider.getActiveSubscriptions() } - public func getMessageHistory(topic: String) -> [PushMessage] { - pushMessagesStore.getPushMessages(topic: topic) + public func getMessageHistory(topic: String) -> [PushMessageRecord] { + pushMessagesDatabase.getPushMessages(topic: topic) } public func delete(topic: String) async throws { @@ -107,8 +107,8 @@ private extension WalletPushClient { requestPublisherSubject.send((id: payload.id, account: payload.request.account, metadata: payload.request.metadata)) }.store(in: &publishers) - pushMessageSubscriber.onPushMessage = { [unowned self] pushMessage in - pushMessagePublisherSubject.send(pushMessage) + pushMessageSubscriber.onPushMessage = { [unowned self] pushMessageRecord in + pushMessagePublisherSubject.send(pushMessageRecord) } deletePushSubscriptionSubscriber.onDelete = {[unowned self] topic in deleteSubscriptionPublisherSubject.send(topic) diff --git a/Sources/WalletConnectPush/Client/Wallet/WalletPushClientFactory.swift b/Sources/WalletConnectPush/Client/Wallet/WalletPushClientFactory.swift index ddbdc4707..442904fcf 100644 --- a/Sources/WalletConnectPush/Client/Wallet/WalletPushClientFactory.swift +++ b/Sources/WalletConnectPush/Client/Wallet/WalletPushClientFactory.swift @@ -31,10 +31,11 @@ public struct WalletPushClientFactory { let proposeResponder = PushRequestResponder(networkingInteractor: networkInteractor, logger: logger, kms: kms, groupKeychainStorage: groupKeychainStorage, rpcHistory: history, subscriptionsStore: subscriptionStore) - let pushMessageSubscriber = PushMessageSubscriber(networkingInteractor: networkInteractor, logger: logger) + let pushMessagesRecordsStore = CodableStore(defaults: keyValueStorage, identifier: PushStorageIdntifiers.pushMessagesRecords) + let pushMessagesDatabase = PushMessagesDatabase(store: pushMessagesRecordsStore) + let pushMessageSubscriber = PushMessageSubscriber(networkingInteractor: networkInteractor, pushMessagesDatabase: pushMessagesDatabase, logger: logger) let subscriptionProvider = SubscriptionsProvider(store: subscriptionStore) - let pushMessagesStore = PushMessagesStore(history: history) - let deletePushSubscriptionService = DeletePushSubscriptionService(networkingInteractor: networkInteractor, kms: kms, logger: logger, pushSubscriptionStore: subscriptionStore) + let deletePushSubscriptionService = DeletePushSubscriptionService(networkingInteractor: networkInteractor, kms: kms, logger: logger, pushSubscriptionStore: subscriptionStore, pushMessagesDatabase: pushMessagesDatabase) let deletePushSubscriptionSubscriber = DeletePushSubscriptionSubscriber(networkingInteractor: networkInteractor, kms: kms, logger: logger, pushSubscriptionStore: subscriptionStore) let resubscribeService = PushResubscribeService(networkInteractor: networkInteractor, subscriptionsStorage: subscriptionStore) let pushSubscriptionsObserver = PushSubscriptionsObserver(store: subscriptionStore) @@ -46,7 +47,7 @@ public struct WalletPushClientFactory { proposeResponder: proposeResponder, pushMessageSubscriber: pushMessageSubscriber, subscriptionsProvider: subscriptionProvider, - pushMessagesStore: pushMessagesStore, + pushMessagesDatabase: pushMessagesDatabase, deletePushSubscriptionService: deletePushSubscriptionService, deletePushSubscriptionSubscriber: deletePushSubscriptionSubscriber, resubscribeService: resubscribeService, diff --git a/Sources/WalletConnectPush/PushStorageIdntifiers.swift b/Sources/WalletConnectPush/PushStorageIdntifiers.swift index 8139ff15a..5dd0f0a53 100644 --- a/Sources/WalletConnectPush/PushStorageIdntifiers.swift +++ b/Sources/WalletConnectPush/PushStorageIdntifiers.swift @@ -2,4 +2,5 @@ import Foundation enum PushStorageIdntifiers { static let pushSubscription = "com.walletconnect.sdk.pushSbscription" + static let pushMessagesRecords = "com.walletconnect.sdk.pushMessagesRecords" } diff --git a/Sources/WalletConnectUtils/CodableStore.swift b/Sources/WalletConnectUtils/CodableStore.swift index 00c34fb2c..c9e3e481f 100644 --- a/Sources/WalletConnectUtils/CodableStore.swift +++ b/Sources/WalletConnectUtils/CodableStore.swift @@ -38,6 +38,13 @@ public final class CodableStore where T: Codable { onStoreUpdate?() } + public func delete(forKeys keys: [String]) { + keys.forEach { key in + defaults.removeObject(forKey: getContextPrefixedKey(for: key)) + } + onStoreUpdate?() + } + public func deleteAll() { dictionaryForIdentifier() .forEach { defaults.removeObject(forKey: $0.key) } From efe4222304b6f2c13b64277b35e368006fa8173c Mon Sep 17 00:00:00 2001 From: Bartosz Rozwarski Date: Wed, 8 Feb 2023 14:21:18 +0100 Subject: [PATCH 06/10] fix notification cell bug --- .../Wallet/Notifications/NotificationsInteractor.swift | 2 +- .../Wallet/Notifications/NotificationsPresenter.swift | 1 - .../Wallet/Notifications/NotificationsView.swift | 2 +- .../WalletConnectPush/Client/Wallet/PushMessagesDatabase.swift | 3 ++- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Example/WalletApp/PresentationLayer/Wallet/Notifications/NotificationsInteractor.swift b/Example/WalletApp/PresentationLayer/Wallet/Notifications/NotificationsInteractor.swift index 276b02d2b..aa9603c32 100644 --- a/Example/WalletApp/PresentationLayer/Wallet/Notifications/NotificationsInteractor.swift +++ b/Example/WalletApp/PresentationLayer/Wallet/Notifications/NotificationsInteractor.swift @@ -9,7 +9,7 @@ final class NotificationsInteractor { func getSubscriptions() -> [PushSubscription] { let subs = Push.wallet.getActiveSubscriptions() - print(subs) + print(subs.map{$0.topic}) return subs } diff --git a/Example/WalletApp/PresentationLayer/Wallet/Notifications/NotificationsPresenter.swift b/Example/WalletApp/PresentationLayer/Wallet/Notifications/NotificationsPresenter.swift index 7dd0298b0..367fab4b9 100644 --- a/Example/WalletApp/PresentationLayer/Wallet/Notifications/NotificationsPresenter.swift +++ b/Example/WalletApp/PresentationLayer/Wallet/Notifications/NotificationsPresenter.swift @@ -51,7 +51,6 @@ private extension NotificationsPresenter { func setupSubscriptions() { self.subscriptions = interactor.getSubscriptions() .map { - print($0) return SubscriptionsViewModel(subscription: $0) } diff --git a/Example/WalletApp/PresentationLayer/Wallet/Notifications/NotificationsView.swift b/Example/WalletApp/PresentationLayer/Wallet/Notifications/NotificationsView.swift index f6596f652..aed832740 100644 --- a/Example/WalletApp/PresentationLayer/Wallet/Notifications/NotificationsView.swift +++ b/Example/WalletApp/PresentationLayer/Wallet/Notifications/NotificationsView.swift @@ -32,7 +32,7 @@ struct NotificationsView: View { VStack { if !presenter.subscriptions.isEmpty { List { - ForEach(presenter.subscriptions, id: \.title) { subscription in + ForEach(presenter.subscriptions, id: \.id) { subscription in subscriptionsView(subscription: subscription) .listRowSeparator(.hidden) .listRowInsets(EdgeInsets(top: 0, leading: 0, bottom: 16, trailing: 0)) diff --git a/Sources/WalletConnectPush/Client/Wallet/PushMessagesDatabase.swift b/Sources/WalletConnectPush/Client/Wallet/PushMessagesDatabase.swift index 958cb9171..f3f6f0139 100644 --- a/Sources/WalletConnectPush/Client/Wallet/PushMessagesDatabase.swift +++ b/Sources/WalletConnectPush/Client/Wallet/PushMessagesDatabase.swift @@ -11,7 +11,8 @@ class PushMessagesDatabase { } func getPushMessages(topic: String) -> [PushMessageRecord] { - store.getAll().filter{$0.topic == topic} + print(store.getAll().filter{$0.topic == topic}) + return store.getAll().filter{$0.topic == topic} } func deletePushMessages(topic: String) { From e1a2808c899d4baec76c60a398d0903d3b10b4b1 Mon Sep 17 00:00:00 2001 From: Bartosz Rozwarski Date: Thu, 9 Feb 2023 08:35:01 +0100 Subject: [PATCH 07/10] delete message in wallet app --- Example/IntegrationTests/Push/PushTests.swift | 2 +- .../Notifications/NotificationsInteractor.swift | 2 +- .../PushMessages/Models/PushMessageViewModel.swift | 7 ++++++- .../Wallet/PushMessages/PushMessagesInteractor.swift | 4 ++++ .../Wallet/PushMessages/PushMessagesPresenter.swift | 11 +++++++++-- .../Wallet/PushMessages/PushMessagesView.swift | 6 ++---- .../Client/Wallet/PushMessagesDatabase.swift | 5 ++++- .../Client/Wallet/PushSubscriptionsObserver.swift | 1 - .../Client/Wallet/WalletPushClient.swift | 6 +++++- 9 files changed, 32 insertions(+), 12 deletions(-) diff --git a/Example/IntegrationTests/Push/PushTests.swift b/Example/IntegrationTests/Push/PushTests.swift index 6e14ee3ec..69087cf18 100644 --- a/Example/IntegrationTests/Push/PushTests.swift +++ b/Example/IntegrationTests/Push/PushTests.swift @@ -194,7 +194,7 @@ final class PushTests: XCTestCase { return } subscriptionTopic = subscription.topic - Task(priority: .userInitiated) { try! await walletPushClient.delete(topic: subscription.topic)} + Task(priority: .userInitiated) { try! await walletPushClient.deleteSubscription(topic: subscription.topic)} }.store(in: &publishers) dappPushClient.deleteSubscriptionPublisher.sink { topic in diff --git a/Example/WalletApp/PresentationLayer/Wallet/Notifications/NotificationsInteractor.swift b/Example/WalletApp/PresentationLayer/Wallet/Notifications/NotificationsInteractor.swift index aa9603c32..98b6e6eb4 100644 --- a/Example/WalletApp/PresentationLayer/Wallet/Notifications/NotificationsInteractor.swift +++ b/Example/WalletApp/PresentationLayer/Wallet/Notifications/NotificationsInteractor.swift @@ -15,7 +15,7 @@ final class NotificationsInteractor { func removeSubscription(_ subscription: PushSubscription) async { do { - try await Push.wallet.delete(topic: subscription.topic) + try await Push.wallet.deleteSubscription(topic: subscription.topic) } catch { print(error) } diff --git a/Example/WalletApp/PresentationLayer/Wallet/PushMessages/Models/PushMessageViewModel.swift b/Example/WalletApp/PresentationLayer/Wallet/PushMessages/Models/PushMessageViewModel.swift index 9006f203b..a81193c71 100644 --- a/Example/WalletApp/PresentationLayer/Wallet/PushMessages/Models/PushMessageViewModel.swift +++ b/Example/WalletApp/PresentationLayer/Wallet/PushMessages/Models/PushMessageViewModel.swift @@ -2,9 +2,14 @@ import Foundation import WalletConnectPush -struct PushMessageViewModel { +struct PushMessageViewModel: Identifiable { + let pushMessageRecord: WalletConnectPush.PushMessageRecord + var id: String { + return pushMessageRecord.id + } + var imageUrl: String { return pushMessageRecord.message.icon } diff --git a/Example/WalletApp/PresentationLayer/Wallet/PushMessages/PushMessagesInteractor.swift b/Example/WalletApp/PresentationLayer/Wallet/PushMessages/PushMessagesInteractor.swift index fe8055889..4bba2d5b1 100644 --- a/Example/WalletApp/PresentationLayer/Wallet/PushMessages/PushMessagesInteractor.swift +++ b/Example/WalletApp/PresentationLayer/Wallet/PushMessages/PushMessagesInteractor.swift @@ -15,4 +15,8 @@ final class PushMessagesInteractor { func getPushMessages() -> [PushMessageRecord] { return Push.wallet.getMessageHistory(topic: subscription.topic) } + + func deletePushMessage(id: String) { + Push.wallet.deletePushMessage(id: id) + } } diff --git a/Example/WalletApp/PresentationLayer/Wallet/PushMessages/PushMessagesPresenter.swift b/Example/WalletApp/PresentationLayer/Wallet/PushMessages/PushMessagesPresenter.swift index f161f4206..28f265bdf 100644 --- a/Example/WalletApp/PresentationLayer/Wallet/PushMessages/PushMessagesPresenter.swift +++ b/Example/WalletApp/PresentationLayer/Wallet/PushMessages/PushMessagesPresenter.swift @@ -10,10 +10,17 @@ final class PushMessagesPresenter: ObservableObject { @Published var pushMessages: [PushMessageViewModel] = [] init(interactor: PushMessagesInteractor, router: PushMessagesRouter) { - defer { setupInitialState() } + defer { reloadPushMessages() } self.interactor = interactor self.router = router } + + func deletePushMessage(at indexSet: IndexSet) { + if let index = indexSet.first { + interactor.deletePushMessage(id: pushMessages[index].id) + } + reloadPushMessages() + } } // MARK: SceneViewModel @@ -32,7 +39,7 @@ extension PushMessagesPresenter: SceneViewModel { private extension PushMessagesPresenter { - func setupInitialState() { + func reloadPushMessages() { self.pushMessages = interactor.getPushMessages().map({ pushMessageRecord in PushMessageViewModel(pushMessageRecord: pushMessageRecord) }) diff --git a/Example/WalletApp/PresentationLayer/Wallet/PushMessages/PushMessagesView.swift b/Example/WalletApp/PresentationLayer/Wallet/PushMessages/PushMessagesView.swift index 68a4bc6e8..9a6908ee7 100644 --- a/Example/WalletApp/PresentationLayer/Wallet/PushMessages/PushMessagesView.swift +++ b/Example/WalletApp/PresentationLayer/Wallet/PushMessages/PushMessagesView.swift @@ -31,15 +31,13 @@ struct PushMessagesView: View { VStack { if !presenter.pushMessages.isEmpty { List { - ForEach(presenter.pushMessages, id: \.title) { pm in + ForEach(presenter.pushMessages, id: \.id) { pm in notificationView(pushMessage: pm) .listRowSeparator(.hidden) .listRowInsets(EdgeInsets(top: 0, leading: 0, bottom: 16, trailing: 0)) } .onDelete { indexSet in - Task(priority: .high) { - // await presenter.removeSubscribtion(at: indexSet) - } + presenter.deletePushMessage(at: indexSet) } } .listStyle(PlainListStyle()) diff --git a/Sources/WalletConnectPush/Client/Wallet/PushMessagesDatabase.swift b/Sources/WalletConnectPush/Client/Wallet/PushMessagesDatabase.swift index f3f6f0139..ad82cd52a 100644 --- a/Sources/WalletConnectPush/Client/Wallet/PushMessagesDatabase.swift +++ b/Sources/WalletConnectPush/Client/Wallet/PushMessagesDatabase.swift @@ -11,7 +11,6 @@ class PushMessagesDatabase { } func getPushMessages(topic: String) -> [PushMessageRecord] { - print(store.getAll().filter{$0.topic == topic}) return store.getAll().filter{$0.topic == topic} } @@ -20,6 +19,10 @@ class PushMessagesDatabase { store.delete(forKeys: messagesKeys) } + func deletePushMessage(id: String) { + store.delete(forKey: id) + } + func setPushMessageRecord(_ record: PushMessageRecord) { store.set(record, forKey: record.id) } diff --git a/Sources/WalletConnectPush/Client/Wallet/PushSubscriptionsObserver.swift b/Sources/WalletConnectPush/Client/Wallet/PushSubscriptionsObserver.swift index f79e6fa1d..84f3f86cf 100644 --- a/Sources/WalletConnectPush/Client/Wallet/PushSubscriptionsObserver.swift +++ b/Sources/WalletConnectPush/Client/Wallet/PushSubscriptionsObserver.swift @@ -17,7 +17,6 @@ class PushSubscriptionsObserver { func setUpSubscription() { store.onStoreUpdate = { [unowned self] in let subscriptions = store.getAll() - print("subscriptions update: \(subscriptions.map{$0.topic})") subscriptionsPublisherSubject.send(subscriptions) } } diff --git a/Sources/WalletConnectPush/Client/Wallet/WalletPushClient.swift b/Sources/WalletConnectPush/Client/Wallet/WalletPushClient.swift index a48708778..7a55a6b65 100644 --- a/Sources/WalletConnectPush/Client/Wallet/WalletPushClient.swift +++ b/Sources/WalletConnectPush/Client/Wallet/WalletPushClient.swift @@ -88,10 +88,14 @@ public class WalletPushClient { pushMessagesDatabase.getPushMessages(topic: topic) } - public func delete(topic: String) async throws { + public func deleteSubscription(topic: String) async throws { try await deletePushSubscriptionService.delete(topic: topic) } + public func deletePushMessage(id: String) { + pushMessagesDatabase.deletePushMessage(id: id) + } + public func register(deviceToken: Data) async throws { try await echoClient.register(deviceToken: deviceToken) } From a8da5a8904ad83271b52d92b312d9cda249870ed Mon Sep 17 00:00:00 2001 From: Bartosz Rozwarski Date: Thu, 9 Feb 2023 14:06:59 +0100 Subject: [PATCH 08/10] fix test --- Example/IntegrationTests/Push/PushTests.swift | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Example/IntegrationTests/Push/PushTests.swift b/Example/IntegrationTests/Push/PushTests.swift index 69087cf18..4131872e2 100644 --- a/Example/IntegrationTests/Push/PushTests.swift +++ b/Example/IntegrationTests/Push/PushTests.swift @@ -165,10 +165,10 @@ final class PushTests: XCTestCase { Task(priority: .userInitiated) { try! await dappPushClient.notify(topic: subscription.topic, message: pushMessage) } }.store(in: &publishers) - walletPushClient.pushMessagePublisher.sink { [unowned self] receivedPushMessage in + walletPushClient.pushMessagePublisher.sink { [unowned self] receivedPushMessageRecord in let messageHistory = walletPushClient.getMessageHistory(topic: pushSubscription.topic) - XCTAssertEqual(pushMessage, receivedPushMessage) - XCTAssertTrue(messageHistory.contains(receivedPushMessage)) + XCTAssertEqual(pushMessage, receivedPushMessageRecord.message) + XCTAssertTrue(messageHistory.contains(receivedPushMessageRecord)) expectation.fulfill() }.store(in: &publishers) From 41eda634edd284b6cb5a01e46ef47c2e7adfda11 Mon Sep 17 00:00:00 2001 From: Bartosz Rozwarski Date: Thu, 9 Feb 2023 14:22:52 +0100 Subject: [PATCH 09/10] add combine publisher to codable store --- .../Client/Wallet/PushSubscriptionsObserver.swift | 6 ++++-- Sources/WalletConnectUtils/CodableStore.swift | 15 ++++++++++----- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/Sources/WalletConnectPush/Client/Wallet/PushSubscriptionsObserver.swift b/Sources/WalletConnectPush/Client/Wallet/PushSubscriptionsObserver.swift index 84f3f86cf..a4e330ec3 100644 --- a/Sources/WalletConnectPush/Client/Wallet/PushSubscriptionsObserver.swift +++ b/Sources/WalletConnectPush/Client/Wallet/PushSubscriptionsObserver.swift @@ -2,6 +2,8 @@ import Combine import Foundation class PushSubscriptionsObserver { + private var publishers = [AnyCancellable]() + public var subscriptionsPublisher: AnyPublisher<[PushSubscription], Never> { subscriptionsPublisherSubject.eraseToAnyPublisher() } @@ -15,9 +17,9 @@ class PushSubscriptionsObserver { } func setUpSubscription() { - store.onStoreUpdate = { [unowned self] in + store.storeUpdatePublisher.sink(receiveValue: { [unowned self] in let subscriptions = store.getAll() subscriptionsPublisherSubject.send(subscriptions) - } + }).store(in: &publishers) } } diff --git a/Sources/WalletConnectUtils/CodableStore.swift b/Sources/WalletConnectUtils/CodableStore.swift index c9e3e481f..be876bd3e 100644 --- a/Sources/WalletConnectUtils/CodableStore.swift +++ b/Sources/WalletConnectUtils/CodableStore.swift @@ -1,9 +1,14 @@ import Foundation +import Combine public final class CodableStore where T: Codable { private let defaults: KeyValueStorage private let prefix: String - public var onStoreUpdate: (() -> Void)? + + public var storeUpdatePublisher: AnyPublisher { + storeUpdatePublisherSubject.eraseToAnyPublisher() + } + private let storeUpdatePublisherSubject = PassthroughSubject() public init(defaults: KeyValueStorage, identifier: String) { self.defaults = defaults @@ -14,7 +19,7 @@ public final class CodableStore where T: Codable { // This force-unwrap is safe because T are JSON Encodable let encoded = try! JSONEncoder().encode(item) defaults.set(encoded, forKey: getContextPrefixedKey(for: key)) - onStoreUpdate?() + storeUpdatePublisherSubject.send() } public func get(key: String) throws -> T? { @@ -35,20 +40,20 @@ public final class CodableStore where T: Codable { public func delete(forKey key: String) { defaults.removeObject(forKey: getContextPrefixedKey(for: key)) - onStoreUpdate?() + storeUpdatePublisherSubject.send() } public func delete(forKeys keys: [String]) { keys.forEach { key in defaults.removeObject(forKey: getContextPrefixedKey(for: key)) } - onStoreUpdate?() + storeUpdatePublisherSubject.send() } public func deleteAll() { dictionaryForIdentifier() .forEach { defaults.removeObject(forKey: $0.key) } - onStoreUpdate?() + storeUpdatePublisherSubject.send() } private func getContextPrefixedKey(for key: String) -> String { From 64d4d420555ad0ceb5de158f8fb4f1d3f5ea3db8 Mon Sep 17 00:00:00 2001 From: Bartosz Rozwarski Date: Tue, 14 Feb 2023 11:20:03 +0100 Subject: [PATCH 10/10] cleanup --- .../Wallet/Notifications/NotificationsInteractor.swift | 1 - .../Wallet/Notifications/NotificationsPresenter.swift | 2 -- .../Wallet/PushMessages/PushMessagesInteractor.swift | 3 --- 3 files changed, 6 deletions(-) diff --git a/Example/WalletApp/PresentationLayer/Wallet/Notifications/NotificationsInteractor.swift b/Example/WalletApp/PresentationLayer/Wallet/Notifications/NotificationsInteractor.swift index 98b6e6eb4..f07d922f7 100644 --- a/Example/WalletApp/PresentationLayer/Wallet/Notifications/NotificationsInteractor.swift +++ b/Example/WalletApp/PresentationLayer/Wallet/Notifications/NotificationsInteractor.swift @@ -9,7 +9,6 @@ final class NotificationsInteractor { func getSubscriptions() -> [PushSubscription] { let subs = Push.wallet.getActiveSubscriptions() - print(subs.map{$0.topic}) return subs } diff --git a/Example/WalletApp/PresentationLayer/Wallet/Notifications/NotificationsPresenter.swift b/Example/WalletApp/PresentationLayer/Wallet/Notifications/NotificationsPresenter.swift index 367fab4b9..ba6761a50 100644 --- a/Example/WalletApp/PresentationLayer/Wallet/Notifications/NotificationsPresenter.swift +++ b/Example/WalletApp/PresentationLayer/Wallet/Notifications/NotificationsPresenter.swift @@ -17,7 +17,6 @@ final class NotificationsPresenter: ObservableObject { } func didPress(_ subscription: SubscriptionsViewModel) { - print(subscription.id) router.presentNotifications(subscription: subscription.subscription) } @@ -52,7 +51,6 @@ private extension NotificationsPresenter { self.subscriptions = interactor.getSubscriptions() .map { return SubscriptionsViewModel(subscription: $0) - } interactor.subscriptionsPublisher .receive(on: DispatchQueue.main) diff --git a/Example/WalletApp/PresentationLayer/Wallet/PushMessages/PushMessagesInteractor.swift b/Example/WalletApp/PresentationLayer/Wallet/PushMessages/PushMessagesInteractor.swift index 4bba2d5b1..d6b23324f 100644 --- a/Example/WalletApp/PresentationLayer/Wallet/PushMessages/PushMessagesInteractor.swift +++ b/Example/WalletApp/PresentationLayer/Wallet/PushMessages/PushMessagesInteractor.swift @@ -4,9 +4,6 @@ import Combine final class PushMessagesInteractor { let subscription: PushSubscription -// var pushMessagesPublisher: AnyPublisher<[PushMessage], Never> { -// return Push.wallet.pushMessagesPublisher -// } init(subscription: PushSubscription) { self.subscription = subscription