Reset library now working
This commit is contained in:
@@ -24,7 +24,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
|
|||||||
|
|
||||||
print("disFinishLaunchung")
|
print("disFinishLaunchung")
|
||||||
|
|
||||||
ICloudManager.shared.preload_all_data()
|
//ICloudManager.shared.preload_all_data()
|
||||||
|
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,17 +13,6 @@ import SwiftUI
|
|||||||
|
|
||||||
@objc(Game)
|
@objc(Game)
|
||||||
public class Game: NSManagedObject, Identifiable {
|
public class Game: NSManagedObject, Identifiable {
|
||||||
// public func addGameSeries(by objectIDStringified : String) {
|
|
||||||
// if let url = URL(string: objectIDStringified) {
|
|
||||||
// let persistentStoreCoordinator = CDManager.shared.persistentContainer.persistentStoreCoordinator
|
|
||||||
//
|
|
||||||
// if let objectID = persistentStoreCoordinator.managedObjectID(forURIRepresentation: url) {
|
|
||||||
// if let gameSeries = CDManager.shared.viewContext.object(with: objectID) as? GameSeries {
|
|
||||||
// self.series = gameSeries
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
public static func compareByCreationDate(gameA : Game, gameB : Game) -> Bool {
|
public static func compareByCreationDate(gameA : Game, gameB : Game) -> Bool {
|
||||||
return gameA.createdAt < gameB.createdAt
|
return gameA.createdAt < gameB.createdAt
|
||||||
|
|||||||
@@ -29,6 +29,7 @@ class LibraryImport {
|
|||||||
return .none
|
return .none
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func backupFiles() -> [String] {
|
func backupFiles() -> [String] {
|
||||||
do {
|
do {
|
||||||
guard let documentDirectory = try ICloudManager.backup_folder else { return [] }
|
guard let documentDirectory = try ICloudManager.backup_folder else { return [] }
|
||||||
@@ -53,23 +54,26 @@ class LibraryImport {
|
|||||||
return []
|
return []
|
||||||
}
|
}
|
||||||
|
|
||||||
private func resetDatabase() {
|
func resetDatabase(games : [Game], accessories : [Accessory], consoles : [Console], gameSeries: [GameSeries]) {
|
||||||
self.CDContext.reset()
|
|
||||||
self.CDContext.performAndWait {
|
self.CDContext.performAndWait {
|
||||||
let deleteRequests =
|
// let gamesFR = NSFetchRequest<Game>(entityName: "Game")
|
||||||
[NSBatchDeleteRequest(fetchRequest: Game.fetchRequest()),
|
// let accessoriesFR = NSFetchRequest<Accessory>(entityName: "Accessory")
|
||||||
NSBatchDeleteRequest(fetchRequest: Accessory.fetchRequest()),
|
// let consoleFR = NSFetchRequest<Console>(entityName: "Console")
|
||||||
NSBatchDeleteRequest(fetchRequest: Console.fetchRequest()),
|
// let gameSeriesFR = NSFetchRequest<GameSeries>(entityName: "GameSeries")
|
||||||
NSBatchDeleteRequest(fetchRequest: GameSeries.fetchRequest())]
|
//
|
||||||
|
// let games = try CDManager.shared.viewContext.fetch(gamesFR) as [NSManagedObject]
|
||||||
|
// let accessories = try CDManager.shared.viewContext.fetch(accessoriesFR) as [NSManagedObject]
|
||||||
|
// let consoles = try CDManager.shared.viewContext.fetch(consoleFR) as [NSManagedObject]
|
||||||
|
// let gameSeries = try CDManager.shared.viewContext.fetch(gameSeriesFR) as [NSManagedObject]
|
||||||
|
//
|
||||||
|
var core_data_objects : [NSManagedObject] = []
|
||||||
|
core_data_objects.append(contentsOf: games)
|
||||||
|
core_data_objects.append(contentsOf: accessories)
|
||||||
|
core_data_objects.append(contentsOf: consoles)
|
||||||
|
core_data_objects.append(contentsOf: gameSeries)
|
||||||
|
|
||||||
let storeCoordinator = CDManager.shared.persistentContainer.persistentStoreCoordinator
|
for cdObject in core_data_objects {
|
||||||
do {
|
CDManager.shared.viewContext.delete(cdObject)
|
||||||
for deleteRequest in deleteRequests {
|
|
||||||
try storeCoordinator.execute(deleteRequest, with: CDContext)
|
|
||||||
}
|
|
||||||
}catch let error {
|
|
||||||
print(error)
|
|
||||||
print("LibraryImport::resetDatabase - Reset of Database failes!")
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -158,7 +162,6 @@ class LibraryImport {
|
|||||||
func importLIB(data : Data) {
|
func importLIB(data : Data) {
|
||||||
do {
|
do {
|
||||||
let library = try JSONDecoder().decode(BHLibrary.self, from: data)
|
let library = try JSONDecoder().decode(BHLibrary.self, from: data)
|
||||||
resetDatabase()
|
|
||||||
|
|
||||||
var gameDict = [UUID:Game]()
|
var gameDict = [UUID:Game]()
|
||||||
var accessoryDict = [UUID:Accessory]()
|
var accessoryDict = [UUID:Accessory]()
|
||||||
@@ -191,6 +194,8 @@ class LibraryImport {
|
|||||||
}catch let error {
|
}catch let error {
|
||||||
print("LibraryImport::importLIB::DATA - Error while importing! '\(error)'")
|
print("LibraryImport::importLIB::DATA - Error while importing! '\(error)'")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
print("Import Successfull")
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,45 +19,65 @@ struct SettingsView: View {
|
|||||||
@State var backupImportUpdateExistingEntrys = false
|
@State var backupImportUpdateExistingEntrys = false
|
||||||
@State var importFiles : [String] = LibraryImport().backupFiles()
|
@State var importFiles : [String] = LibraryImport().backupFiles()
|
||||||
|
|
||||||
|
@FetchRequest(entity: Game.entity(), sortDescriptors: [])
|
||||||
|
var games: FetchedResults<Game>
|
||||||
|
|
||||||
|
@FetchRequest(entity: Accessory.entity(), sortDescriptors: [])
|
||||||
|
var accessories: FetchedResults<Accessory>
|
||||||
|
|
||||||
|
@FetchRequest(entity: Console.entity(), sortDescriptors: [])
|
||||||
|
var consoles: FetchedResults<Console>
|
||||||
|
|
||||||
|
@FetchRequest(entity: GameSeries.entity(), sortDescriptors: [])
|
||||||
|
var gameSeries: FetchedResults<GameSeries>
|
||||||
|
|
||||||
func exportLibrary() {
|
func exportLibrary() {
|
||||||
do {
|
// There is currently no way to directly convert FetchesResults to array.
|
||||||
let gamesFR = NSFetchRequest<Game>(entityName: "Game")
|
// Maybe I should do an Fetchesresulsts Extension
|
||||||
let consolesFR = NSFetchRequest<Console>(entityName: "Console")
|
var exportGames : [Game] = []
|
||||||
let gameSeriesFR = NSFetchRequest<GameSeries>(entityName: "GameSeries")
|
games.forEach {exportGames.append($0)}
|
||||||
let accessoriesFR = NSFetchRequest<Accessory>(entityName: "Accessory")
|
var exportAccessories : [Accessory] = []
|
||||||
|
accessories.forEach {exportAccessories.append($0)}
|
||||||
|
var exportConsoles : [Console] = []
|
||||||
|
consoles.forEach {exportConsoles.append($0)}
|
||||||
|
var exportGameSeries : [GameSeries] = []
|
||||||
|
gameSeries.forEach {exportGameSeries.append($0)}
|
||||||
|
|
||||||
let games = try CDManager.shared.viewContext.fetch(gamesFR)
|
let libExport = LibraryExporter(games: exportGames, consoles: exportConsoles, gameSeries: exportGameSeries, accessories: exportAccessories)
|
||||||
let consoles = try CDManager.shared.viewContext.fetch(consolesFR)
|
|
||||||
let gameSeries = try CDManager.shared.viewContext.fetch(gameSeriesFR)
|
|
||||||
let accessories = try CDManager.shared.viewContext.fetch(accessoriesFR)
|
|
||||||
|
|
||||||
let libExport = LibraryExporter(games: games, consoles: consoles, gameSeries: gameSeries, accessories: accessories)
|
|
||||||
|
|
||||||
libExport.export(name: Date().formattedInTimeZone())
|
libExport.export(name: Date().formattedInTimeZone())
|
||||||
importFiles = LibraryImport().backupFiles()
|
importFiles = LibraryImport().backupFiles()
|
||||||
}catch {
|
|
||||||
print("ERROR during export")
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fileprivate func deleteLibrary() {
|
||||||
|
games.forEach{CDManager.shared.viewContext.delete($0)}
|
||||||
|
accessories.forEach{CDManager.shared.viewContext.delete($0)}
|
||||||
|
consoles.forEach{CDManager.shared.viewContext.delete($0)}
|
||||||
|
gameSeries.forEach{CDManager.shared.viewContext.delete($0)}
|
||||||
|
}
|
||||||
|
|
||||||
|
@State var showDeletionAlert : Bool = false
|
||||||
var body: some View {
|
var body: some View {
|
||||||
Form {
|
Form {
|
||||||
Section(header: Text("Backup Library")) {
|
Section(header: Text("Backup")) {
|
||||||
Button(action: { self.exportLibrary() }, label: { Text("Do Backup") })
|
Button(action: { self.exportLibrary() }, label: { Text("Bärenhöhle sichern!") })
|
||||||
}
|
|
||||||
|
|
||||||
Section(header: Text("Restore Library")) {
|
|
||||||
Picker(selection: $backupImportFileIndex, label: Text("Choose Backup")) {
|
Picker(selection: $backupImportFileIndex, label: Text("Choose Backup")) {
|
||||||
Text("None").tag(-1)
|
Text("None").tag(-1)
|
||||||
ForEach(0 ..< (importFiles.count), id: \.self) {
|
ForEach(0 ..< (importFiles.count), id: \.self) {
|
||||||
Text(LibraryImport.backupName(from: self.importFiles[$0]) ?? "n/a").tag($0)
|
Text(LibraryImport.backupName(from: self.importFiles[$0]) ?? "n/a").tag($0)
|
||||||
}.navigationBarTitle("Backups")
|
}.navigationBarTitle("Backups")
|
||||||
}
|
}
|
||||||
Toggle("Yes, I want to reset my Database", isOn: $backupImportUpdateExistingEntrys)
|
Toggle("Ja, Ich will alles zurücksetzen", isOn: $backupImportUpdateExistingEntrys)
|
||||||
Button(action: {
|
Button(action: {
|
||||||
|
deleteLibrary()
|
||||||
LibraryImport().importLIB(from: self.importFiles[self.backupImportFileIndex])
|
LibraryImport().importLIB(from: self.importFiles[self.backupImportFileIndex])
|
||||||
}, label: { Text("Reset & Import") }).disabled(backupImportFileIndex < 0 || !backupImportUpdateExistingEntrys)
|
}, label: { Text("Reset & Import") }).disabled(backupImportFileIndex < 0 || !backupImportUpdateExistingEntrys)
|
||||||
|
Button(action: {
|
||||||
|
deleteLibrary()
|
||||||
|
}, label: { Text("Nur Reset") }).disabled(!backupImportUpdateExistingEntrys)
|
||||||
}
|
}
|
||||||
}.navigationBarTitle("Einstellungen")
|
}.navigationBarTitle("Einstellungen")
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user