From 605f9872cd15e22bdcdec2ffe4fcc3d1ad96fd8b Mon Sep 17 00:00:00 2001 From: meeh Date: Fri, 18 Jan 2019 16:29:12 +0000 Subject: [PATCH] Mac OSX Launcher: UI code updates, integration of firefox manager. --- .../userinterface/RouterStatusView.swift | 32 +++++++++++++++++-- .../userinterface/StatusBarController.swift | 8 +++++ .../PreferencesViewController.swift | 20 ++++++++++++ 3 files changed, 58 insertions(+), 2 deletions(-) diff --git a/launchers/macosx/I2PLauncher/userinterface/RouterStatusView.swift b/launchers/macosx/I2PLauncher/userinterface/RouterStatusView.swift index 9f4199c31f..a26e4aef14 100644 --- a/launchers/macosx/I2PLauncher/userinterface/RouterStatusView.swift +++ b/launchers/macosx/I2PLauncher/userinterface/RouterStatusView.swift @@ -18,6 +18,8 @@ import Cocoa return Optional.none } + var isFirefoxEnabled = false + @IBOutlet var routerStatusLabel: NSTextField? @IBOutlet var routerVersionLabel: NSTextField? @IBOutlet var routerStartedByLabel: NSTextField? @@ -28,6 +30,7 @@ import Cocoa @IBOutlet var quickControlView: NSView? @IBOutlet var routerStartStopButton: NSButton? @IBOutlet var openConsoleButton: NSButton? + @IBOutlet var launchFirefoxButton: NSButton? @objc func actionBtnOpenConsole(_ sender: Any?) { @@ -77,6 +80,13 @@ import Cocoa self.reEnableButton() } + @objc func actionBtnLaunchFirefox(_ sender: Any?) { + DispatchQueue.global(qos: .background).async { + Swift.print("Starting firefox") + FirefoxManager.shared().executeFirefox() + } + } + func restartFn() { RouterManager.shared().routerRunner.StopAgent({ sleep(30) @@ -116,14 +126,30 @@ import Cocoa RouterManager.shared().eventManager.listenTo(eventName: "launch_agent_loaded", action: reEnableButton) } + func setupFirefoxBtn() { + DispatchQueue.global(qos: .background).async { + if (FirefoxManager.shared().IsFirefoxFound() && !self.isFirefoxEnabled) { + Swift.print("Enabling Firefox Launch Button") + DispatchQueue.main.async { + self.isFirefoxEnabled = true + self.launchFirefoxButton?.isEnabled = true + self.launchFirefoxButton?.isTransparent = false + self.launchFirefoxButton?.needsDisplay = true + self.launchFirefoxButton?.action = #selector(self.actionBtnLaunchFirefox(_:)) + self.launchFirefoxButton?.target = self + } + } + } + } + override func viewWillDraw() { super.viewWillDraw() if (RouterStatusView.instance != nil) { RouterStatusView.instance = self } self.reEnableButton() - openConsoleButton!.cell!.action = #selector(self.actionBtnOpenConsole(_:)) - openConsoleButton!.cell!.target = self + openConsoleButton?.cell?.action = #selector(self.actionBtnOpenConsole(_:)) + openConsoleButton?.cell?.target = self } @@ -197,6 +223,7 @@ import Cocoa let c = NSCoder() super.init(coder: c)! self.setupObservers() + self.setupFirefoxBtn() self.toggleSetButtonStart() self.reEnableButton() } @@ -204,6 +231,7 @@ import Cocoa required init?(coder decoder: NSCoder) { super.init(coder: decoder) self.setupObservers() + self.setupFirefoxBtn() self.toggleSetButtonStart() self.reEnableButton() } diff --git a/launchers/macosx/I2PLauncher/userinterface/StatusBarController.swift b/launchers/macosx/I2PLauncher/userinterface/StatusBarController.swift index b5ab2bca35..35529e001c 100644 --- a/launchers/macosx/I2PLauncher/userinterface/StatusBarController.swift +++ b/launchers/macosx/I2PLauncher/userinterface/StatusBarController.swift @@ -108,6 +108,14 @@ import Cocoa RouterManager.shared().eventManager.listenTo(eventName: "toggle_popover", action: event_toggle) + FirefoxManager.shared().tryAutoDetect() + + print("Is Firefox found? \(FirefoxManager.shared().IsFirefoxFound())") + print("Is Firefox profile extracted at \(Preferences.shared()["I2Pref_firefoxProfilePath"] as! String)? \(FirefoxManager.shared().IsProfileExtracted())") + if (!FirefoxManager.shared().IsProfileExtracted()) { + FirefoxManager.shared().unzipProfile() + } + if let button = statusItem.button { button.image = NSImage(named:"StatusBarButtonImage") button.toolTip = "I2P Launch Manager" diff --git a/launchers/macosx/I2PLauncher/userinterface/preferences/PreferencesViewController.swift b/launchers/macosx/I2PLauncher/userinterface/preferences/PreferencesViewController.swift index 823a1d70ba..799813486f 100644 --- a/launchers/macosx/I2PLauncher/userinterface/preferences/PreferencesViewController.swift +++ b/launchers/macosx/I2PLauncher/userinterface/preferences/PreferencesViewController.swift @@ -10,6 +10,7 @@ // import Cocoa +import ServiceManagement class PreferencesViewController: NSViewController { @@ -64,6 +65,18 @@ class PreferencesViewController: NSViewController { // Update radio buttons to reflect runtime/stored preferences self.updateRadioButtonEffect(mode: Preferences.shared().showAsIconMode, withSideEffect: false) + if (Preferences.shared().stopRouterOnLauncherShutdown) { + self.checkboxStopWithLauncher?.state = NSOnState; + } else { + self.checkboxStopWithLauncher?.state = NSOffState; + } + if (Preferences.shared().startRouterOnLauncherStart) { + self.checkboxStartWithLauncher?.state = NSOnState; + } else { + self.checkboxStartWithLauncher?.state = NSOffState; + } + + } override func viewDidAppear() { @@ -110,11 +123,18 @@ class PreferencesViewController: NSViewController { // MARK: - Launcher settings functions @IBAction func checkboxStartLauncherOnOSXStartupClicked(_ sender: NSButton) { + let launcherAppId = "net.i2p.bootstrap.macosx.StartupItemApp" switch sender.state { case NSOnState: print("on") + Preferences.shared()["I2Pref_startLauncherAtLogin"] = true + let success = SMLoginItemSetEnabled(launcherAppId as CFString, true) + print("SMLoginItemSetEnabled returned \(success)....") case NSOffState: print("off") + Preferences.shared()["I2Pref_startLauncherAtLogin"] = false + let success = SMLoginItemSetEnabled(launcherAppId as CFString, false) + print("SMLoginItemSetEnabled returned \(success)....") case NSMixedState: print("mixed") default: break