mirror of
https://github.com/shadowsocks/ShadowsocksX-NG.git
synced 2026-11-08 11:04:51 +00:00
23 lines
791 B
Swift
23 lines
791 B
Swift
import Combine
|
|
import Foundation
|
|
|
|
/// Each preset owns an unchanged workflow, including its in-flight operations.
|
|
@MainActor
|
|
final class RulesWorkspaces: ObservableObject {
|
|
@Published var selectedPreset: RulePreset = .gfwlist
|
|
@Published private(set) var reportSource: RulesSourceSnapshot?
|
|
private let workflows: [RulePreset: RulesWorkflow]
|
|
private var reports: Set<AnyCancellable> = []
|
|
|
|
init(makeWorkflow: (RulePreset) -> RulesWorkflow) {
|
|
workflows = Dictionary(uniqueKeysWithValues: RulePreset.allCases.map { ($0, makeWorkflow($0)) })
|
|
for workflow in workflows.values {
|
|
workflow.$reportSource.compactMap { $0 }.sink { [weak self] in
|
|
self?.reportSource = $0
|
|
}.store(in: &reports)
|
|
}
|
|
}
|
|
|
|
var current: RulesWorkflow { workflows[selectedPreset]! }
|
|
}
|