From 512f6b8c9e23461feee23b1fad76036d8650f77f Mon Sep 17 00:00:00 2001 From: Garth Vander Houwen Date: Wed, 26 Jun 2024 15:12:24 -0700 Subject: [PATCH] assorted backup fixes --- Meshtastic/Helpers/BLEManager.swift | 2 ++ Meshtastic/Persistence/UpdateCoreData.swift | 2 +- Meshtastic/Views/Bluetooth/Connect.swift | 1 + Meshtastic/Views/Settings/AppData.swift | 7 ++++--- 4 files changed, 8 insertions(+), 4 deletions(-) diff --git a/Meshtastic/Helpers/BLEManager.swift b/Meshtastic/Helpers/BLEManager.swift index 07afc59f..a5dec13b 100644 --- a/Meshtastic/Helpers/BLEManager.swift +++ b/Meshtastic/Helpers/BLEManager.swift @@ -646,6 +646,8 @@ class BLEManager: NSObject, CBPeripheralDelegate, MqttClientProxyManagerDelegate do { disconnectPeripheral(reconnect: false) try container.restorePersistentStore(from: databasePath) + let request = MyInfoEntity.fetchRequest() + try context?.fetch(request) UserDefaults.preferredPeripheralNum = Int(myInfo?.myNodeNum ?? 0) connectTo(peripheral: peripheral) Logger.data.notice("🗂️ Restored Core data for /\(UserDefaults.preferredPeripheralNum, privacy: .public)") diff --git a/Meshtastic/Persistence/UpdateCoreData.swift b/Meshtastic/Persistence/UpdateCoreData.swift index c5be865b..db6d4cf4 100644 --- a/Meshtastic/Persistence/UpdateCoreData.swift +++ b/Meshtastic/Persistence/UpdateCoreData.swift @@ -200,7 +200,7 @@ func upsertNodeInfoPacket (packet: MeshPacket, context: NSManagedObjectContext) } else { if packet.from > Int16.max { let newUser = createUser(num: Int64(packet.from), context: context) - fetchedNode[0].user = newUser + newNode.user = newUser } } diff --git a/Meshtastic/Views/Bluetooth/Connect.swift b/Meshtastic/Views/Bluetooth/Connect.swift index 9405ad2d..673e6a8d 100644 --- a/Meshtastic/Views/Bluetooth/Connect.swift +++ b/Meshtastic/Views/Bluetooth/Connect.swift @@ -221,6 +221,7 @@ struct Connect: View { } do { try container.copyPersistentStores(to: url.appendingPathComponent("backup").appendingPathComponent("\(UserDefaults.preferredPeripheralNum)"), overwriting: true) + clearCoreDataDatabase(context: context, includeRoutes: true) Logger.data.notice("🗂️ Made a core data backup to backup/\(UserDefaults.preferredPeripheralNum)") } catch { diff --git a/Meshtastic/Views/Settings/AppData.swift b/Meshtastic/Views/Settings/AppData.swift index e2fb4d66..dee18d9f 100644 --- a/Meshtastic/Views/Settings/AppData.swift +++ b/Meshtastic/Views/Settings/AppData.swift @@ -53,7 +53,7 @@ struct AppData: View { VStack(alignment: .leading ) { if file.pathExtension.contains("sqlite") { Label { - Text("Node Core Data Backup \(file.pathComponents[9])/\(file.lastPathComponent) - \(file.creationDate?.formatted() ?? "") - \(file.fileSizeString)") + Text("Node Core Data Backup \(file.pathComponents[(idiom == .phone || idiom == .pad) ? 9 : 10])/\(file.lastPathComponent) - \(file.creationDate?.formatted() ?? "") - \(file.fileSizeString)") .swipeActions { Button(role: .none) { bleManager.disconnectPeripheral(reconnect: false) @@ -61,9 +61,10 @@ struct AppData: View { do { clearCoreDataDatabase(context: context, includeRoutes: true) try container.restorePersistentStore(from: file.absoluteURL) - context.reset() + let request = MyInfoEntity.fetchRequest() + try context.fetch(request) UserDefaults.preferredPeripheralId = "" - UserDefaults.preferredPeripheralNum = Int(file.pathComponents[10]) ?? 0 + UserDefaults.preferredPeripheralNum = Int(file.pathComponents[(idiom == .phone || idiom == .pad) ? 9 : 10]) ?? 0 Logger.data.notice("🗂️ Restored a core data backup to backup/\(UserDefaults.preferredPeripheralNum, privacy: .public)") } catch { Logger.data.error("🗂️ Core data restore copy error: \(error, privacy: .public)")