mirror of
https://github.com/yJason/ClashX-Dashboard.git
synced 2026-02-04 10:02:26 +08:00
feat: proxy provider update button
This commit is contained in:
@@ -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 {
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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?()
|
||||
}
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user