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"
|
"size" : "128x128"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"filename" : "Icon 2@1x.png",
|
"filename" : "Mac Icon.png",
|
||||||
"idiom" : "mac",
|
"idiom" : "mac",
|
||||||
"scale" : "1x",
|
"scale" : "1x",
|
||||||
"size" : "256x256"
|
"size" : "256x256"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"filename" : "Icon 2@2x.png",
|
"filename" : "Mac Icon@0.25x.png",
|
||||||
"idiom" : "mac",
|
"idiom" : "mac",
|
||||||
"scale" : "2x",
|
"scale" : "2x",
|
||||||
"size" : "256x256"
|
"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,9 +28,19 @@ struct Secretive: App {
|
||||||
.onAppear {
|
.onAppear {
|
||||||
if !hasRunSetup {
|
if !hasRunSetup {
|
||||||
showingSetup = true
|
showingSetup = true
|
||||||
} else if agentStatusChecker.running && justUpdatedChecker.justUpdated {
|
} else {
|
||||||
// Relaunch the agent, since it'll be running from earlier update still
|
if agentStatusChecker.running && justUpdatedChecker.justUpdated {
|
||||||
_ = LaunchAgentController().install()
|
// 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()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,11 +15,24 @@ class AgentStatusChecker: ObservableObject, AgentStatusCheckerProtocol {
|
||||||
}
|
}
|
||||||
|
|
||||||
func check() {
|
func check() {
|
||||||
running = secretAgentProcess != nil
|
running = instanceSecretAgentProcess != nil
|
||||||
}
|
}
|
||||||
|
|
||||||
var secretAgentProcess: NSRunningApplication? {
|
// All processes, including ones from older versions, etc
|
||||||
NSRunningApplication.runningApplications(withBundleIdentifier: Constants.secretAgentAppID).first
|
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 Foundation
|
||||||
import ServiceManagement
|
import ServiceManagement
|
||||||
|
import AppKit
|
||||||
|
import OSLog
|
||||||
|
|
||||||
struct LaunchAgentController {
|
struct LaunchAgentController {
|
||||||
|
|
||||||
func install() -> Bool {
|
func install() -> Bool {
|
||||||
|
Logger().debug("Installing agent")
|
||||||
_ = setEnabled(false)
|
_ = setEnabled(false)
|
||||||
return setEnabled(true)
|
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 {
|
private func setEnabled(_ enabled: Bool) -> Bool {
|
||||||
SMLoginItemSetEnabled("com.maxgoedjen.Secretive.SecretAgent" as CFString, enabled)
|
SMLoginItemSetEnabled("com.maxgoedjen.Secretive.SecretAgent" as CFString, enabled)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue