Don't save preview data to keychain + get rid of shared controller instances

This commit is contained in:
Milan Stute
2021-03-11 08:57:44 +01:00
parent fab6cf8b55
commit c57b4c9545
5 changed files with 44 additions and 39 deletions
@@ -10,18 +10,20 @@ import Foundation
import SwiftUI
class AccessoryController: ObservableObject {
static let shared = AccessoryController()
@Published var accessories: [Accessory]
var selfObserver: AnyCancellable?
var listElementsObserver = [AnyCancellable]()
init() {
self.accessories = KeychainController.loadAccessoriesFromKeychain()
init(accessories: [Accessory]) {
self.accessories = accessories
initAccessoryObserver()
initObserver()
}
convenience init() {
self.init(accessories: KeychainController.loadAccessoriesFromKeychain())
}
func initAccessoryObserver() {
self.selfObserver = self.objectWillChange.sink { _ in
// objectWillChange is called before the values are actually changed,
@@ -45,19 +47,13 @@ class AccessoryController: ObservableObject {
})
}
init(accessories: [Accessory]) {
self.accessories = accessories
initAccessoryObserver()
initObserver()
}
func save() throws {
try KeychainController.storeInKeychain(accessories: self.accessories)
}
func updateWithDecryptedReports(devices: [FindMyDevice]) {
// Assign last locations
for device in FindMyController.shared.devices {
for device in devices {
if let idx = self.accessories.firstIndex(where: { $0.id == Int(device.deviceId) }) {
self.objectWillChange.send()
let accessory = self.accessories[idx]
@@ -91,3 +87,9 @@ class AccessoryController: ObservableObject {
return accessory
}
}
class AccessoryControllerPreview: AccessoryController {
override func save() {
// don't allow saving dummy data to keychain
}
}
@@ -10,7 +10,7 @@ import SwiftUI
struct ManageAccessoriesView: View {
@ObservedObject var accessoryController = AccessoryController.shared
@EnvironmentObject var accessoryController: AccessoryController
var accessories: [Accessory] {
return self.accessoryController.accessories
}
@@ -12,7 +12,8 @@ import SwiftUI
struct OpenHaystackMainView: View {
@State var loading = false
@ObservedObject var accessoryController = AccessoryController.shared
@EnvironmentObject var accessoryController: AccessoryController
@EnvironmentObject var findMyController: FindMyController
var accessories: [Accessory] {
return self.accessoryController.accessories
}
@@ -169,7 +170,7 @@ struct OpenHaystackMainView: View {
self.isLoading = true
}
FindMyController.shared.fetchReports(for: accessories, with: tokenData) { result in
findMyController.fetchReports(for: accessories, with: tokenData) { result in
switch result {
case .failure(let error):
os_log(.error, "Downloading reports failed %@", error.localizedDescription)
@@ -365,12 +366,11 @@ struct OpenHaystackMainView: View {
}
struct OpenHaystackMainView_Previews: PreviewProvider {
static var accessories: [Accessory] = PreviewData.accessories
static var accessoryController = AccessoryControllerPreview(accessories: PreviewData.accessories) as AccessoryController
static var previews: some View {
OpenHaystackMainView(accessoryController: AccessoryController(accessories: accessories))
.frame(width: 800, height: 600, alignment: .center)
OpenHaystackMainView()
.environmentObject(accessoryController)
}
}