// retoor <retoor@molodetz.nl>
import Foundation
actor StateManager {
private struct State: Codable {
var lastMentionTime: Int
}
private let stateURL: URL
private var state: State
init() {
let homeDir = FileManager.default.homeDirectoryForCurrentUser
let grokiiDir = homeDir.appendingPathComponent(".grokii")
try? FileManager.default.createDirectory(at: grokiiDir, withIntermediateDirectories: true)
self.stateURL = grokiiDir.appendingPathComponent("state.json")
if let data = try? Data(contentsOf: stateURL),
let loaded = try? JSONDecoder().decode(State.self, from: data) {
self.state = loaded
} else {
self.state = State(lastMentionTime: 0)
}
}
var lastMentionTime: Int {
state.lastMentionTime
}
func updateLastMentionTime(_ time: Int) {
guard time > state.lastMentionTime else { return }
state.lastMentionTime = time
save()
}
private func save() {
guard let data = try? JSONEncoder().encode(state) else { return }
try? data.write(to: stateURL, options: .atomic)
}
}