mirror of
				https://github.com/maxgoedjen/secretive.git
				synced 2025-11-03 17:00:56 +00:00 
			
		
		
		
	Relaunch agent if updated (#86)
This commit is contained in:
		
							parent
							
								
									30148ee3a4
								
							
						
					
					
						commit
						8bbf489146
					
				@ -10,6 +10,8 @@
 | 
				
			|||||||
		50020BB024064869003D4025 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50020BAF24064869003D4025 /* AppDelegate.swift */; };
 | 
							50020BB024064869003D4025 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50020BAF24064869003D4025 /* AppDelegate.swift */; };
 | 
				
			||||||
		5018F54F24064786002EB505 /* Notifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5018F54E24064786002EB505 /* Notifier.swift */; };
 | 
							5018F54F24064786002EB505 /* Notifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5018F54E24064786002EB505 /* Notifier.swift */; };
 | 
				
			||||||
		50524B442420969E008DBD97 /* OpenSSHWriterTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50524B432420969D008DBD97 /* OpenSSHWriterTests.swift */; };
 | 
							50524B442420969E008DBD97 /* OpenSSHWriterTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50524B432420969D008DBD97 /* OpenSSHWriterTests.swift */; };
 | 
				
			||||||
 | 
							50571E0324393C2600F76F6C /* JustUpdatedChecker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50571E0224393C2600F76F6C /* JustUpdatedChecker.swift */; };
 | 
				
			||||||
 | 
							50571E0524393D1500F76F6C /* LaunchAgentController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50571E0424393D1500F76F6C /* LaunchAgentController.swift */; };
 | 
				
			||||||
		50617D8323FCE48E0099B055 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50617D8223FCE48E0099B055 /* AppDelegate.swift */; };
 | 
							50617D8323FCE48E0099B055 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50617D8223FCE48E0099B055 /* AppDelegate.swift */; };
 | 
				
			||||||
		50617D8523FCE48E0099B055 /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50617D8423FCE48E0099B055 /* ContentView.swift */; };
 | 
							50617D8523FCE48E0099B055 /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50617D8423FCE48E0099B055 /* ContentView.swift */; };
 | 
				
			||||||
		50617D8723FCE48E0099B055 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 50617D8623FCE48E0099B055 /* Assets.xcassets */; };
 | 
							50617D8723FCE48E0099B055 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 50617D8623FCE48E0099B055 /* Assets.xcassets */; };
 | 
				
			||||||
@ -206,6 +208,8 @@
 | 
				
			|||||||
		50020BAF24064869003D4025 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
 | 
							50020BAF24064869003D4025 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
 | 
				
			||||||
		5018F54E24064786002EB505 /* Notifier.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Notifier.swift; sourceTree = "<group>"; };
 | 
							5018F54E24064786002EB505 /* Notifier.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Notifier.swift; sourceTree = "<group>"; };
 | 
				
			||||||
		50524B432420969D008DBD97 /* OpenSSHWriterTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OpenSSHWriterTests.swift; sourceTree = "<group>"; };
 | 
							50524B432420969D008DBD97 /* OpenSSHWriterTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OpenSSHWriterTests.swift; sourceTree = "<group>"; };
 | 
				
			||||||
 | 
							50571E0224393C2600F76F6C /* JustUpdatedChecker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JustUpdatedChecker.swift; sourceTree = "<group>"; };
 | 
				
			||||||
 | 
							50571E0424393D1500F76F6C /* LaunchAgentController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LaunchAgentController.swift; sourceTree = "<group>"; };
 | 
				
			||||||
		50617D7F23FCE48E0099B055 /* Secretive.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Secretive.app; sourceTree = BUILT_PRODUCTS_DIR; };
 | 
							50617D7F23FCE48E0099B055 /* Secretive.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Secretive.app; sourceTree = BUILT_PRODUCTS_DIR; };
 | 
				
			||||||
		50617D8223FCE48E0099B055 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
 | 
							50617D8223FCE48E0099B055 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
 | 
				
			||||||
		50617D8423FCE48E0099B055 /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = "<group>"; };
 | 
							50617D8423FCE48E0099B055 /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = "<group>"; };
 | 
				
			||||||
@ -512,6 +516,8 @@
 | 
				
			|||||||
			isa = PBXGroup;
 | 
								isa = PBXGroup;
 | 
				
			||||||
			children = (
 | 
								children = (
 | 
				
			||||||
				508A58B2241ED2180069DC07 /* AgentStatusChecker.swift */,
 | 
									508A58B2241ED2180069DC07 /* AgentStatusChecker.swift */,
 | 
				
			||||||
 | 
									50571E0224393C2600F76F6C /* JustUpdatedChecker.swift */,
 | 
				
			||||||
 | 
									50571E0424393D1500F76F6C /* LaunchAgentController.swift */,
 | 
				
			||||||
			);
 | 
								);
 | 
				
			||||||
			path = Controllers;
 | 
								path = Controllers;
 | 
				
			||||||
			sourceTree = "<group>";
 | 
								sourceTree = "<group>";
 | 
				
			||||||
