From f0edccd4fbae88401eaa16372fb1319100be6c40 Mon Sep 17 00:00:00 2001 From: mrFq1 <1xxbx0il0@mozmail.com> Date: Tue, 23 May 2023 23:44:45 +0800 Subject: [PATCH] feat: proxy provider update button --- .../Models/DBProviderStorage.swift | 8 +++++ .../Views/APISetting/ProgressButton.swift | 19 +++++++---- .../Providers/ProviderProxiesView.swift | 7 +--- .../Providers/ProxyProviderInfoView.swift | 33 +++++++++++++++++-- .../Providers/ProxyProvidersRowView.swift | 4 +-- 5 files changed, 54 insertions(+), 17 deletions(-) diff --git a/ClashX Dashboard/Models/DBProviderStorage.swift b/ClashX Dashboard/Models/DBProviderStorage.swift index 8cb2fa2..5e10293 100644 --- a/ClashX Dashboard/Models/DBProviderStorage.swift +++ b/ClashX Dashboard/Models/DBProviderStorage.swift @@ -69,6 +69,14 @@ class DBProxyProvider: ObservableObject, Identifiable { self.updatedAt = "" } } + + func updateInfo(_ new: DBProxyProvider) { + proxies = new.proxies + updatedAt = new.updatedAt + expireDate = new.expireDate + trafficInfo = new.trafficInfo + trafficPercentage = new.trafficPercentage + } } class DBRuleProvider: ObservableObject, Identifiable { diff --git a/ClashX Dashboard/Views/APISetting/ProgressButton.swift b/ClashX Dashboard/Views/APISetting/ProgressButton.swift index 8051608..f9f2e1d 100644 --- a/ClashX Dashboard/Views/APISetting/ProgressButton.swift +++ b/ClashX Dashboard/Views/APISetting/ProgressButton.swift @@ -43,12 +43,14 @@ struct ProgressButton: View { } .frame(width: 12) - Spacer() - - Text(inProgress ? title2 : title) - .font(.system(size: 13)) - - Spacer() + if title != "" { + Spacer() + + Text(inProgress ? title2 : title) + .font(.system(size: 13)) + + Spacer() + } } .animation(.default, value: inProgress) .foregroundColor(inProgress ? .gray : .blue) @@ -61,6 +63,11 @@ struct ProgressButton: View { let str = titles.max { $0.count < $1.count } ?? "" + + if str == "" { + return 12 + 8 + } + let w = str.size(withAttributes: [.font: NSFont.systemFont(ofSize: 13)]).width return w + 12 + 45 } diff --git a/ClashX Dashboard/Views/ContentTabs/Providers/ProviderProxiesView.swift b/ClashX Dashboard/Views/ContentTabs/Providers/ProviderProxiesView.swift index e60c5df..48b965b 100644 --- a/ClashX Dashboard/Views/ContentTabs/Providers/ProviderProxiesView.swift +++ b/ClashX Dashboard/Views/ContentTabs/Providers/ProviderProxiesView.swift @@ -126,12 +126,7 @@ struct ProviderProxiesView: View { func updateProvider(_ completeHandler: (() -> Void)? = nil) { ApiRequest.requestProxyProviderList { resp in if let p = resp.allProviders[provider.name] { - let new = DBProxyProvider(provider: p) - provider.proxies = new.proxies - provider.updatedAt = new.updatedAt - provider.expireDate = new.expireDate - provider.trafficInfo = new.trafficInfo - provider.trafficPercentage = new.trafficPercentage + provider.updateInfo(DBProxyProvider(provider: p)) } completeHandler?() } diff --git a/ClashX Dashboard/Views/ContentTabs/Providers/ProxyProviderInfoView.swift b/ClashX Dashboard/Views/ContentTabs/Providers/ProxyProviderInfoView.swift index 86463c2..003061d 100644 --- a/ClashX Dashboard/Views/ContentTabs/Providers/ProxyProviderInfoView.swift +++ b/ClashX Dashboard/Views/ContentTabs/Providers/ProxyProviderInfoView.swift @@ -11,11 +11,25 @@ struct ProxyProviderInfoView: View { @ObservedObject var provider: DBProxyProvider @EnvironmentObject var hideProxyNames: HideProxyNames + @State var withUpdateButton = false + @State var isUpdating = false + var body: some View { - VStack { - header - content + HStack { + VStack { + header + content + } + if withUpdateButton { + ProgressButton( + title: "", + title2: "", + iconName: "arrow.clockwise", + inProgress: $isUpdating) { + update() + } + } } } @@ -53,6 +67,19 @@ struct ProxyProviderInfoView: View { .font(.system(size: 12)) .foregroundColor(.secondary) } + + func update() { + isUpdating = true + let name = provider.name + ApiRequest.updateProvider(for: .proxy, name: name) { _ in + ApiRequest.requestProxyProviderList() { resp in + if let p = resp.allProviders[provider.name] { + provider.updateInfo(DBProxyProvider(provider: p)) + } + isUpdating = false + } + } + } } //struct ProxyProviderInfoView_Previews: PreviewProvider { diff --git a/ClashX Dashboard/Views/ContentTabs/Providers/ProxyProvidersRowView.swift b/ClashX Dashboard/Views/ContentTabs/Providers/ProxyProvidersRowView.swift index 96da9b8..827ceea 100644 --- a/ClashX Dashboard/Views/ContentTabs/Providers/ProxyProvidersRowView.swift +++ b/ClashX Dashboard/Views/ContentTabs/Providers/ProxyProvidersRowView.swift @@ -52,8 +52,8 @@ struct ProxyProvidersRowView: View { } var listView: some View { - ForEach(providers, id: \.id) { - ProxyProviderInfoView(provider: $0) + ForEach(providers, id: \.id) { provider in + ProxyProviderInfoView(provider: provider, withUpdateButton: true) } }