/
KellerDmitry
/
KellerNotch
Обзор
Документация
Войти
/
KellerDmitry
/
KellerNotch
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
Sources/JSONStore.swift
61 строка
2 KB
Keller Dmitry
feat: Implement Clipboard Management System with Notch Panel UI
06 авг 2026, 15:57
06 авг 2026, 15:57
bcecb15
Код
Авторство
О чём код?
import Foundation /// Всё локально: ~/Library/Application Support/KellerNotch/*.json enum JSONStore { private static let directory: URL = { let url = FileManager.default .urls(for: .applicationSupportDirectory, in: .userDomainMask)[0] .appending(path: "KellerNotch") try? FileManager.default.createDirectory(at: url, withIntermediateDirectories: true) return url }() static func load<T: Decodable>(_ type: T.Type, from file: String) -> T? { guard let data = try? Data(contentsOf: directory.appending(path: file)) else { return nil } do { return try JSONDecoder().decode(type, from: data) } catch { NSLog("KellerNotch: битый \(file), игнорирую: \(error)") return nil } } static func save<T: Encodable>(_ value: T, to file: String) { do { let data = try JSONEncoder().encode(value) try data.write(to: directory.appending(path: file), options: .atomic) } catch { NSLog("KellerNotch: не сохранил \(file): \(error)") } } } enum Prefs { static let textLimit = "textLimit" static let imageLimit = "imageLimit" static let paused = "monitoringPaused" static let panelWidth = "panelWidth" static let panelHeight = "panelHeight" static let defaultTab = "defaultTab" static func registerDefaults() { UserDefaults.standard.register(defaults: [ textLimit: 200, imageLimit: 50, paused: false, panelWidth: 660, panelHeight: 420, defaultTab: NotchTab.clipboard.rawValue, ]) } static var textLimitValue: Int { UserDefaults.standard.integer(forKey: textLimit) } static var imageLimitValue: Int { UserDefaults.standard.integer(forKey: imageLimit) } static var isPaused: Bool { UserDefaults.standard.bool(forKey: paused) } static var panelWidthValue: CGFloat { CGFloat(UserDefaults.standard.integer(forKey: panelWidth)) } static var panelHeightValue: CGFloat { CGFloat(UserDefaults.standard.integer(forKey: panelHeight)) } static var defaultTabValue: NotchTab { NotchTab(rawValue: UserDefaults.standard.string(forKey: defaultTab) ?? "") ?? .clipboard } }