Files
aris-old/IrisCompanion/iris/Models/StockSettingsStore.swift

49 lines
1.4 KiB
Swift
Raw Permalink Normal View History

//
// StockSettingsStore.swift
// iris
//
import Foundation
import Combine
@MainActor
final class StockSettingsStore: ObservableObject {
nonisolated static let userDefaultsKey = "iris.stock.symbols"
@Published private(set) var symbols: [String] = []
private let maxSymbols = 5
init() {
loadSymbols()
}
private func loadSymbols() {
symbols = UserDefaults.standard.stringArray(forKey: Self.userDefaultsKey) ?? []
}
func saveSymbols(_ newSymbols: [String]) {
let cleaned = newSymbols
.map { $0.uppercased().trimmingCharacters(in: .whitespacesAndNewlines) }
.filter { !$0.isEmpty }
.prefix(maxSymbols)
symbols = Array(cleaned)
UserDefaults.standard.set(symbols, forKey: Self.userDefaultsKey)
}
@discardableResult
func addSymbol(_ symbol: String) -> Bool {
guard symbols.count < maxSymbols else { return false }
let cleaned = symbol.uppercased().trimmingCharacters(in: .whitespacesAndNewlines)
guard !cleaned.isEmpty, !symbols.contains(cleaned) else { return false }
symbols.append(cleaned)
UserDefaults.standard.set(symbols, forKey: Self.userDefaultsKey)
return true
}
func removeSymbol(_ symbol: String) {
symbols.removeAll { $0 == symbol.uppercased() }
UserDefaults.standard.set(symbols, forKey: Self.userDefaultsKey)
}
}