60 lines
1.9 KiB
Swift
60 lines
1.9 KiB
Swift
import Foundation
|
|
|
|
protocol WorkspaceStoreType {
|
|
func loadWorkspaceSummaries() -> [WorkspaceSummary]
|
|
func saveWorkspaceSummaries(_ summaries: [WorkspaceSummary])
|
|
}
|
|
|
|
protocol ScreenAssignmentStoreType {
|
|
func loadScreenAssignments() -> [ScreenID: WorkspaceID]
|
|
func saveScreenAssignments(_ assignments: [ScreenID: WorkspaceID])
|
|
}
|
|
|
|
struct UserDefaultsWorkspaceStore: WorkspaceStoreType {
|
|
private let defaults: UserDefaults
|
|
private let encoder = JSONEncoder()
|
|
private let decoder = JSONDecoder()
|
|
|
|
init(defaults: UserDefaults = .standard) {
|
|
self.defaults = defaults
|
|
}
|
|
|
|
func loadWorkspaceSummaries() -> [WorkspaceSummary] {
|
|
guard let data = defaults.data(forKey: NotchSettings.Keys.workspaceSummaries),
|
|
let summaries = try? decoder.decode([WorkspaceSummary].self, from: data) else {
|
|
return []
|
|
}
|
|
|
|
return summaries
|
|
}
|
|
|
|
func saveWorkspaceSummaries(_ summaries: [WorkspaceSummary]) {
|
|
guard let data = try? encoder.encode(summaries) else { return }
|
|
defaults.set(data, forKey: NotchSettings.Keys.workspaceSummaries)
|
|
}
|
|
}
|
|
|
|
struct UserDefaultsScreenAssignmentStore: ScreenAssignmentStoreType {
|
|
private let defaults: UserDefaults
|
|
private let encoder = JSONEncoder()
|
|
private let decoder = JSONDecoder()
|
|
|
|
init(defaults: UserDefaults = .standard) {
|
|
self.defaults = defaults
|
|
}
|
|
|
|
func loadScreenAssignments() -> [ScreenID: WorkspaceID] {
|
|
guard let data = defaults.data(forKey: NotchSettings.Keys.screenAssignments),
|
|
let assignments = try? decoder.decode([ScreenID: WorkspaceID].self, from: data) else {
|
|
return [:]
|
|
}
|
|
|
|
return assignments
|
|
}
|
|
|
|
func saveScreenAssignments(_ assignments: [ScreenID: WorkspaceID]) {
|
|
guard let data = try? encoder.encode(assignments) else { return }
|
|
defaults.set(data, forKey: NotchSettings.Keys.screenAssignments)
|
|
}
|
|
}
|