feat: proxy provider update button

This commit is contained in:
mrFq1
2023-05-23 23:44:45 +08:00
parent 0a6ff05168
commit f0edccd4fb
5 changed files with 54 additions and 17 deletions

View File

@@ -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 {

View File

@@ -43,12 +43,14 @@ struct ProgressButton: View {
}
.frame(width: 12)
Spacer()
if title != "" {
Spacer()
Text(inProgress ? title2 : title)
.font(.system(size: 13))
Text(inProgress ? title2 : title)
.font(.system(size: 13))
Spacer()
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
}

View File

@@ -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?()
}

View File

@@ -11,11 +11,25 @@ struct ProxyProviderInfoView: View {
@ObservedObject var provider: DBProxyProvider
@EnvironmentObject var hideProxyNames: HideProxyNames
var body: some View {
VStack {
header
content
@State var withUpdateButton = false
@State var isUpdating = false
var body: some View {
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 {

View File

@@ -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)
}
}