55 lines
1.9 KiB
Swift
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)
|
|
}
|
|
}
|