leganto-apple/Leganto/DataController.swift

79 lines
2.8 KiB
Swift
Raw Normal View History

//
// DataController.swift
// Leganto
//
// Created by Louis Hollingworth on 2023-05-21.
//
import CoreData
class DataController: ObservableObject {
static let shared = DataController()
static var preview: DataController {
let result = DataController(inMemory: true)
let viewContext = result.container.viewContext
for i in 0..<3 {
for j in 1...3 {
let newFeed = Feed(context: viewContext)
switch i {
case 2:
newFeed.genre = Genre.technology.rawValue
break
case 3:
newFeed.genre = Genre.news.rawValue
break
default:
newFeed.genre = Genre.uncategorised.rawValue
break
}
newFeed.name = "\(i+j)"
newFeed.dateAdded = Date()
newFeed.dateUpdated = Date()
newFeed.desc = "\(i+j)"
newFeed.url = "https://git.ludoviko.ch/lucxjo/leganto.rss"
}
}
do {
try viewContext.save()
} catch {
let nsError = error as NSError
fatalError("Unresolved error \(nsError), \(nsError.userInfo)")
}
return result
}
let container: NSPersistentCloudKitContainer
init(inMemory: Bool = false) {
container = NSPersistentCloudKitContainer(name: "Leganto")
if inMemory {
container.persistentStoreDescriptions.first!.url = URL(fileURLWithPath: "/dev/null")
}
container.loadPersistentStores(completionHandler: { (storeDescription, error) in
if let error = error as NSError? {
// Replace this implementation with code to handle the error appropriately.
// fatalError() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development.
/*
Typical reasons for an error here include:
* The parent directory does not exist, cannot be created, or disallows writing.
* The persistent store is not accessible, due to permissions or data protection when the device is locked.
* The device is out of space.
* The store could not be migrated to the current model version.
Check the error message to determine what the actual problem was.
*/
fatalError("Unresolved error \(error), \(error.userInfo)")
}
})
container.viewContext.automaticallyMergesChangesFromParent = true
}
}