Skip to content

Commit d08d8b1

Browse files
Change "Open Home Assistant" menu item to check for existing of the Home Assistant Companion App and launch that instead if found, otherwise fall back to opening website.
1 parent 4dcb381 commit d08d8b1

File tree

2 files changed

+40
-13
lines changed

2 files changed

+40
-13
lines changed

HA Menu.xcodeproj/project.pbxproj

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -619,15 +619,15 @@
619619
CODE_SIGN_IDENTITY = "Apple Development";
620620
CODE_SIGN_STYLE = Automatic;
621621
COMBINE_HIDPI_IMAGES = YES;
622-
CURRENT_PROJECT_VERSION = 22;
622+
CURRENT_PROJECT_VERSION = 23;
623623
DEVELOPMENT_TEAM = VZ3Z8BPWPW;
624624
ENABLE_HARDENED_RUNTIME = YES;
625625
INFOPLIST_FILE = "HA Menu/Info.plist";
626626
LD_RUNPATH_SEARCH_PATHS = (
627627
"$(inherited)",
628628
"@executable_path/../Frameworks",
629629
);
630-
MARKETING_VERSION = 2.3.1;
630+
MARKETING_VERSION = 2.4.0;
631631
OTHER_SWIFT_FLAGS = "-D DEBUG";
632632
PRODUCT_BUNDLE_IDENTIFIER = "org.codechimp.HA-Menu";
633633
PRODUCT_NAME = "$(TARGET_NAME)";
@@ -643,15 +643,15 @@
643643
CODE_SIGN_IDENTITY = "Apple Development";
644644
CODE_SIGN_STYLE = Automatic;
645645
COMBINE_HIDPI_IMAGES = YES;
646-
CURRENT_PROJECT_VERSION = 22;
646+
CURRENT_PROJECT_VERSION = 23;
647647
DEVELOPMENT_TEAM = VZ3Z8BPWPW;
648648
ENABLE_HARDENED_RUNTIME = YES;
649649
INFOPLIST_FILE = "HA Menu/Info.plist";
650650
LD_RUNPATH_SEARCH_PATHS = (
651651
"$(inherited)",
652652
"@executable_path/../Frameworks",
653653
);
654-
MARKETING_VERSION = 2.3.1;
654+
MARKETING_VERSION = 2.4.0;
655655
PRODUCT_BUNDLE_IDENTIFIER = "org.codechimp.HA-Menu";
656656
PRODUCT_NAME = "$(TARGET_NAME)";
657657
SWIFT_VERSION = 5.0;
@@ -748,15 +748,15 @@
748748
CODE_SIGN_IDENTITY = "Apple Development";
749749
CODE_SIGN_STYLE = Automatic;
750750
COMBINE_HIDPI_IMAGES = YES;
751-
CURRENT_PROJECT_VERSION = 22;
751+
CURRENT_PROJECT_VERSION = 23;
752752
DEVELOPMENT_TEAM = VZ3Z8BPWPW;
753753
ENABLE_HARDENED_RUNTIME = YES;
754754
INFOPLIST_FILE = "HA Menu Launcher/Info.plist";
755755
LD_RUNPATH_SEARCH_PATHS = (
756756
"$(inherited)",
757757
"@executable_path/../Frameworks",
758758
);
759-
MARKETING_VERSION = 2.3.1;
759+
MARKETING_VERSION = 2.4.0;
760760
PRODUCT_BUNDLE_IDENTIFIER = "org.codechimp.HA-Menu-Launcher";
761761
PRODUCT_NAME = "$(TARGET_NAME)";
762762
SKIP_INSTALL = YES;
@@ -772,15 +772,15 @@
772772
CODE_SIGN_IDENTITY = "Apple Development";
773773
CODE_SIGN_STYLE = Automatic;
774774
COMBINE_HIDPI_IMAGES = YES;
775-
CURRENT_PROJECT_VERSION = 22;
775+
CURRENT_PROJECT_VERSION = 23;
776776
DEVELOPMENT_TEAM = VZ3Z8BPWPW;
777777
ENABLE_HARDENED_RUNTIME = YES;
778778
INFOPLIST_FILE = "HA Menu Launcher/Info.plist";
779779
LD_RUNPATH_SEARCH_PATHS = (
780780
"$(inherited)",
781781
"@executable_path/../Frameworks",
782782
);
783-
MARKETING_VERSION = 2.3.1;
783+
MARKETING_VERSION = 2.4.0;
784784
PRODUCT_BUNDLE_IDENTIFIER = "org.codechimp.HA-Menu-Launcher";
785785
PRODUCT_NAME = "$(TARGET_NAME)";
786786
SKIP_INSTALL = YES;

HA Menu/MenuItemController.swift

Lines changed: 32 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -38,10 +38,10 @@ final class MenuItemController: NSObject, NSMenuDelegate {
3838

3939
if let statusButton = statusItem.button {
4040
#if DEBUG
41-
let icon = NSImage(named: "StatusBarButtonImageDebug")
41+
let icon = NSImage(named: "StatusBarButtonImageDebug")
4242
#else
43-
let icon = NSImage(named: "StatusBarButtonImage")
44-
icon?.isTemplate = true // best for dark mode
43+
let icon = NSImage(named: "StatusBarButtonImage")
44+
icon?.isTemplate = true // best for dark mode
4545
#endif
4646

4747
statusButton.image = icon
@@ -103,8 +103,35 @@ final class MenuItemController: NSObject, NSMenuDelegate {
103103
}
104104

105105
@objc func openHA(sender: NSMenuItem) {
106-
NSWorkspace.shared.open(NSURL(string: prefs.server)! as URL)
106+
107+
if #available(OSX 10.15, *) {
108+
let url = NSURL(fileURLWithPath: "/Applications/Home Assistant.app", isDirectory: true) as URL
109+
110+
let path = "/bin"
111+
let configuration = NSWorkspace.OpenConfiguration()
112+
configuration.arguments = [path]
113+
configuration.promptsUserIfNeeded = false
114+
115+
NSWorkspace.shared.openApplication(at: url,
116+
configuration: configuration) { (app, error) in
117+
if error != nil {
118+
// Fallback to opening website
119+
NSWorkspace.shared.open(NSURL(string: self.prefs.server)! as URL)
120+
}
121+
}
122+
123+
} else {
124+
// Fallback on earlier versions
125+
if !NSWorkspace.shared.launchApplication("Home Assistant") {
126+
// Fallback to opening website
127+
NSWorkspace.shared.open(NSURL(string: self.prefs.server)! as URL)
128+
}
129+
130+
}
131+
107132
}
133+
134+
108135

109136
@objc func openAbout(sender: NSMenuItem) {
110137
let options = [String: Any]()
@@ -209,7 +236,7 @@ final class MenuItemController: NSObject, NSMenuDelegate {
209236
case "scene":
210237
itemType = EntityTypes.sceneType
211238
case "script":
212-
itemType = EntityTypes.scriptType
239+
itemType = EntityTypes.scriptType
213240

214241
default:
215242
itemType = nil

0 commit comments

Comments
 (0)