Files
Termind/Frameworks/TermindPersistence/PersistentSFTPPreferences.swift
T
2026-09-19 22:42:15 +08:00

33 lines
1.3 KiB
Swift

import Foundation
import SwiftData
import TermindApplication
import TermindDomain
@Model
public final class PersistentSFTPPreferences {
@Attribute(.unique) public var key = "default"
public var data = Data()
public init(_ value: SFTPPreferences) throws { try apply(value) }
public func load() throws -> SFTPPreferences { try JSONDecoder().decode(SFTPPreferences.self, from: data) }
public func apply(_ value: SFTPPreferences) throws { data = try JSONEncoder().encode(value.normalized) }
}
extension SFTPPreferences {
public init(defaults: UserDefaults) {
self.init(
globalLimit: defaults.object(forKey: SettingsKey.sftpGlobalTransferLimit) as? Int
?? Self.defaultGlobalLimit,
perHostLimit: defaults.object(forKey: SettingsKey.sftpPerHostTransferLimit) as? Int
?? Self.defaultPerHostLimit,
strategy: defaults.string(forKey: SettingsKey.sftpConcurrencyStrategy)
.flatMap(SFTPConcurrencyStrategy.init(rawValue:)) ?? .smart)
}
public func mirror(to defaults: UserDefaults) {
defaults.set(globalLimit, forKey: SettingsKey.sftpGlobalTransferLimit)
defaults.set(perHostLimit, forKey: SettingsKey.sftpPerHostTransferLimit)
defaults.set(strategy.rawValue, forKey: SettingsKey.sftpConcurrencyStrategy)
}
}