Changeset 8b2c3de7 for launchers


Ignore:
Timestamp:
Oct 11, 2018 4:49:19 PM (2 years ago)
Author:
meeh <meeh@…>
Branches:
master
Children:
51cbd8e
Parents:
969bc2d
Message:

OSX Launcher: Cleaning up DetectJava?.swift

File:
1 edited

Legend:

Unmodified
Added
Removed
  • launchers/macosx/I2PLauncher/routermgmt/DetectJava.swift

    r969bc2d r8b2c3de7  
    1212 
    1313  static var hasJRE : Bool = false
     14  static var hasJDK : Bool = false
    1415  static var userWantJRE : Bool = false
    1516  static var userAcceptOracleEULA : Bool = false
    1617 
     18  private static var sharedDetectJava: DetectJava = {
     19    let javaDetector = DetectJava()
     20   
     21    // Configuration
     22    // ...
     23    return javaDetector
     24  }()
    1725 
    18   override init() {
     26  // Initialization
     27 
     28  private override init() {
    1929    super.init()
     30  }
     31 
     32  // MARK: - Accessors
     33 
     34 
     35  class func shared() -> DetectJava {
     36    return sharedDetectJava
     37  }
     38 
     39  @objc var javaBinary: String? {
     40    didSet{
     41      print("DetectJava.javaBinary was set to "+self.javaBinary!)
     42    }
    2043  }
    2144 
     
    3154    didSet{
    3255      DetectJava.hasJRE = true
    33       self.javaHome = self.javaHome.replace(target: "\n", withString: "").replace(target: "Internet Plug-Ins", withString: "Internet\\ Plug-Ins")
     56      // javaHome will have a trailing \n which we remove to not break the cli
     57      self.javaBinary = (self.javaHome+"/bin/java").replace(target: "\n", withString: "")
    3458      print("DetectJava.javaHome did change to "+self.javaHome)
    3559      RouterManager.shared().eventManager.trigger(eventName: "java_found", information: self.javaHome)
     
    5983    self.checkJavaEnvironmentVariable()
    6084    if !(self.javaHome.isEmpty) {
    61       RouterProcessStatus.knownJavaBinPath = Optional.some(self.javaHome)
    6285      DetectJava.hasJRE = true
    6386      return
     
    6689    self.runJavaHomeCmd()
    6790    if !(self.javaHome.isEmpty) {
    68       RouterProcessStatus.knownJavaBinPath = Optional.some(self.javaHome)
    6991      DetectJava.hasJRE = true
    7092      return
     
    7395    self.checkDefaultJREPath()
    7496    if !(self.javaHome.isEmpty) {
    75       RouterProcessStatus.knownJavaBinPath = Optional.some(self.javaHome)
    7697      DetectJava.hasJRE = true
    7798      return
     
    79100  }
    80101 
     102  @objc func getJavaViaLibexecBin() -> Array<String> {
     103    return ["/usr/libexec/java_home", "-v", "1.7+", "--exec", "java"]
     104  }
     105 
    81106  @objc func runJavaHomeCmd() {
    82107    let task = Process()
    83108    task.launchPath = "/usr/libexec/java_home"
    84     task.arguments = []
     109    task.arguments = ["-v", "1.7+"]
    85110    let pipe = Pipe()
    86111    task.standardOutput = pipe
     
    89114   
    90115    var obs1 : NSObjectProtocol!
    91     obs1 = NotificationCenter.default.addObserver(forName: NSNotification.Name.NSFileHandleDataAvailable,
    92                                                   object: outHandle, queue: nil) {  notification -> Void in
    93                                                     let data = outHandle.availableData
    94                                                     if data.count > 0 {
    95                                                       let str = NSString(data: data, encoding: String.Encoding.utf8.rawValue)
    96                                                       if (str != nil) {
    97                                                         let stringVal = str! as String
    98                                                         print("got output: "+stringVal)
    99                                                         // Adding java binary here to be alike the rest
    100                                                         self.javaHome = stringVal + "/jre/bin/java"
    101                                                       }
    102                                                       // TODO: Found something, check it out
    103                                                       outHandle.waitForDataInBackgroundAndNotify()
    104                                                     } else {
    105                                                       print("EOF on stdout from process")
    106                                                       NotificationCenter.default.removeObserver(obs1)
    107                                                       // No JRE so far
    108                                                     }
     116    obs1 = NotificationCenter.default.addObserver(
     117      forName: NSNotification.Name.NSFileHandleDataAvailable,
     118      object: outHandle, queue: nil) {
     119        notification -> Void in
     120          let data = outHandle.availableData
     121          if data.count > 0 {
     122            let str = NSString(data: data, encoding: String.Encoding.utf8.rawValue)
     123            if (str != nil) {
     124              let stringVal = str! as String
     125              print("got output: "+stringVal)
     126              self.javaHome = stringVal
     127            }
     128            // TODO: Found something, check it out
     129            outHandle.waitForDataInBackgroundAndNotify()
     130          } else {
     131            print("EOF on stdout from process")
     132            NotificationCenter.default.removeObserver(obs1)
     133            // No JRE so far
     134          }
    109135    }
    110136   
    111137    var obs2 : NSObjectProtocol!
    112     obs2 = NotificationCenter.default.addObserver(forName: Process.didTerminateNotification,
    113                                                   object: task, queue: nil) { notification -> Void in
    114                                                     print("terminated")
    115                                                     NotificationCenter.default.removeObserver(obs2)
     138    obs2 = NotificationCenter.default.addObserver(
     139      forName: Process.didTerminateNotification,
     140      object: task, queue: nil) {
     141        notification -> Void in
     142          print("terminated")
     143          NotificationCenter.default.removeObserver(obs2)
    116144    }
    117145   
     
    121149  }
    122150 
     151 
    123152  @objc func checkDefaultJREPath() {
    124     let defaultJREPath = "/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/bin/java"
    125     if FileManager.default.fileExists(atPath: defaultJREPath) {
     153    var isDir : ObjCBool = false;
     154    let defaultJREPath = "/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home"
     155    if (FileManager.default.fileExists(atPath: defaultJREPath, isDirectory:&isDir) && isDir.boolValue) {
    126156      // Found it!!
    127157      self.javaHome = defaultJREPath
     
    138168  @objc func checkJavaEnvironmentVariable() {
    139169    let dic = ProcessInfo.processInfo.environment
    140     //ProcessInfo.processInfo.environment["JAVA_HOME"]
    141170    if let javaHomeEnv = dic["JAVA_HOME"] {
    142171      // Maybe we got an JRE
Note: See TracChangeset for help on using the changeset viewer.