@ -916,10 +922,12 @@
 | 
				
			|||||||
			files = (
 | 
								files = (
 | 
				
			||||||
				50C385A9240B636500AF2719 /* SetupView.swift in Sources */,
 | 
									50C385A9240B636500AF2719 /* SetupView.swift in Sources */,
 | 
				
			||||||
				50617D8523FCE48E0099B055 /* ContentView.swift in Sources */,
 | 
									50617D8523FCE48E0099B055 /* ContentView.swift in Sources */,
 | 
				
			||||||
 | 
									50571E0324393C2600F76F6C /* JustUpdatedChecker.swift in Sources */,
 | 
				
			||||||
				50617DD223FCEFA90099B055 /* PreviewStore.swift in Sources */,
 | 
									50617DD223FCEFA90099B055 /* PreviewStore.swift in Sources */,
 | 
				
			||||||
				508A58B3241ED2180069DC07 /* AgentStatusChecker.swift in Sources */,
 | 
									508A58B3241ED2180069DC07 /* AgentStatusChecker.swift in Sources */,
 | 
				
			||||||
				50C385A52407A76D00AF2719 /* SecretDetailView.swift in Sources */,
 | 
									50C385A52407A76D00AF2719 /* SecretDetailView.swift in Sources */,
 | 
				
			||||||
				5099A02423FD2AAA0062B6F2 /* CreateSecretView.swift in Sources */,
 | 
									5099A02423FD2AAA0062B6F2 /* CreateSecretView.swift in Sources */,
 | 
				
			||||||
 | 
									50571E0524393D1500F76F6C /* LaunchAgentController.swift in Sources */,
 | 
				
			||||||
				50B8550D24138C4F009958AC /* DeleteSecretView.swift in Sources */,
 | 
									50B8550D24138C4F009958AC /* DeleteSecretView.swift in Sources */,
 | 
				
			||||||
				50BB046B2418AAAE00D6E079 /* EmptyStoreView.swift in Sources */,
 | 
									50BB046B2418AAAE00D6E079 /* EmptyStoreView.swift in Sources */,
 | 
				
			||||||
				50731669241E00C20023809E /* NoticeView.swift in Sources */,
 | 
									50731669241E00C20023809E /* NoticeView.swift in Sources */,
 | 
				
			||||||
 | 
				
			|||||||
@ -17,6 +17,7 @@ class AppDelegate: NSObject, NSApplicationDelegate {
 | 
				
			|||||||
    }()
 | 
					    }()
 | 
				
			||||||
    let updater = Updater()
 | 
					    let updater = Updater()
 | 
				
			||||||
    let agentStatusChecker = AgentStatusChecker()
 | 
					    let agentStatusChecker = AgentStatusChecker()
 | 
				
			||||||
 | 
					    let justUpdatedChecker = JustUpdatedChecker()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    func applicationDidFinishLaunching(_ aNotification: Notification) {
 | 
					    func applicationDidFinishLaunching(_ aNotification: Notification) {
 | 
				
			||||||
        let contentView = ContentView(storeList: storeList, updater: updater, agentStatusChecker: agentStatusChecker, runSetupBlock: { self.runSetup(sender: nil) })
 | 
					        let contentView = ContentView(storeList: storeList, updater: updater, agentStatusChecker: agentStatusChecker, runSetupBlock: { self.runSetup(sender: nil) })
 | 
				
			||||||
@ -40,6 +41,7 @@ class AppDelegate: NSObject, NSApplicationDelegate {
 | 
				
			|||||||
            newMenuItem.isEnabled = true
 | 
					            newMenuItem.isEnabled = true
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        runSetupIfNeeded()
 | 
					        runSetupIfNeeded()
 | 
				
			||||||
 | 
					        relaunchAgentIfNeeded()
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    func applicationDidBecomeActive(_ notification: Notification) {
 | 
					    func applicationDidBecomeActive(_ notification: Notification) {
 | 
				
			||||||
@ -89,6 +91,12 @@ extension AppDelegate {
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    func relaunchAgentIfNeeded() {
 | 
				
			||||||
 | 
					        if agentStatusChecker.running && justUpdatedChecker.justUpdated {
 | 
				
			||||||
 | 
					            LaunchAgentController().relaunch()
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
extension AppDelegate {
 | 
					extension AppDelegate {
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										36
									
								
								Secretive/Controllers/JustUpdatedChecker.swift
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								Secretive/Controllers/JustUpdatedChecker.swift
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,36 @@
 | 
				
			|||||||
 | 
					import Foundation
 | 
				
			||||||
 | 
					import Combine
 | 
				
			||||||
 | 
					import AppKit
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					protocol JustUpdatedCheckerProtocol: ObservableObject {
 | 
				
			||||||
 | 
					    var justUpdated: Bool { get }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class JustUpdatedChecker: ObservableObject, JustUpdatedCheckerProtocol {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Published var justUpdated: Bool = false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    init() {
 | 
				
			||||||
 | 
					        check()
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    func check() {
 | 
				
			||||||
 | 
					        let lastBuild = UserDefaults.standard.object(forKey: Constants.previousVersionUserDefaultsKey) as? String ?? "None"
 | 
				
			||||||
 | 
					        let currentBuild = Bundle.main.infoDictionary!["CFBundleShortVersionString"] as! String
 | 
				
			||||||
 | 
					        UserDefaults.standard.set(currentBuild, forKey: Constants.previousVersionUserDefaultsKey)
 | 
				
			||||||
 | 
					        if lastBuild != currentBuild {
 | 
				
			||||||
 | 
					            justUpdated = true
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					extension JustUpdatedChecker {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    enum Constants {
 | 
				
			||||||
 | 
					        static let previousVersionUserDefaultsKey = "com.maxgoedjen.Secretive.lastBuild"
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										19
									
								
								Secretive/Controllers/LaunchAgentController.swift
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								Secretive/Controllers/LaunchAgentController.swift
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,19 @@
 | 
				
			|||||||
 | 
					import Foundation
 | 
				
			||||||
 | 
					import ServiceManagement
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					struct LaunchAgentController {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    func install() -> Bool {
 | 
				
			||||||
 | 
					        setEnabled(true)
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    func relaunch() {
 | 
				
			||||||
 | 
					        _ = setEnabled(false)
 | 
				
			||||||
 | 
					        _ = setEnabled(true)
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private func setEnabled(_ enabled: Bool) -> Bool {
 | 
				
			||||||
 | 
					        SMLoginItemSetEnabled("com.maxgoedjen.Secretive.SecretAgent" as CFString, enabled)
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -1,6 +1,5 @@
 | 
				
			|||||||
import Foundation
 | 
					import Foundation
 | 
				
			||||||
import SwiftUI
 | 
					import SwiftUI
 | 
				
			||||||
import ServiceManagement
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
struct SetupView: View {
 | 
					struct SetupView: View {
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
@ -117,7 +116,7 @@ struct SetupStepCommandView: View {
 | 
				
			|||||||
extension SetupView {
 | 
					extension SetupView {
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    func installLaunchAgent() -> Bool {
 | 
					    func installLaunchAgent() -> Bool {
 | 
				
			||||||
        SMLoginItemSetEnabled("com.maxgoedjen.Secretive.SecretAgent" as CFString, true)
 | 
					        LaunchAgentController().install()
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    func markAsDone() -> Bool {
 | 
					    func markAsDone() -> Bool {
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user