From b542c5d0b22c69ce7575c4412b96a69b752788e3 Mon Sep 17 00:00:00 2001 From: spaced4ndy <8711996+spaced4ndy@users.noreply.github.com> Date: Wed, 26 Jun 2024 11:50:52 +0400 Subject: [PATCH] reset stats button --- apps/ios/Shared/Model/SimpleXAPI.swift | 4 ++ .../Views/ChatList/ServersSummaryView.swift | 55 +++++++++++++++---- apps/ios/SimpleXChat/APITypes.swift | 3 + 3 files changed, 50 insertions(+), 12 deletions(-) diff --git a/apps/ios/Shared/Model/SimpleXAPI.swift b/apps/ios/Shared/Model/SimpleXAPI.swift index b59e055ff3..a9511124c2 100644 --- a/apps/ios/Shared/Model/SimpleXAPI.swift +++ b/apps/ios/Shared/Model/SimpleXAPI.swift @@ -1346,6 +1346,10 @@ func getAgentServersSummary() throws -> PresentedServersSummary { throw r } +func resetAgentServersStats() async throws { + try await sendCommandOkResp(.resetAgentServersStats) +} + private func currentUserId(_ funcName: String) throws -> Int64 { if let userId = ChatModel.shared.currentUser?.userId { return userId diff --git a/apps/ios/Shared/Views/ChatList/ServersSummaryView.swift b/apps/ios/Shared/Views/ChatList/ServersSummaryView.swift index 6680a2310a..6639f15e7f 100644 --- a/apps/ios/Shared/Views/ChatList/ServersSummaryView.swift +++ b/apps/ios/Shared/Views/ChatList/ServersSummaryView.swift @@ -15,6 +15,7 @@ struct ServersSummaryView: View { @State private var selectedServerType: PresentedServerType = .smp @State private var selectedSMPServer: String? = nil @State private var selectedXFTPServer: String? = nil + @State private var alert: SomeAlert? enum PresentedUserCategory { case currentUser @@ -43,6 +44,7 @@ struct ServersSummaryView: View { .onAppear { getServersSummary() } + .alert(item: $alert) { $0.alert } } private func shareButton() -> some View { @@ -88,7 +90,7 @@ struct ServersSummaryView: View { case (.allUsers, .smp): if summ.allUsedSMP.count > 0 || summ.allPrevSMP.count > 0 || summ.allProxSMP.count > 0 { if summ.allUsedSMP.count > 0 { - smpServersListView(summ.allUsedSMP, showReconnectButton: true, summ.statsStartedAt, "Currently used") + smpServersListView(summ.allUsedSMP, showReconnectButton: true, summ.statsStartedAt, "Current session") } if summ.allPrevSMP.count > 0 { smpServersListView(summ.allPrevSMP, showReconnectButton: false, summ.statsStartedAt, "Previously used") @@ -96,13 +98,14 @@ struct ServersSummaryView: View { if summ.allProxSMP.count > 0 { smpServersListView(summ.allProxSMP, showReconnectButton: false, summ.statsStartedAt, "Proxied", "You are not connected to these servers directly.") } + resetStatsButtonSection() } else { noCategoryInfoText() } case (.currentUser, .smp): if summ.userUsedSMP.count > 0 || summ.userPrevSMP.count > 0 || summ.userProxSMP.count > 0 { if summ.userUsedSMP.count > 0 { - smpServersListView(summ.userUsedSMP, showReconnectButton: true, summ.statsStartedAt, "Currently used") + smpServersListView(summ.userUsedSMP, showReconnectButton: true, summ.statsStartedAt, "Current session") } if summ.userPrevSMP.count > 0 { smpServersListView(summ.userPrevSMP, showReconnectButton: false, summ.statsStartedAt, "Previously used") @@ -110,40 +113,35 @@ struct ServersSummaryView: View { if summ.userProxSMP.count > 0 { smpServersListView(summ.userProxSMP, showReconnectButton: false, summ.statsStartedAt, "Proxied", "You are not connected to these servers directly.") } + resetStatsButtonSection() } else { noCategoryInfoText() } case (.allUsers, .xftp): if summ.allUsedXFTP.count > 0 || summ.allPrevXFTP.count > 0 { if summ.allUsedXFTP.count > 0 { - xftpServersListView(summ.allUsedXFTP, summ.statsStartedAt, "Currently used") + xftpServersListView(summ.allUsedXFTP, summ.statsStartedAt, "Current session") } if summ.allPrevXFTP.count > 0 { xftpServersListView(summ.allPrevXFTP, summ.statsStartedAt, "Previously used") } + resetStatsButtonSection() } else { noCategoryInfoText() } case (.currentUser, .xftp): if summ.userUsedXFTP.count > 0 || summ.userPrevXFTP.count > 0 { if summ.userUsedXFTP.count > 0 { - xftpServersListView(summ.userUsedXFTP, summ.statsStartedAt, "Currently used") + xftpServersListView(summ.userUsedXFTP, summ.statsStartedAt, "Current session") } if summ.userPrevXFTP.count > 0 { xftpServersListView(summ.userPrevXFTP, summ.statsStartedAt, "Previously used") } + resetStatsButtonSection() } else { noCategoryInfoText() } } - - Section { - Button { - // TODO - } label: { - Text("TODO Reset statistics") - } - } } } else { Text("No info, try to reload") @@ -247,6 +245,39 @@ struct ServersSummaryView: View { .listRowSeparator(.hidden) } + private func resetStatsButtonSection() -> some View { + Section { + Button { + alert = SomeAlert( + alert: Alert( + title: Text("Reset servers statistics?"), + message: Text("Servers statistics will be reset - this cannot be undone!"), + primaryButton: .destructive(Text("Reset")) { + Task { + do { + try await resetAgentServersStats() + getServersSummary() + } catch let error { + alert = SomeAlert( + alert: mkAlert( + title: "Error resetting statistics", + message: "\(responseError(error))" + ), + id: "error resetting statistics" + ) + } + } + }, + secondaryButton: .cancel() + ), + id: "reset statistics question" + ) + } label: { + Text("Reset statistics") + } + } + } + private func getServersSummary() { do { serversSummary = try getAgentServersSummary() diff --git a/apps/ios/SimpleXChat/APITypes.swift b/apps/ios/SimpleXChat/APITypes.swift index 939b5f0528..e81c84c648 100644 --- a/apps/ios/SimpleXChat/APITypes.swift +++ b/apps/ios/SimpleXChat/APITypes.swift @@ -145,6 +145,7 @@ public enum ChatCommand { // misc case showVersion case getAgentServersSummary(userId: Int64) + case resetAgentServersStats case string(String) public var cmdString: String { @@ -306,6 +307,7 @@ public enum ChatCommand { case let .apiStandaloneFileInfo(link): return "/_download info \(link)" case .showVersion: return "/version" case let .getAgentServersSummary(userId): return "/get servers summary \(userId)" + case .resetAgentServersStats: return "/reset servers stats" case let .string(str): return str } } @@ -442,6 +444,7 @@ public enum ChatCommand { case .apiStandaloneFileInfo: return "apiStandaloneFileInfo" case .showVersion: return "showVersion" case .getAgentServersSummary: return "getAgentServersSummary" + case .resetAgentServersStats: return "resetAgentServersStats" case .string: return "console command" } }