forked from I2P_Developers/i2p.i2p
OSX Launcher: Cleaning up DetectJava.swift
This commit is contained in:
@@ -11,14 +11,37 @@ import Foundation
|
||||
@objc class DetectJava : NSObject {
|
||||
|
||||
static var hasJRE : Bool = false
|
||||
static var hasJDK : Bool = false
|
||||
static var userWantJRE : Bool = false
|
||||
static var userAcceptOracleEULA : Bool = false
|
||||
|
||||
private static var sharedDetectJava: DetectJava = {
|
||||
let javaDetector = DetectJava()
|
||||
|
||||
// Configuration
|
||||
// ...
|
||||
return javaDetector
|
||||
}()
|
||||
|
||||
override init() {
|
||||
// Initialization
|
||||
|
||||
private override init() {
|
||||
super.init()
|
||||
}
|
||||
|
||||
// MARK: - Accessors
|
||||
|
||||
|
||||
class func shared() -> DetectJava {
|
||||
return sharedDetectJava
|
||||
}
|
||||
|
||||
@objc var javaBinary: String? {
|
||||
didSet{
|
||||
print("DetectJava.javaBinary was set to "+self.javaBinary!)
|
||||
}
|
||||
}
|
||||
|
||||
// Java checks
|
||||
@objc var javaHome: String = ""{
|
||||
|
||||
@@ -30,7 +53,8 @@ import Foundation
|
||||
//Called after the change
|
||||
didSet{
|
||||
DetectJava.hasJRE = true
|
||||
self.javaHome = self.javaHome.replace(target: "\n", withString: "").replace(target: "Internet Plug-Ins", withString: "Internet\\ Plug-Ins")
|
||||
// javaHome will have a trailing \n which we remove to not break the cli
|
||||
self.javaBinary = (self.javaHome+"/bin/java").replace(target: "\n", withString: "")
|
||||
print("DetectJava.javaHome did change to "+self.javaHome)
|
||||
RouterManager.shared().eventManager.trigger(eventName: "java_found", information: self.javaHome)
|
||||
}
|
||||
@@ -58,61 +82,65 @@ import Foundation
|
||||
print("Start with checking environment variable")
|
||||
self.checkJavaEnvironmentVariable()
|
||||
if !(self.javaHome.isEmpty) {
|
||||
RouterProcessStatus.knownJavaBinPath = Optional.some(self.javaHome)
|
||||
DetectJava.hasJRE = true
|
||||
return
|
||||
}
|
||||
print("Checking with the java_home util")
|
||||
self.runJavaHomeCmd()
|
||||
if !(self.javaHome.isEmpty) {
|
||||
RouterProcessStatus.knownJavaBinPath = Optional.some(self.javaHome)
|
||||
DetectJava.hasJRE = true
|
||||
return
|
||||
}
|
||||
print("Checking default JRE install path")
|
||||
self.checkDefaultJREPath()
|
||||
if !(self.javaHome.isEmpty) {
|
||||
RouterProcessStatus.knownJavaBinPath = Optional.some(self.javaHome)
|
||||
DetectJava.hasJRE = true
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
@objc func getJavaViaLibexecBin() -> Array<String> {
|
||||
return ["/usr/libexec/java_home", "-v", "1.7+", "--exec", "java"]
|
||||
}
|
||||
|
||||
@objc func runJavaHomeCmd() {
|
||||
let task = Process()
|
||||
task.launchPath = "/usr/libexec/java_home"
|
||||
task.arguments = []
|
||||
task.arguments = ["-v", "1.7+"]
|
||||
let pipe = Pipe()
|
||||
task.standardOutput = pipe
|
||||
let outHandle = pipe.fileHandleForReading
|
||||
outHandle.waitForDataInBackgroundAndNotify()
|
||||
|
||||
var obs1 : NSObjectProtocol!
|
||||
obs1 = NotificationCenter.default.addObserver(forName: NSNotification.Name.NSFileHandleDataAvailable,
|
||||
object: outHandle, queue: nil) { notification -> Void in
|
||||
let data = outHandle.availableData
|
||||
if data.count > 0 {
|
||||
let str = NSString(data: data, encoding: String.Encoding.utf8.rawValue)
|
||||
if (str != nil) {
|
||||
let stringVal = str! as String
|
||||
print("got output: "+stringVal)
|
||||
// Adding java binary here to be alike the rest
|
||||
self.javaHome = stringVal + "/jre/bin/java"
|
||||
}
|
||||
// TODO: Found something, check it out
|
||||
outHandle.waitForDataInBackgroundAndNotify()
|
||||
} else {
|
||||
print("EOF on stdout from process")
|
||||
NotificationCenter.default.removeObserver(obs1)
|
||||
// No JRE so far
|
||||
}
|
||||
obs1 = NotificationCenter.default.addObserver(
|
||||
forName: NSNotification.Name.NSFileHandleDataAvailable,
|
||||
object: outHandle, queue: nil) {
|
||||
notification -> Void in
|
||||
let data = outHandle.availableData
|
||||
if data.count > 0 {
|
||||
let str = NSString(data: data, encoding: String.Encoding.utf8.rawValue)
|
||||
if (str != nil) {
|
||||
let stringVal = str! as String
|
||||
print("got output: "+stringVal)
|
||||
self.javaHome = stringVal
|
||||
}
|
||||
// TODO: Found something, check it out
|
||||
outHandle.waitForDataInBackgroundAndNotify()
|
||||
} else {
|
||||
print("EOF on stdout from process")
|
||||
NotificationCenter.default.removeObserver(obs1)
|
||||
// No JRE so far
|
||||
}
|
||||
}
|
||||
|
||||
var obs2 : NSObjectProtocol!
|
||||
obs2 = NotificationCenter.default.addObserver(forName: Process.didTerminateNotification,
|
||||
object: task, queue: nil) { notification -> Void in
|
||||
print("terminated")
|
||||
NotificationCenter.default.removeObserver(obs2)
|
||||
obs2 = NotificationCenter.default.addObserver(
|
||||
forName: Process.didTerminateNotification,
|
||||
object: task, queue: nil) {
|
||||
notification -> Void in
|
||||
print("terminated")
|
||||
NotificationCenter.default.removeObserver(obs2)
|
||||
}
|
||||
|
||||
task.launch()
|
||||
@@ -120,9 +148,11 @@ import Foundation
|
||||
self.testedJH = true
|
||||
}
|
||||
|
||||
|
||||
@objc func checkDefaultJREPath() {
|
||||
let defaultJREPath = "/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/bin/java"
|
||||
if FileManager.default.fileExists(atPath: defaultJREPath) {
|
||||
var isDir : ObjCBool = false;
|
||||
let defaultJREPath = "/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home"
|
||||
if (FileManager.default.fileExists(atPath: defaultJREPath, isDirectory:&isDir) && isDir.boolValue) {
|
||||
// Found it!!
|
||||
self.javaHome = defaultJREPath
|
||||
}
|
||||
@@ -137,7 +167,6 @@ import Foundation
|
||||
|
||||
@objc func checkJavaEnvironmentVariable() {
|
||||
let dic = ProcessInfo.processInfo.environment
|
||||
//ProcessInfo.processInfo.environment["JAVA_HOME"]
|
||||
if let javaHomeEnv = dic["JAVA_HOME"] {
|
||||
// Maybe we got an JRE
|
||||
print("Found JAVA_HOME with value:")
|
||||
|
||||
Reference in New Issue
Block a user