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 = ""
|
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 {
|
class DBRuleProvider: ObservableObject, Identifiable {
|
||||||
|
|||||||
@@ -43,12 +43,14 @@ struct ProgressButton: View {
|
|||||||
}
|
}
|
||||||
.frame(width: 12)
|
.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)
|
.animation(.default, value: inProgress)
|
||||||
.foregroundColor(inProgress ? .gray : .blue)
|
.foregroundColor(inProgress ? .gray : .blue)
|
||||||
@@ -61,6 +63,11 @@ struct ProgressButton: View {
|
|||||||
let str = titles.max {
|
let str = titles.max {
|
||||||
$0.count < $1.count
|
$0.count < $1.count
|
||||||
} ?? ""
|
} ?? ""
|
||||||
|
|
||||||
|
if str == "" {
|
||||||
|
return 12 + 8
|
||||||
|
}
|
||||||
|
|
||||||
let w = str.size(withAttributes: [.font: NSFont.systemFont(ofSize: 13)]).width
|
let w = str.size(withAttributes: [.font: NSFont.systemFont(ofSize: 13)]).width
|
||||||
return w + 12 + 45
|
return w + 12 + 45
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -126,12 +126,7 @@ struct ProviderProxiesView: View {
|
|||||||
func updateProvider(_ completeHandler: (() -> Void)? = nil) {
|
func updateProvider(_ completeHandler: (() -> Void)? = nil) {
|
||||||
ApiRequest.requestProxyProviderList { resp in
|
ApiRequest.requestProxyProviderList { resp in
|
||||||
if let p = resp.allProviders[provider.name] {
|
if let p = resp.allProviders[provider.name] {
|
||||||
let new = DBProxyProvider(provider: p)
|
provider.updateInfo(DBProxyProvider(provider: p))
|
||||||
provider.proxies = new.proxies
|
|
||||||
provider.updatedAt = new.updatedAt
|
|
||||||
provider.expireDate = new.expireDate
|
|
||||||
provider.trafficInfo = new.trafficInfo
|
|
||||||
provider.trafficPercentage = new.trafficPercentage
|
|
||||||
}
|
}
|
||||||
completeHandler?()
|
completeHandler?()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,11 +11,25 @@ struct ProxyProviderInfoView: View {
|
|||||||
@ObservedObject var provider: DBProxyProvider
|
@ObservedObject var provider: DBProxyProvider
|
||||||
@EnvironmentObject var hideProxyNames: HideProxyNames
|
@EnvironmentObject var hideProxyNames: HideProxyNames
|
||||||
|
|
||||||
|
@State var withUpdateButton = false
|
||||||
|
@State var isUpdating = false
|
||||||
|
|
||||||
var body: some View {
|
var body: some View {
|
||||||
VStack {
|
HStack {
|
||||||
header
|
VStack {
|
||||||
content
|
header
|
||||||
|
content
|
||||||
|
}
|
||||||
|
|
||||||
|
if withUpdateButton {
|
||||||
|
ProgressButton(
|
||||||
|
title: "",
|
||||||
|
title2: "",
|
||||||
|
iconName: "arrow.clockwise",
|
||||||
|
inProgress: $isUpdating) {
|
||||||
|
update()
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -53,6 +67,19 @@ struct ProxyProviderInfoView: View {
|
|||||||
.font(.system(size: 12))
|
.font(.system(size: 12))
|
||||||
.foregroundColor(.secondary)
|
.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 {
|
//struct ProxyProviderInfoView_Previews: PreviewProvider {
|
||||||
|
|||||||
@@ -52,8 +52,8 @@ struct ProxyProvidersRowView: View {
|
|||||||
}
|
}
|
||||||
|
|
||||||
var listView: some View {
|
var listView: some View {
|
||||||
ForEach(providers, id: \.id) {
|
ForEach(providers, id: \.id) { provider in
|
||||||
ProxyProviderInfoView(provider: $0)
|
ProxyProviderInfoView(provider: provider, withUpdateButton: true)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user