ClashX.Meta/ClashX/Actions/UpdateExternalResourceActio...

55 lines
1.9 KiB
Swift

//
// UpdateExternalResourceAction.swift
// ClashX
//
// Created by yicheng on 2023/9/4.
// Copyright © 2023 west2online. All rights reserved.
//
import Foundation
enum UpdateExternalResourceAction {
static func run() {
ApiRequest.requestExternalProviderNames { provider in
let group = DispatchGroup()
var successCount = 0
let totalCount = provider.proxies.count + provider.rules.count
if totalCount == 0 {
onFinished(success: 0, total: 0, fails: [])
return
}
var fails = [String]()
for name in provider.proxies {
group.enter()
ApiRequest.updateProvider(name: name, type: .proxy) { success in
if success { successCount += 1 } else {
fails.append(name)
}
group.leave()
}
}
for name in provider.rules {
group.enter()
ApiRequest.updateProvider(name: name, type: .rule) { success in
if success { successCount += 1 } else {
fails.append(name)
}
group.leave()
}
}
group.notify(queue: .main) {
onFinished(success: successCount, total: totalCount, fails: fails)
}
}
}
private static func onFinished(success: Int, total: Int, fails: [String]) {
var info = String(format: NSLocalizedString("total: %d, success: %d", comment: ""), total, success)
if !fails.isEmpty {
info.append(String(format: NSLocalizedString("fails: %@", comment: ""), fails.joined(separator: " ")))
}
NSUserNotificationCenter.default.post(title: NSLocalizedString("Update external resource complete", comment: ""), info: info)
}
}