56 lines
1.4 KiB
Swift
56 lines
1.4 KiB
Swift
//
|
|
// Settings.swift
|
|
// QueueCube
|
|
//
|
|
// Created by James Magahern on 6/10/25.
|
|
//
|
|
|
|
import Foundation
|
|
|
|
struct Settings
|
|
{
|
|
var configuredServers: [Server]
|
|
|
|
func configuredServers(_ servers: [Server]) -> Self {
|
|
var copy = self
|
|
copy.configuredServers = servers
|
|
return copy
|
|
}
|
|
|
|
var isConfigured: Bool {
|
|
!configuredServers.isEmpty
|
|
}
|
|
|
|
static func fromDefaults() -> Settings {
|
|
let configuredServers: [Server] = {
|
|
guard let configuredServersData = UserDefaults.standard.data(forKey: Keys.configuredServers.rawValue)
|
|
else { return [] }
|
|
|
|
guard let configuredServers = try? PropertyListDecoder().decode([Server].self, from: configuredServersData)
|
|
else { return [] }
|
|
|
|
return configuredServers
|
|
}()
|
|
|
|
return Settings(configuredServers: configuredServers)
|
|
}
|
|
|
|
func save() {
|
|
let configuredServersData = try! PropertyListEncoder().encode(configuredServers)
|
|
UserDefaults.standard.set(configuredServersData, forKey: Keys.configuredServers.rawValue)
|
|
NotificationCenter.default.post(name: .settingsChanged, object: nil)
|
|
}
|
|
|
|
// MARK: - Types
|
|
|
|
enum Keys: String
|
|
{
|
|
case configuredServers
|
|
}
|
|
}
|
|
|
|
extension Notification.Name
|
|
{
|
|
static let settingsChanged = Notification.Name("settingsChanged")
|
|
}
|