Sesame-iOS/Sesame/HistoryManager.swift

60 lines
1.6 KiB
Swift
Raw Normal View History

import Foundation
final class HistoryManager {
private var fm: FileManager {
.default
}
var documentDirectory: URL {
try! fm.url(
for: .documentDirectory,
in: .userDomainMask,
appropriateFor: nil, create: true)
}
private var fileUrl: URL {
documentDirectory.appendingPathComponent("history.bin")
}
func loadEntries() -> [HistoryItem] {
let url = fileUrl
guard fm.fileExists(atPath: url.path) else {
print("No history data found")
return []
}
let content: Data
do {
content = try Data(contentsOf: url)
} catch {
print("Failed to read history data: \(error)")
return []
}
var index = 0
var entries = [HistoryItem]()
while index < content.count {
guard let entry = HistoryItem(decodeFrom: content, index: &index) else {
print("Failed to read entry at index \(index)")
return entries
}
entries.append(entry)
}
return entries.sorted().reversed()
}
func save(item: HistoryItem) throws {
let url = fileUrl
let data = item.encoded
guard fm.fileExists(atPath: url.path) else {
try data.write(to: url)
print("First history item written")
return
}
let handle = try FileHandle(forWritingTo: url)
try handle.seekToEnd()
try handle.write(contentsOf: data)
try handle.close()
print("History item written")
}
}