2018-09-18 15:36:38 +00:00
|
|
|
//
|
|
|
|
// SwiftMainDelegate.swift
|
|
|
|
// I2PLauncher
|
|
|
|
//
|
|
|
|
// Created by Mikal Villa on 17/09/2018.
|
|
|
|
// Copyright © 2018 The I2P Project. All rights reserved.
|
|
|
|
//
|
|
|
|
|
|
|
|
import Foundation
|
|
|
|
import Cocoa
|
|
|
|
|
2018-10-11 17:01:21 +00:00
|
|
|
class Logger {
|
|
|
|
static func MLog<T>(level:Int32, _ object: T?,file:String = #file, function:String = #function, line:Int = #line) {
|
|
|
|
SBridge.logProxy(level, formattedMsg: "\(makeTag(function: function, file: file, line: line)) : \(object)")
|
|
|
|
}
|
|
|
|
|
|
|
|
private static func makeTag(function: String, file: String, line: Int) -> String{
|
|
|
|
let url = NSURL(fileURLWithPath: file)
|
|
|
|
let className:String! = url.lastPathComponent == nil ? file: url.lastPathComponent!
|
|
|
|
return "\(className) \(function)[\(line)]"
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2018-09-18 15:36:38 +00:00
|
|
|
@objc class SwiftMainDelegate : NSObject {
|
|
|
|
|
|
|
|
let statusBarController = StatusBarController()
|
2018-09-22 22:13:40 +00:00
|
|
|
let sharedRouterMgmr = RouterManager.shared()
|
2018-09-18 15:36:38 +00:00
|
|
|
|
|
|
|
override init() {
|
|
|
|
super.init()
|
2018-10-11 17:01:21 +00:00
|
|
|
if (!DetectJava.shared().isJavaFound()) {
|
|
|
|
DetectJava.shared().findIt()
|
|
|
|
if (!DetectJava.shared().isJavaFound()) {
|
|
|
|
Logger.MLog(level:3, "Could not find java....")
|
2018-09-20 02:38:44 +00:00
|
|
|
terminate("No java..")
|
|
|
|
}
|
2018-09-18 15:36:38 +00:00
|
|
|
}
|
2018-10-11 17:01:21 +00:00
|
|
|
let javaBinPath = DetectJava.shared().javaBinary
|
|
|
|
Logger.MLog(level:1, "".appendingFormat("Found java home = %@", javaBinPath!))
|
2018-09-18 15:36:38 +00:00
|
|
|
|
2018-09-19 00:37:16 +00:00
|
|
|
let (portIsNotTaken, _) = RouterProcessStatus.checkTcpPortForListen(port: 7657)
|
2018-09-18 15:36:38 +00:00
|
|
|
if (!portIsNotTaken) {
|
|
|
|
RouterProcessStatus.isRouterRunning = true
|
|
|
|
RouterProcessStatus.isRouterChildProcess = false
|
2018-10-11 17:01:21 +00:00
|
|
|
Logger.MLog(level:2, "I2P Router seems to be running")
|
2018-09-18 15:36:38 +00:00
|
|
|
} else {
|
|
|
|
RouterProcessStatus.isRouterRunning = false
|
2018-10-11 17:01:21 +00:00
|
|
|
Logger.MLog(level:2, "I2P Router seems to NOT be running")
|
2018-09-18 15:36:38 +00:00
|
|
|
}
|
2018-09-19 00:37:16 +00:00
|
|
|
} // End of init()
|
2018-09-18 15:36:38 +00:00
|
|
|
|
2018-09-19 00:37:16 +00:00
|
|
|
@objc func findInstalledI2PVersion() {
|
2018-12-08 09:16:28 +00:00
|
|
|
var i2pPath = Preferences.shared().i2pBaseDirectory
|
|
|
|
let jExecPath:String = Preferences.shared().javaCommandPath
|
2018-09-18 15:36:38 +00:00
|
|
|
|
2018-09-19 00:37:16 +00:00
|
|
|
let jarPath = i2pPath + "/lib/i2p.jar"
|
|
|
|
|
2018-10-11 17:01:21 +00:00
|
|
|
let subCmd = jExecPath + "-cp " + jarPath + " net.i2p.CoreVersion"
|
2018-09-18 15:36:38 +00:00
|
|
|
|
2018-09-19 00:37:16 +00:00
|
|
|
let cmdArgs:[String] = ["-c", subCmd]
|
2018-09-18 15:36:38 +00:00
|
|
|
print(cmdArgs)
|
|
|
|
let sub:Subprocess = Subprocess.init(executablePath: "/bin/sh", arguments: cmdArgs)
|
|
|
|
let results:ExecutionResult = sub.execute(captureOutput: true)!
|
|
|
|
if (results.didCaptureOutput) {
|
2018-09-26 20:42:58 +00:00
|
|
|
if (results.status == 0) {
|
|
|
|
let i2pVersion = results.outputLines.first?.replace(target: "I2P Core version: ", withString: "")
|
2018-10-11 17:01:21 +00:00
|
|
|
Logger.MLog(level: 1, "".appendingFormat("I2P version detected: %@",i2pVersion ?? "Unknown"))
|
2018-09-26 20:42:58 +00:00
|
|
|
RouterProcessStatus.routerVersion = i2pVersion
|
|
|
|
RouterManager.shared().eventManager.trigger(eventName: "router_version", information: i2pVersion)
|
|
|
|
} else {
|
2018-10-11 17:01:21 +00:00
|
|
|
Logger.MLog(level: 2, "Non zero exit code from subprocess while trying to detect version number!")
|
2018-09-26 20:42:58 +00:00
|
|
|
for line in results.errorsLines {
|
2018-10-11 17:01:21 +00:00
|
|
|
Logger.MLog(level: 2, line)
|
2018-09-26 20:42:58 +00:00
|
|
|
}
|
|
|
|
}
|
2018-09-18 15:36:38 +00:00
|
|
|
} else {
|
2018-10-11 17:01:21 +00:00
|
|
|
Logger.MLog(level: 1, "Warning: Version Detection did NOT captured output")
|
2018-09-18 15:36:38 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-12-08 09:16:28 +00:00
|
|
|
func triggerDockIconShowHide(showIcon state: Bool) -> Bool {
|
|
|
|
var result: Bool
|
|
|
|
if state {
|
|
|
|
result = NSApp.setActivationPolicy(NSApplicationActivationPolicy.regular)
|
|
|
|
} else {
|
|
|
|
result = NSApp.setActivationPolicy(NSApplicationActivationPolicy.accessory)
|
|
|
|
}
|
|
|
|
return result
|
|
|
|
}
|
|
|
|
|
|
|
|
func getDockIconStateIsShowing() -> Bool {
|
|
|
|
if NSApp.activationPolicy() == NSApplicationActivationPolicy.regular {
|
|
|
|
return true
|
|
|
|
} else {
|
|
|
|
return false
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-09-18 15:36:38 +00:00
|
|
|
@objc func applicationDidFinishLaunching() {
|
2018-12-08 09:16:28 +00:00
|
|
|
switch Preferences.shared().showAsIconMode {
|
|
|
|
case .bothIcon, .dockIcon:
|
|
|
|
if (!getDockIconStateIsShowing()) {
|
|
|
|
triggerDockIconShowHide(showIcon: true)
|
|
|
|
}
|
|
|
|
default:
|
|
|
|
if (getDockIconStateIsShowing()) {
|
|
|
|
triggerDockIconShowHide(showIcon: false)
|
|
|
|
}
|
|
|
|
}
|
2018-09-23 03:33:29 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
@objc func listenForEvent(eventName: String, callbackActionFn: @escaping ((Any?)->()) ) {
|
|
|
|
RouterManager.shared().eventManager.listenTo(eventName: eventName, action: callbackActionFn )
|
|
|
|
}
|
|
|
|
|
|
|
|
@objc func triggerEvent(en: String, details: String? = nil) {
|
|
|
|
RouterManager.shared().eventManager.trigger(eventName: en, information: details)
|
2018-09-18 15:36:38 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
@objc static func openLink(url: String) {
|
2018-10-13 03:54:01 +00:00
|
|
|
NSLog("Trying to open \(url)")
|
|
|
|
NSWorkspace.shared().open(NSURL(string: url)! as URL)
|
2018-09-18 15:36:38 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
@objc func applicationWillTerminate() {
|
|
|
|
// Shutdown stuff
|
2018-12-08 09:16:28 +00:00
|
|
|
if (Preferences.shared().stopRouterOnLauncherShutdown) {
|
2018-10-11 17:01:21 +00:00
|
|
|
RouterManager.shared().routerRunner.TeardownLaunchd()
|
|
|
|
sleep(2)
|
|
|
|
let status: AgentStatus? = RouterRunner.launchAgent?.status()
|
|
|
|
if status != .unloaded {
|
|
|
|
Logger.MLog(level:2, "Router service not yet stopped")
|
|
|
|
RouterManager.shared().routerRunner.TeardownLaunchd()
|
|
|
|
sleep(5)
|
|
|
|
}
|
|
|
|
}
|
2018-09-18 15:36:38 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
@objc func terminate(_ why: Any?) {
|
2018-10-11 17:01:21 +00:00
|
|
|
Logger.MLog(level:2, "".appendingFormat("Stopping cause of ", why! as! CVarArg))
|
2018-09-18 15:36:38 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|