2019-11-01 20:47:55 +08:00
|
|
|
//
|
|
|
|
// SavedProxyModel.swift
|
|
|
|
// ClashX
|
|
|
|
//
|
|
|
|
// Created by yicheng on 2019/11/1.
|
|
|
|
// Copyright © 2019 west2online. All rights reserved.
|
|
|
|
//
|
|
|
|
|
|
|
|
import Cocoa
|
|
|
|
|
|
|
|
struct SavedProxyModel: Codable {
|
|
|
|
let group: ClashProxyName
|
|
|
|
let selected: ClashProxyName
|
|
|
|
let config: String
|
|
|
|
|
2019-12-11 22:04:53 +08:00
|
|
|
var key: String {
|
2019-12-11 20:27:17 +08:00
|
|
|
return "\(group)_\(config)"
|
2019-11-01 20:47:55 +08:00
|
|
|
}
|
2019-12-11 22:04:53 +08:00
|
|
|
|
2019-12-11 20:27:17 +08:00
|
|
|
static let key = "SavedProxyModels"
|
2019-11-02 11:55:18 +08:00
|
|
|
|
2019-11-01 20:47:55 +08:00
|
|
|
static func loadsFromUserDefault() -> [SavedProxyModel] {
|
|
|
|
if let data = UserDefaults.standard.object(forKey: key) as? Data,
|
|
|
|
let models = try? JSONDecoder().decode([SavedProxyModel].self, from: data) {
|
2019-12-11 20:27:17 +08:00
|
|
|
var set = Set<String>()
|
2020-06-06 13:36:06 +08:00
|
|
|
let filtered = models.filter({ model in
|
2019-12-11 20:27:17 +08:00
|
|
|
let pass = !set.contains(model.key)
|
|
|
|
set.insert(model.key)
|
2020-06-06 13:36:06 +08:00
|
|
|
if !pass {
|
|
|
|
print("pass", model)
|
|
|
|
}
|
2019-12-11 20:27:17 +08:00
|
|
|
return pass
|
|
|
|
})
|
2020-06-06 13:36:06 +08:00
|
|
|
return filtered
|
2019-11-01 20:47:55 +08:00
|
|
|
}
|
|
|
|
return []
|
|
|
|
}
|
2019-11-02 11:55:18 +08:00
|
|
|
|
2019-11-01 20:47:55 +08:00
|
|
|
static func save(_ models: [SavedProxyModel]) {
|
2020-06-06 13:36:06 +08:00
|
|
|
do {
|
|
|
|
let data = try JSONEncoder().encode(models)
|
2019-11-01 20:47:55 +08:00
|
|
|
UserDefaults.standard.set(data, forKey: key)
|
2020-06-06 13:36:06 +08:00
|
|
|
} catch let err {
|
|
|
|
Logger.log("save model fail,\(err)", level: .error)
|
|
|
|
assertionFailure()
|
2019-11-01 20:47:55 +08:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2019-11-02 11:55:18 +08:00
|
|
|
extension SavedProxyModel: Equatable {}
|