From e004c1b0dde887fe7b18eade712458c2538cb7ec Mon Sep 17 00:00:00 2001 From: Bartosz Rozwarski Date: Thu, 14 Jul 2022 10:39:43 +0200 Subject: [PATCH 1/2] remove messages duplicates after app relaunch --- Sources/Chat/NetworkingInteractor.swift | 16 ++++++++++++++-- .../Common/MessagingService.swift | 5 +++-- .../NetworkInteractor/NetworkInteractor.swift | 2 +- .../Mocks/NetworkingInteractorMock.swift | 5 +++++ 4 files changed, 23 insertions(+), 5 deletions(-) diff --git a/Sources/Chat/NetworkingInteractor.swift b/Sources/Chat/NetworkingInteractor.swift index 91fbc9058..946a79dbd 100644 --- a/Sources/Chat/NetworkingInteractor.swift +++ b/Sources/Chat/NetworkingInteractor.swift @@ -8,6 +8,7 @@ protocol NetworkInteracting { var socketConnectionStatusPublisher: AnyPublisher { get } var requestPublisher: AnyPublisher {get} var responsePublisher: AnyPublisher {get} + func respondSuccess(payload: RequestSubscriptionPayload) async throws func subscribe(topic: String) async throws func request(_ request: JSONRPCRequest, topic: String, envelopeType: Envelope.EnvelopeType) async throws func respond(topic: String, response: JsonRpcResult, tag: Int) async throws @@ -59,7 +60,13 @@ class NetworkingInteractor: NetworkInteracting { try await relayClient.publish(topic: topic, payload: message, tag: request.params.tag) } + func respondSuccess(payload: RequestSubscriptionPayload) async throws { + let response = JSONRPCResponse(id: payload.request.id, result: AnyCodable(true)) + try await respond(topic: payload.topic, response: JsonRpcResult.response(response), tag: payload.request.params.responseTag) + } + func respond(topic: String, response: JsonRpcResult, tag: Int) async throws { + _ = try jsonRpcHistory.resolve(response: response) let message = try serializer.serialize(topic: topic, encodable: response.value) try await relayClient.publish(topic: topic, payload: message, tag: tag, prompt: false) } @@ -81,8 +88,13 @@ class NetworkingInteractor: NetworkInteracting { } private func handleChatRequest(topic: String, request: JSONRPCRequest) { - let payload = RequestSubscriptionPayload(topic: topic, request: request) - requestPublisherSubject.send(payload) + do { + try jsonRpcHistory.set(topic: topic, request: request) + let payload = RequestSubscriptionPayload(topic: topic, request: request) + requestPublisherSubject.send(payload) + } catch { + logger.debug(error) + } } private func handleJsonRpcResponse(response: JSONRPCResponse) { diff --git a/Sources/Chat/ProtocolServices/Common/MessagingService.swift b/Sources/Chat/ProtocolServices/Common/MessagingService.swift index 0c3031ec5..ca774136d 100644 --- a/Sources/Chat/ProtocolServices/Common/MessagingService.swift +++ b/Sources/Chat/ProtocolServices/Common/MessagingService.swift @@ -56,15 +56,16 @@ class MessagingService { switch subscriptionPayload.request.params { case .message(var message): message.topic = subscriptionPayload.topic - handleMessage(message) + handleMessage(message, subscriptionPayload) default: return } }.store(in: &publishers) } - private func handleMessage(_ message: Message) { + private func handleMessage(_ message: Message, _ payload: RequestSubscriptionPayload) { Task(priority: .background) { + try await networkingInteractor.respondSuccess(payload: payload) await messagesStore.add(message) logger.debug("Received message") onMessage?(message) diff --git a/Sources/WalletConnectSign/NetworkInteractor/NetworkInteractor.swift b/Sources/WalletConnectSign/NetworkInteractor/NetworkInteractor.swift index 05d7e8ad9..ed130f1ae 100644 --- a/Sources/WalletConnectSign/NetworkInteractor/NetworkInteractor.swift +++ b/Sources/WalletConnectSign/NetworkInteractor/NetworkInteractor.swift @@ -226,7 +226,7 @@ class NetworkInteractor: NetworkInteracting { logger.info("Info: \(error.localizedDescription)") } } - + private func handleJsonRpcErrorResponse(response: JSONRPCErrorResponse) { do { let record = try jsonRpcHistory.resolve(response: JsonRpcResult.error(response)) diff --git a/Tests/ChatTests/Mocks/NetworkingInteractorMock.swift b/Tests/ChatTests/Mocks/NetworkingInteractorMock.swift index e947f39bd..030c9d1d9 100644 --- a/Tests/ChatTests/Mocks/NetworkingInteractorMock.swift +++ b/Tests/ChatTests/Mocks/NetworkingInteractorMock.swift @@ -5,6 +5,7 @@ import WalletConnectUtils import WalletConnectRelay class NetworkingInteractorMock: NetworkInteracting { + var socketConnectionStatusPublisher: AnyPublisher { socketConnectionStatusPublisherSubject.eraseToAnyPublisher() } @@ -33,6 +34,10 @@ class NetworkingInteractorMock: NetworkInteracting { } + func respondSuccess(payload: RequestSubscriptionPayload) async throws { + + } + private(set) var subscriptions: [String] = [] func subscribe(topic: String) async throws { From 71bbeb9242547704b9b3fb57b87f0418849ad0ac Mon Sep 17 00:00:00 2001 From: Bartosz Rozwarski Date: Thu, 14 Jul 2022 15:22:03 +0200 Subject: [PATCH 2/2] run lint --- .../Showcase/Classes/DomainLayer/Chat/AccountNameResolver.swift | 2 +- .../PresentationLayer/ChatList/Models/ThreadViewModel.swift | 2 +- .../Showcase/Classes/PresentationLayer/Import/ImportView.swift | 2 +- .../Classes/PresentationLayer/Welcome/WelcomeView.swift | 2 +- .../WalletConnectSign/NetworkInteractor/NetworkInteractor.swift | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Example/Showcase/Classes/DomainLayer/Chat/AccountNameResolver.swift b/Example/Showcase/Classes/DomainLayer/Chat/AccountNameResolver.swift index 3d2f1aa45..915ca9c7b 100644 --- a/Example/Showcase/Classes/DomainLayer/Chat/AccountNameResolver.swift +++ b/Example/Showcase/Classes/DomainLayer/Chat/AccountNameResolver.swift @@ -6,7 +6,7 @@ struct AccountNameResolver { private static var staticMap: [String: String] = [ "swift.eth": "eip155:1:0xab16a96d359ec26a11e2c2b3d8f8b8942d5bfcdb", "kotlin.eth": "eip155:2:0xab16a96d359ec26a11e2c2b3d8f8b8942d5bfcdb", - "js.eth": "eip155:3:0xab16a96d359ec26a11e2c2b3d8f8b8942d5bfcdb", + "js.eth": "eip155:3:0xab16a96d359ec26a11e2c2b3d8f8b8942d5bfcdb" ] static func resolveName(_ account: Account) -> String { diff --git a/Example/Showcase/Classes/PresentationLayer/ChatList/Models/ThreadViewModel.swift b/Example/Showcase/Classes/PresentationLayer/ChatList/Models/ThreadViewModel.swift index 8e17deb60..b65f99821 100644 --- a/Example/Showcase/Classes/PresentationLayer/ChatList/Models/ThreadViewModel.swift +++ b/Example/Showcase/Classes/PresentationLayer/ChatList/Models/ThreadViewModel.swift @@ -13,7 +13,7 @@ struct ThreadViewModel: Identifiable { } var title: String { - return AccountNameResolver.resolveName(thread.peerAccount) + return AccountNameResolver.resolveName(thread.peerAccount) } var subtitle: String { diff --git a/Example/Showcase/Classes/PresentationLayer/Import/ImportView.swift b/Example/Showcase/Classes/PresentationLayer/Import/ImportView.swift index b1f02832f..ab8fc7421 100644 --- a/Example/Showcase/Classes/PresentationLayer/Import/ImportView.swift +++ b/Example/Showcase/Classes/PresentationLayer/Import/ImportView.swift @@ -12,7 +12,7 @@ struct ImportView: View { .padding(.top, 24.0) TextFieldView(title: "Username", placeholder: "username.eth or 0x0…", input: $presenter.input) - + Spacer() BrandButton(title: "Ok, done", action: { diff --git a/Example/Showcase/Classes/PresentationLayer/Welcome/WelcomeView.swift b/Example/Showcase/Classes/PresentationLayer/Welcome/WelcomeView.swift index 5f6d861d4..dd54e017d 100644 --- a/Example/Showcase/Classes/PresentationLayer/Welcome/WelcomeView.swift +++ b/Example/Showcase/Classes/PresentationLayer/Welcome/WelcomeView.swift @@ -7,7 +7,7 @@ struct WelcomeView: View { @EnvironmentObject var presenter: WelcomePresenter var body: some View { - GeometryReader { geometry in + GeometryReader { _ in ZStack { Image("LaunchScreen") .resizable() diff --git a/Sources/WalletConnectSign/NetworkInteractor/NetworkInteractor.swift b/Sources/WalletConnectSign/NetworkInteractor/NetworkInteractor.swift index ed130f1ae..05d7e8ad9 100644 --- a/Sources/WalletConnectSign/NetworkInteractor/NetworkInteractor.swift +++ b/Sources/WalletConnectSign/NetworkInteractor/NetworkInteractor.swift @@ -226,7 +226,7 @@ class NetworkInteractor: NetworkInteracting { logger.info("Info: \(error.localizedDescription)") } } - + private func handleJsonRpcErrorResponse(response: JSONRPCErrorResponse) { do { let record = try jsonRpcHistory.resolve(response: JsonRpcResult.error(response))