// // Encounter+EncounterRecord.swift // CovidSafe // // Copyright © 2020 Australian Government. All rights reserved. // import UIKit import CoreData extension EncounterRecord { func saveRemoteCentralToCoreData() throws { // remote blob will be modelC rssi txPower msg if v1. If v2 then remoteBlob will just be msg // localblob will be modelP var localBlob = EncounterBlob() localBlob.modelP = self.modelP var remoteBlob = EncounterBlob() remoteBlob.modelC = self.modelC remoteBlob.rssi = self.rssi remoteBlob.txPower = self.txPower remoteBlob.msg = self.msg var encryptedLocalBlob: String var encryptedRemoteBlob: String let localJson = try JSONEncoder().encode(localBlob) encryptedLocalBlob = try Crypto.encrypt(dataToEncrypt: localJson) if v == 1 { let remoteJson = try JSONEncoder().encode(remoteBlob) encryptedRemoteBlob = try Crypto.encrypt(dataToEncrypt: remoteJson) } else { encryptedRemoteBlob = self.msg! } saveToCoreData(remoteBlob: encryptedRemoteBlob, localBlob: encryptedLocalBlob) } func saveRemotePeripheralToCoreData() throws { var remoteBlob = EncounterBlob() remoteBlob.modelP = self.modelP remoteBlob.msg = self.msg var localBlob = EncounterBlob() localBlob.modelC = self.modelC localBlob.rssi = self.rssi localBlob.txPower = self.txPower var encryptedLocalBlob: String var encryptedRemoteBlob: String let localJson = try JSONEncoder().encode(localBlob) encryptedLocalBlob = try Crypto.encrypt(dataToEncrypt: localJson) if v == 1 { let remoteJson = try JSONEncoder().encode(remoteBlob) encryptedRemoteBlob = try Crypto.encrypt(dataToEncrypt: remoteJson) } else { encryptedRemoteBlob = self.msg! } saveToCoreData(remoteBlob: encryptedRemoteBlob, localBlob: encryptedLocalBlob) } private func saveToCoreData(remoteBlob: String, localBlob: String) { DispatchQueue.main.async { guard let persistentContainer = EncounterDB.shared.persistentContainer else { return } let managedContext = persistentContainer.viewContext let entity = NSEntityDescription.entity(forEntityName: "Encounter", in: managedContext)! let encounter = Encounter(entity: entity, insertInto: managedContext) encounter.set(encounterStruct: self, remoteBlob: remoteBlob, localBlob: localBlob) do { try managedContext.save() } catch { print("Could not save. \(error)") } NotificationCenter.default.post(name: .encounterRecorded, object: nil) } } }