Switch to env objects

This commit is contained in:
Max Goedjen 2020-09-10 19:50:23 -07:00
parent 31c8d43301
commit 78dc4c0d93
No known key found for this signature in database
GPG Key ID: E58C21DD77B9B8E8
3 changed files with 37 additions and 113 deletions

View File

@ -3,85 +3,6 @@ import SwiftUI
import SecretKit
import Brief
//@NSApplicationMain
//class AppDelegate: NSObject, NSApplicationDelegate {
//
// var window: NSWindow!
// @IBOutlet var newMenuItem: NSMenuItem!
// @IBOutlet var toolbar: NSToolbar!
// let storeList: SecretStoreList = {
// let list = SecretStoreList()
// list.add(store: SecureEnclave.Store())
// list.add(store: SmartCard.Store())
// return list
// }()
// let updater = Updater()
// let agentStatusChecker = AgentStatusChecker()
// let justUpdatedChecker = JustUpdatedChecker()
//
// func applicationDidFinishLaunching(_ aNotification: Notification) {
// let contentView = ContentView(storeList: storeList, updater: updater, agentStatusChecker: agentStatusChecker, runSetupBlock: { self.runSetup(sender: nil) })
// // Create the window and set the content view.
// window = NSWindow(
// contentRect: NSRect(x: 0, y: 0, width: 480, height: 300),
// styleMask: [.titled, .closable, .miniaturizable, .resizable, .fullSizeContentView],
// backing: .buffered, defer: false)
// window.center()
// window.setFrameAutosaveName("Main Window")
// window.contentView = NSHostingView(rootView: contentView)
// window.makeKeyAndOrderFront(nil)
// window.titleVisibility = .hidden
// window.toolbar = toolbar
// window.isReleasedWhenClosed = false
// if storeList.modifiableStore?.isAvailable ?? false {
// let plus = NSTitlebarAccessoryViewController()
// plus.view = NSButton(image: NSImage(named: NSImage.addTemplateName)!, target: self, action: #selector(add(sender:)))
// plus.layoutAttribute = .right
// window.addTitlebarAccessoryViewController(plus)
// newMenuItem.isEnabled = true
// }
// runSetupIfNeeded()
// relaunchAgentIfNeeded()
// }
//
// func applicationDidBecomeActive(_ notification: Notification) {
// agentStatusChecker.check()
// }
//
// func applicationShouldHandleReopen(_ sender: NSApplication, hasVisibleWindows flag: Bool) -> Bool {
// guard !flag else { return false }
// window.makeKeyAndOrderFront(self)
// return true
// }
//
// @IBAction func add(sender: AnyObject?) {
// var addWindow: NSWindow!
// let addView = CreateSecretView(store: storeList.modifiableStore!) {
// self.window.endSheet(addWindow)
// }
// addWindow = NSWindow(
// contentRect: NSRect(x: 0, y: 0, width: 480, height: 300),
// styleMask: [.titled, .closable, .miniaturizable, .resizable, .fullSizeContentView],
// backing: .buffered, defer: false)
// addWindow.contentView = NSHostingView(rootView: addView)
// window.beginSheet(addWindow, completionHandler: nil)
// }
//
// @IBAction func runSetup(sender: AnyObject?) {
// let setupWindow = NSWindow(
// contentRect: NSRect(x: 0, y: 0, width: 0, height: 0),
// styleMask: [.titled, .closable, .miniaturizable, .resizable, .fullSizeContentView],
// backing: .buffered, defer: false)
// let setupView = SetupView() { success in
// self.window.endSheet(setupWindow)
// self.agentStatusChecker.check()
// }
// setupWindow.contentView = NSHostingView(rootView: setupView)
// window.beginSheet(setupWindow, completionHandler: nil)
// }
//
//}
@main
struct AppDelegate: App {
@ -97,7 +18,10 @@ struct AppDelegate: App {
@SceneBuilder var body: some Scene {
WindowGroup {
ContentView(storeList: storeList, updater: updater, agentStatusChecker: agentStatusChecker, runSetupBlock: { self.runSetup(sender: nil) })
ContentView<Updater, AgentStatusChecker>(runSetupBlock: { self.runSetup(sender: nil) })
.environmentObject(storeList)
.environmentObject(updater)
.environmentObject(agentStatusChecker)
}
WindowGroup {
SetupView() { _ in

View File

@ -3,10 +3,10 @@ import SecretKit
import Brief
struct ContentView<UpdaterType: UpdaterProtocol, AgentStatusCheckerType: AgentStatusCheckerProtocol>: View {
@ObservedObject var storeList: SecretStoreList
@ObservedObject var updater: UpdaterType
@ObservedObject var agentStatusChecker: AgentStatusCheckerType
@EnvironmentObject var storeList: SecretStoreList
@EnvironmentObject var updater: UpdaterType
@EnvironmentObject var agentStatusChecker: AgentStatusCheckerType
var runSetupBlock: (() -> Void)?
@State private var active: AnySecret.ID?
@ -68,7 +68,7 @@ struct ContentView<UpdaterType: UpdaterProtocol, AgentStatusCheckerType: AgentSt
}
}
.sheet(isPresented: $showingCreation) {
CreateSecretView(store: storeList.modifiableStore!) {
CreateSecretView {
self.showingCreation = false
}
}
@ -154,30 +154,30 @@ private enum Constants {
static let emptyStoreTag: AnyHashable = "emptyStoreModifiableTag"
}
#if DEBUG
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
Group {
ContentView(storeList: Preview.storeList(stores: [Preview.Store(numberOfRandomSecrets: 0)],
modifiableStores: [Preview.StoreModifiable(numberOfRandomSecrets: 0)]),
updater: PreviewUpdater(),
agentStatusChecker: PreviewAgentStatusChecker())
ContentView(storeList: Preview.storeList(stores: [Preview.Store()], modifiableStores: [Preview.StoreModifiable()]), updater: PreviewUpdater(),
agentStatusChecker: PreviewAgentStatusChecker())
ContentView(storeList: Preview.storeList(stores: [Preview.Store()]), updater: PreviewUpdater(),
agentStatusChecker: PreviewAgentStatusChecker())
ContentView(storeList: Preview.storeList(modifiableStores: [Preview.StoreModifiable()]), updater: PreviewUpdater(),
agentStatusChecker: PreviewAgentStatusChecker())
ContentView(storeList: Preview.storeList(stores: [Preview.Store(numberOfRandomSecrets: 0)], modifiableStores: [Preview.StoreModifiable(numberOfRandomSecrets: 0)]), updater: PreviewUpdater(update: .advisory),
agentStatusChecker: PreviewAgentStatusChecker())
ContentView(storeList: Preview.storeList(stores: [Preview.Store(numberOfRandomSecrets: 0)], modifiableStores: [Preview.StoreModifiable(numberOfRandomSecrets: 0)]), updater: PreviewUpdater(update: .critical),
agentStatusChecker: PreviewAgentStatusChecker())
ContentView(storeList: Preview.storeList(stores: [Preview.Store(numberOfRandomSecrets: 0)], modifiableStores: [Preview.StoreModifiable(numberOfRandomSecrets: 0)]), updater: PreviewUpdater(update: .critical),
agentStatusChecker: PreviewAgentStatusChecker(running: false))
}
}
}
#endif
//
//#if DEBUG
//
//struct ContentView_Previews: PreviewProvider {
// static var previews: some View {
// Group {
// ContentView(storeList: Preview.storeList(stores: [Preview.Store(numberOfRandomSecrets: 0)],
// modifiableStores: [Preview.StoreModifiable(numberOfRandomSecrets: 0)]),
// updater: PreviewUpdater(),
// agentStatusChecker: PreviewAgentStatusChecker())
// ContentView(storeList: Preview.storeList(stores: [Preview.Store()], modifiableStores: [Preview.StoreModifiable()]), updater: PreviewUpdater(),
// agentStatusChecker: PreviewAgentStatusChecker())
// ContentView(storeList: Preview.storeList(stores: [Preview.Store()]), updater: PreviewUpdater(),
// agentStatusChecker: PreviewAgentStatusChecker())
// ContentView(storeList: Preview.storeList(modifiableStores: [Preview.StoreModifiable()]), updater: PreviewUpdater(),
// agentStatusChecker: PreviewAgentStatusChecker())
// ContentView(storeList: Preview.storeList(stores: [Preview.Store(numberOfRandomSecrets: 0)], modifiableStores: [Preview.StoreModifiable(numberOfRandomSecrets: 0)]), updater: PreviewUpdater(update: .advisory),
// agentStatusChecker: PreviewAgentStatusChecker())
// ContentView(storeList: Preview.storeList(stores: [Preview.Store(numberOfRandomSecrets: 0)], modifiableStores: [Preview.StoreModifiable(numberOfRandomSecrets: 0)]), updater: PreviewUpdater(update: .critical),
// agentStatusChecker: PreviewAgentStatusChecker())
// ContentView(storeList: Preview.storeList(stores: [Preview.Store(numberOfRandomSecrets: 0)], modifiableStores: [Preview.StoreModifiable(numberOfRandomSecrets: 0)]), updater: PreviewUpdater(update: .critical),
// agentStatusChecker: PreviewAgentStatusChecker(running: false))
// }
// }
//}
//
//#endif

View File

@ -3,7 +3,7 @@ import SecretKit
struct CreateSecretView: View {
@ObservedObject var store: AnySecretStoreModifiable
@EnvironmentObject var store: AnySecretStoreModifiable
@State var name = ""
@State var requiresAuthentication = true