diff --git a/buildscripts/launcher.sh b/buildscripts/launcher.sh index 9bec837..940db15 100755 --- a/buildscripts/launcher.sh +++ b/buildscripts/launcher.sh @@ -125,6 +125,7 @@ cd "$SCRIPT_DIR"/java net/i2p/router/CopyConfigDir.java \ net/i2p/router/WindowsServiceUtil.java \ net/i2p/router/WindowsAppUtil.java \ + net/i2p/router/I2PAppUtil.java \ net/i2p/router/WinUpdatePostProcessor.java \ net/i2p/router/WinLauncher.java \ net/i2p/router/WinUpdateProcess.java \ diff --git a/java/net/i2p/router/CopyConfigDir.java b/java/net/i2p/router/CopyConfigDir.java index 7e049c7..26c7819 100644 --- a/java/net/i2p/router/CopyConfigDir.java +++ b/java/net/i2p/router/CopyConfigDir.java @@ -12,7 +12,7 @@ import java.util.logging.FileHandler; import java.util.logging.SimpleFormatter; import net.i2p.util.Log; -public class CopyConfigDir extends WindowsAppUtil { +public class CopyConfigDir extends I2PAppUtil { final Log logger; public CopyConfigDir(RouterContext ctx) { @@ -142,7 +142,7 @@ public class CopyConfigDir extends WindowsAppUtil { * @return */ protected File logFile(String p) { - File log = new File(selectProgramFile(), "logs"); + File log = new File(selectHome(), "logs"); if (!log.exists()) log.mkdirs(); return new File(log, p); diff --git a/java/net/i2p/router/I2PAppUtil.java b/java/net/i2p/router/I2PAppUtil.java new file mode 100644 index 0000000..2059482 --- /dev/null +++ b/java/net/i2p/router/I2PAppUtil.java @@ -0,0 +1,106 @@ +package net.i2p.router; + +import java.io.File; +import java.io.IOException; +import javax.swing.JOptionPane; + +public class I2PAppUtil extends WindowsAppUtil { + public String ServiceUpdaterString() { + return "http://tc73n4kivdroccekirco7rhgxdg5f3cjvbaapabupeyzrqwv5guq.b32.i2p/news.su3"; + } + public String ServiceBackupUpdaterString() { + return "http://dn3tvalnjz432qkqsvpfdqrwpqkw3ye4n4i2uyfr4jexvo3sp5ka.b32.i2p/news.su3"; + } + public String ServiceStaticUpdaterString() { + return "http://echelon.i2p/i2p/i2pupdate.sud,http://stats.i2p/i2p/i2pupdate.sud"; + } + + public String getProgramFilesInstall() { + String programFiles = System.getenv("PROGRAMFILES"); + if (programFiles != null) { + File programFilesI2P = new File(programFiles, "i2p/i2p.exe"); + if (programFilesI2P.exists()) + return programFilesI2P.getAbsolutePath(); + } + String programFiles86 = System.getenv("PROGRAMFILES86"); + if (programFiles86 != null) { + File programFiles86I2P = new File(programFiles86, "i2p/i2p.exe"); + if (programFiles86I2P.exists()) + return programFiles86I2P.getAbsolutePath(); + } + return null; + } + + public boolean checkProgramFilesInstall() { + String programFiles = System.getenv("PROGRAMFILES"); + if (programFiles != null) { + File programFilesI2P = new File(programFiles, "i2p/i2p.exe"); + if (programFilesI2P.exists()) + return true; + } + String programFiles86 = System.getenv("PROGRAMFILES86"); + if (programFiles86 != null) { + File programFiles86I2P = new File(programFiles86, "i2p/i2p.exe"); + if (programFiles86I2P.exists()) + return true; + } + return false; + } + + public boolean promptUserInstallStartIfAvailable() { + if (osName() != "windows") { + return true; + } + if (checkProgramFilesInstall()) { + int a; + String message = + "It appears you have an existing, unbundled I2P rotuer installed.\n"; + message += + "However, it is not running yet. Please start it using the shortcut on the desktop.\n"; + message += + "If you click \"No\", the Easy-Install router will be launched instead.\n"; + a = JOptionPane.showConfirmDialog(null, message, + "I2P Service detected not running", + JOptionPane.YES_NO_OPTION); + if (a == JOptionPane.NO_OPTION) { + // Do nothing here, this will continue on to launch a jpackaged router + return true; + } else { + try { + String pfi = getProgramFilesInstall(); + if (pfi != null) + Runtime.getRuntime().exec(new String[] {pfi}); + } catch (IOException e) { + return false; + } + return true; + } + } + return true; + } + + /** + * get the path to the binary of the app-image root by getting the path to + * java.home and the OS, and traversing up to the app-image root based on that + * information, then getting the binary path on a per-platform basis. The path + * returned will be relative to the root. + * + * @return the app-image root + */ + protected String appImageExe() { + File aih = appImageHome(); + if (aih != null) { + // get the name of the aih directory itself, which will be the default + // name of the executable as well + String baseName = "I2P"; + switch (osName()) { + case "windows": + return baseName + ".exe"; + case "mac": + case "linux": + return "./bin/" + baseName; + } + } + return null; + } +} diff --git a/java/net/i2p/router/WinLauncher.java b/java/net/i2p/router/WinLauncher.java index 3e87680..f0b89e1 100644 --- a/java/net/i2p/router/WinLauncher.java +++ b/java/net/i2p/router/WinLauncher.java @@ -24,7 +24,7 @@ import net.i2p.util.Log; * appdata * router.pid - the pid of the java process. */ -public class WinLauncher extends WindowsAppUtil { +public class WinLauncher extends I2PAppUtil { private final CopyConfigDir copyConfigDir; WinUpdatePostProcessor wupp = null; private Router i2pRouter; @@ -56,7 +56,7 @@ public class WinLauncher extends WindowsAppUtil { var launcher = new WinLauncher(); launcher.setupLauncher(); int proxyTimeoutTime = 200; - + launcher.logger.info("\t" + System.getProperty("user.dir")); launcher.logger.info("\t" + System.getProperty("i2p.dir.base")); launcher.logger.info("\t" + System.getProperty("i2p.dir.config")); @@ -104,7 +104,7 @@ public class WinLauncher extends WindowsAppUtil { } private File programFile() { - File programs = selectProgramFile(); + File programs = selectHome(); if (!programs.exists()) programs.mkdirs(); else if (!programs.isDirectory()) { diff --git a/java/net/i2p/router/WindowsAppUtil.java b/java/net/i2p/router/WindowsAppUtil.java index ae9750b..f5c229a 100644 --- a/java/net/i2p/router/WindowsAppUtil.java +++ b/java/net/i2p/router/WindowsAppUtil.java @@ -17,17 +17,9 @@ public class WindowsAppUtil extends WindowsServiceUtil { } return null; } - - protected File selectHome() { // throws Exception { - File i2p = checkPathEnvironmentVariable("I2P_CONFIG"); - String path_override = System.getenv("I2P_CONFIG"); - if (i2p == null) - i2p = appImageHome(); - return i2p; - } - protected File selectProgramFile() { - File i2p = checkPathEnvironmentVariable("I2P"); + protected File selectHome() { // throws Exception { + File i2p = checkPathEnvironmentVariable("JPACKAGE_HOME"); if (i2p == null) i2p = appImageHome(); return i2p; @@ -90,12 +82,15 @@ public class WindowsAppUtil extends WindowsServiceUtil { protected String appImageExe() { File aih = appImageHome(); if (aih != null) { + // get the name of the aih directory itself, which will be the default + // name of the executable as well + String baseName = aih.getName(); switch (osName()) { case "windows": - return "I2P.exe"; + return baseName + ".exe"; case "mac": case "linux": - return "./bin/I2P"; + return "./bin/" + baseName; } } return null; diff --git a/java/net/i2p/router/WindowsServiceUtil.java b/java/net/i2p/router/WindowsServiceUtil.java index 52bac52..6d14911 100644 --- a/java/net/i2p/router/WindowsServiceUtil.java +++ b/java/net/i2p/router/WindowsServiceUtil.java @@ -145,87 +145,13 @@ public class WindowsServiceUtil { return false; } } - return isStart("i2p"); + return isStart(serviceName); } return true; } return true; } - public String ServiceUpdaterString() { - return "http://tc73n4kivdroccekirco7rhgxdg5f3cjvbaapabupeyzrqwv5guq.b32.i2p/news.su3"; - } - public String ServiceBackupUpdaterString() { - return "http://dn3tvalnjz432qkqsvpfdqrwpqkw3ye4n4i2uyfr4jexvo3sp5ka.b32.i2p/news.su3"; - } - public String ServiceStaticUpdaterString() { - return "http://echelon.i2p/i2p/i2pupdate.sud,http://stats.i2p/i2p/i2pupdate.sud"; - } - - public String getProgramFilesInstall() { - String programFiles = System.getenv("PROGRAMFILES"); - if (programFiles != null) { - File programFilesI2P = new File(programFiles, "i2p/i2p.exe"); - if (programFilesI2P.exists()) - return programFilesI2P.getAbsolutePath(); - } - String programFiles86 = System.getenv("PROGRAMFILES86"); - if (programFiles86 != null) { - File programFiles86I2P = new File(programFiles86, "i2p/i2p.exe"); - if (programFiles86I2P.exists()) - return programFiles86I2P.getAbsolutePath(); - } - return null; - } - - public boolean checkProgramFilesInstall() { - String programFiles = System.getenv("PROGRAMFILES"); - if (programFiles != null) { - File programFilesI2P = new File(programFiles, "i2p/i2p.exe"); - if (programFilesI2P.exists()) - return true; - } - String programFiles86 = System.getenv("PROGRAMFILES86"); - if (programFiles86 != null) { - File programFiles86I2P = new File(programFiles86, "i2p/i2p.exe"); - if (programFiles86I2P.exists()) - return true; - } - return false; - } - - public boolean promptUserInstallStartIfAvailable() { - if (osName() != "windows") { - return true; - } - if (checkProgramFilesInstall()) { - int a; - String message = - "It appears you have an existing, unbundled I2P rotuer installed.\n"; - message += - "However, it is not running yet. Please start it using the shortcut on the desktop.\n"; - message += - "If you click \"No\", the Easy-Install router will be launched instead.\n"; - a = JOptionPane.showConfirmDialog(null, message, - "I2P Service detected not running", - JOptionPane.YES_NO_OPTION); - if (a == JOptionPane.NO_OPTION) { - // Do nothing here, this will continue on to launch a jpackaged router - return true; - } else { - try { - String pfi = getProgramFilesInstall(); - if (pfi != null) - Runtime.getRuntime().exec(new String[] {pfi}); - } catch (IOException e) { - return false; - } - return true; - } - } - return true; - } - public String getServiceState(String serviceName) { String stateString = "uninstalled"; int state = getServiceStateInt(serviceName);