// // ConfigManager.swift // ClashX // // Created by CYC on 2018/6/12. // Copyright © 2018年 yichengchen. All rights reserved. // import Cocoa import Foundation class ConfigManager { static let shared = ConfigManager() var apiPort = "9090" var apiSecret: String = "" var overrideApiURL: URL? var overrideSecret: String? var isRunning: Bool = false { didSet { NotificationCenter.default.post(.init(name: .init("ClashRunningStateChanged"))) } } var benchMarkUrl: String = UserDefaults.standard.string(forKey: "benchMarkUrl") ?? "http://cp.cloudflare.com/generate_204" { didSet { UserDefaults.standard.set(benchMarkUrl, forKey: "benchMarkUrl") } } static var apiUrl: String { if let override = shared.overrideApiURL { return override.absoluteString } return "http://127.0.0.1:\(shared.apiPort)" } static var webSocketUrl: String { if let override = shared.overrideApiURL, var comp = URLComponents(url: override, resolvingAgainstBaseURL: true) { if comp.scheme == "https" { comp.scheme = "wss" } else { comp.scheme = "ws" } return comp.url?.absoluteString ?? "" } return "ws://127.0.0.1:\(shared.apiPort)" } static var selectLoggingApiLevel: ClashLogLevel { get { return ClashLogLevel(rawValue: UserDefaults.standard.string(forKey: "selectLoggingApiLevel") ?? "") ?? .info } set { UserDefaults.standard.set(newValue.rawValue, forKey: "selectLoggingApiLevel") } } }