Improve Persistence Handling

This commit is contained in:
Sebastian Lenzlinger
2023-07-12 17:01:45 +02:00
parent d218e9b600
commit 8f4ecf0cb2
5 changed files with 39 additions and 3 deletions

View File

@@ -11,15 +11,20 @@ import Foundation
@MainActor
class DataStore: ObservableObject {
@Published var personalID: String
@Published var personalFeed: Feed
@Published var friends: [String:Int]
@Published var feedStores: [FeedStore]
init(personalID: String = "", friends: [String:Int] = [:], feedStores: [FeedStore] = []) {
init(personalID: String = "", personalFeed: Feed = Feed(), friends: [String:Int] = [:], feedStores: [FeedStore] = []) {
self.personalID = personalID
self.friends = friends
self.feedStores = feedStores
self.personalFeed = personalFeed
}
private func fileURL(for filename: String) throws -> URL {
try FileManager.default.url(for: .documentDirectory,
in: .userDomainMask,
@@ -90,6 +95,28 @@ class DataStore: ObservableObject {
_ = try await task.value
}
func savePersonalFeed() async throws {
let task = Task {
let data = try JSONEncoder().encode(personalFeed)
let outfile = try fileURL(for: "personalFeed")
try data.write(to: outfile)
}
_ = try await task.value
}
func loadPersonalFeed() async throws {
let task = Task<Feed, Error> {
let fileURL = try self.fileURL(for: "personalFeed")
guard let data = try? Data(contentsOf: fileURL) else {
return Feed(feedID: self.personalID)
}
let personalFeed = try JSONDecoder().decode(Feed.self, from: data)
return personalFeed
}
let personalFeed = try await task.value
self.personalFeed = personalFeed
}
}