Relaunch agent (#165)
* Check on foreground * Better processing. * Update icons for agent too * Add force launch. * Force launch.
This commit is contained in:
parent
59ec40c611
commit
1f0100ff2d
|
@ -31,13 +31,13 @@
|
|||
"size" : "128x128"
|
||||
},
|
||||
{
|
||||
"filename" : "Icon 2@1x.png",
|
||||
"filename" : "Mac Icon.png",
|
||||
"idiom" : "mac",
|
||||
"scale" : "1x",
|
||||
"size" : "256x256"
|
||||
},
|
||||
{
|
||||
"filename" : "Icon 2@2x.png",
|
||||
"filename" : "Mac Icon@0.25x.png",
|
||||
"idiom" : "mac",
|
||||
"scale" : "2x",
|
||||
"size" : "256x256"
|
||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 24 KiB |
Binary file not shown.
Before Width: | Height: | Size: 66 KiB |
Binary file not shown.
After Width: | Height: | Size: 16 KiB |
Binary file not shown.
After Width: | Height: | Size: 40 KiB |
|
@ -28,12 +28,22 @@ struct Secretive: App {
|
|||
.onAppear {
|
||||
if !hasRunSetup {
|
||||
showingSetup = true
|
||||
} else if agentStatusChecker.running && justUpdatedChecker.justUpdated {
|
||||
} else {
|
||||
if agentStatusChecker.running && justUpdatedChecker.justUpdated {
|
||||
// Relaunch the agent, since it'll be running from earlier update still
|
||||
_ = LaunchAgentController().install()
|
||||
}
|
||||
}
|
||||
}
|
||||
.onReceive(NotificationCenter.default.publisher(for: NSApplication.willBecomeActiveNotification)) { _ in
|
||||
agentStatusChecker.check()
|
||||
if hasRunSetup && !agentStatusChecker.running {
|
||||
// We've run setup, we didn't just update, launchd is just not doing it's thing.
|
||||
// Force a launch directly.
|
||||
LaunchAgentController().forceLaunch()
|
||||
}
|
||||
}
|
||||
}
|
||||
.commands {
|
||||
CommandGroup(after: CommandGroupPlacement.newItem) {
|
||||
Button("New Secret") {
|
||||
|
|
|
@ -15,11 +15,24 @@ class AgentStatusChecker: ObservableObject, AgentStatusCheckerProtocol {
|
|||
}
|
||||
|
||||
func check() {
|
||||
running = secretAgentProcess != nil
|
||||
running = instanceSecretAgentProcess != nil
|
||||
}
|
||||
|
||||
var secretAgentProcess: NSRunningApplication? {
|
||||
NSRunningApplication.runningApplications(withBundleIdentifier: Constants.secretAgentAppID).first
|
||||
// All processes, including ones from older versions, etc
|
||||
var secretAgentProcesses: [NSRunningApplication] {
|
||||
NSRunningApplication.runningApplications(withBundleIdentifier: Constants.secretAgentAppID)
|
||||
}
|
||||
|
||||
// The process corresponding to this instance of Secretive
|
||||
var instanceSecretAgentProcess: NSRunningApplication? {
|
||||
let agents = secretAgentProcesses
|
||||
for agent in agents {
|
||||
guard let url = agent.bundleURL else { continue }
|
||||
if url.absoluteString.hasPrefix(Bundle.main.bundleURL.absoluteString) {
|
||||
return agent
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -1,13 +1,28 @@
|
|||
import Foundation
|
||||
import ServiceManagement
|
||||
import AppKit
|
||||
import OSLog
|
||||
|
||||
struct LaunchAgentController {
|
||||
|
||||
func install() -> Bool {
|
||||
Logger().debug("Installing agent")
|
||||
_ = setEnabled(false)
|
||||
return setEnabled(true)
|
||||
}
|
||||
|
||||
func forceLaunch() {
|
||||
Logger().debug("Agent is not running, attempting to force launch")
|
||||
let url = Bundle.main.bundleURL.appendingPathComponent("Contents/Library/LoginItems/SecretAgent.app")
|
||||
NSWorkspace.shared.openApplication(at: url, configuration: NSWorkspace.OpenConfiguration()) { app, error in
|
||||
if let error = error {
|
||||
Logger().error("Error force launching \(error.localizedDescription)")
|
||||
} else {
|
||||
Logger().debug("Agent force launched")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private func setEnabled(_ enabled: Bool) -> Bool {
|
||||
SMLoginItemSetEnabled("com.maxgoedjen.Secretive.SecretAgent" as CFString, enabled)
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue