Zum Inhalt

apple/PhysarumApp/Sources/Model/FileSlotBackend.swift

import Foundation

/// Local JSON persistence — the fallback when iCloud is unavailable / the user isn't signed in. No
/// external-change source (single-device), so `onExternalChange` is never called.
final class FileSlotBackend: SlotBackend {
    private let url: URL
    var onExternalChange: (() -> Void)?
    var onLoaded: ((Bool) -> Void)?
    var isLoaded: Bool { true }   // local file is authoritative immediately
    init(url: URL) { self.url = url }
    func read() -> SlotPayload {
        (try? JSONDecoder().decode(SlotPayload.self, from: Data(contentsOf: url))) ?? SlotPayload()
    }
    func write(_ payload: SlotPayload) { try? JSONEncoder().encode(payload).write(to: url) }
    func flush() {}
}