Meshtastic-Apple/MeshtasticClient/Model/MessageData.swift
2021-09-28 00:00:09 -07:00

52 lines
1.8 KiB
Swift

import Foundation
class MessageData: ObservableObject {
private static var documentsFolder: URL {
do {
return try FileManager.default.url(for: .documentDirectory,
in: .userDomainMask,
appropriateFor: nil,
create: true)
} catch {
fatalError("Can't find documents directory.")
}
}
private static var fileURL: URL {
return documentsFolder.appendingPathComponent("messages.data")
}
@Published var messages: [MessageModel] = []
func load() {
DispatchQueue.global(qos: .background).async { [weak self] in
guard let data = try? Data(contentsOf: Self.fileURL) else {
#if DEBUG
DispatchQueue.main.async {
self?.messages = MessageModel.data
}
#endif
return
}
guard let messageList = try? JSONDecoder().decode([MessageModel].self, from: data) else {
fatalError("Can't decode saved node data.")
}
DispatchQueue.main.async {
self?.messages = messageList
}
}
}
func save() {
DispatchQueue.global(qos: .background).async { [weak self] in
guard let messages = self?.messages else { fatalError("Self out of scope") }
guard let data = try? JSONEncoder().encode(messages) else { fatalError("Error encoding data") }
do {
let outfile = Self.fileURL
try data.write(to: outfile)
} catch {
fatalError("Can't write to file")
}
}
}
}