|
// 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)
|
|
}
|
|
}
|