diff --git a/LINUX.html b/docs/LINUX.html
similarity index 100%
rename from LINUX.html
rename to docs/LINUX.html
diff --git a/LINUX.md b/docs/LINUX.md
similarity index 100%
rename from LINUX.md
rename to docs/LINUX.md
diff --git a/OSX.html b/docs/OSX.html
similarity index 100%
rename from OSX.html
rename to docs/OSX.html
diff --git a/OSX.md b/docs/OSX.md
similarity index 100%
rename from OSX.md
rename to docs/OSX.md
diff --git a/WINDOWS.html b/docs/WINDOWS.html
similarity index 100%
rename from WINDOWS.html
rename to docs/WINDOWS.html
diff --git a/WINDOWS.md b/docs/WINDOWS.md
similarity index 100%
rename from WINDOWS.md
rename to docs/WINDOWS.md
diff --git a/i2p.plugins.firefox.torrent b/i2p.plugins.firefox.torrent
index a36c030..3cbc343 100644
Binary files a/i2p.plugins.firefox.torrent and b/i2p.plugins.firefox.torrent differ
diff --git a/scripts/build.number b/scripts/build.number
index 27ef1e4..d26d8fc 100644
--- a/scripts/build.number
+++ b/scripts/build.number
@@ -1,3 +1,3 @@
#Build Number for ANT. Do not edit!
-#Mon Dec 19 16:45:03 UTC 2022
-build.number=268
+#Mon Dec 19 22:31:46 UTC 2022
+build.number=308
diff --git a/scripts/favicon.png b/scripts/favicon.png
index 3d76cec..433b8ec 100644
Binary files a/scripts/favicon.png and b/scripts/favicon.png differ
diff --git a/scripts/favicon.png.b64 b/scripts/favicon.png.b64
index e106aa7..9850282 100644
--- a/scripts/favicon.png.b64
+++ b/scripts/favicon.png.b64
@@ -1 +1 @@
-iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABmJLR0QA~wD~AP-gvaeTAAAHF0lEQVRYhcWXf0zU5x3HX8~37jjhjoKoEESRdaI2tsrU1a7bog7FuMlsXP05rQ5SY4xrs6y2XTBbarppbKZpuprUIK3GOgOdWvwBGB06goiAiBbm9abIifwQDvl5v-8---OQnYCVbS57J0~u-X6ez~N-v7~PPd~nB~yfof6DPnHAa8Ai4NuAAWgGyoDPgYr~lQEN2AZsj4rC9MYbMHUqymCA-~eRkydRZ88iwAlgC9Dy7xh5EvTAnzWNQHY2YrcTECEggvSXgMeDlJURSEtDgDvA5KdpYLfRiJSWDgg-tnR0IBkZCFAHmJ-GeArgPX4c8XqRmhqkogLp6~uXaHc3cuYMcuwY0tKCtLYiKSkI8PunYeCz9HTE4UB2754jxcXFUllZKVlZG6SzM2gkK2utWCwWsdlssmPHu9Lejpw4gQAdQMR~I64D2nJzEYsFKSgoCIiIBAIBqa-vl~x8pLwcqa6ulv54wGq1SmEh0taGaBoCLPkmAW1wYP2h9aZNn2wy9D9OAMYkJ4PHAyaTSdXW1jJv3jxsNhtuNxgM0NjYyK5du6ioqFButxuDAcaMgbQ0AJ5~yH13xYpw65IlxlA9~YDw0fXPaTptv0J9zx3udm7M25h94eMLB-9cuKPMZkhMhPff34vJNJeSkhKysn5Bbi6MHQt5ecvYuTPAhg0bSEx08M47oBQkJABgtq1eNF4C2v4A3YvDIvE1rFqc59FrW5M~L-hWAFtyt5gdmqMOYWKoO1ePK~doxtFXr11DmzkT-vrg8mVwOuHFFyE2Npjn84HFEvydOhWMRhCBpUvh5l~1b11YlroGmB3KrZDjiblnl-sBHMqxdLA4gNFs~LE-Ut9utfpiZ84EkwlSU4f-jzo9TJ8OEhJ70AGFhZDz~en6weIAglpmW71ovAYgIs8MpQWlVETUxKhThw8H58DjoIapl5aCCM0vx8XeeEw3Tfz6aA1Ah-6iIL5hkkrsdfY~fPklrqKixxuQQfX2NtixA4A~jjKGlQHdw3SrT8Rs0QByVuZYlKi3BpmwodgM3AJ-u2YNlJcPbyB0BLo6ISsLqqoAmDPpyOkeRDJBnCFpHYh6TeXl-R~ZjDJyM6aKkvmCdEVIxKl9K~f1AlOAg8BLJp3i4wPC2rXBzy8Ufj9UV8MXv4th8ZkEKuniN9jwwwHg9cblSxJ8OlmsVMCn8~pPTTh-3g4hnyHAgcTaTvz-FkS665pcnn2wGfhgIRHm7Uxmlv8ZNu2tYdWqHoqKwOEIGmlpgVsnY1hcMJ73GI0RjQXEMJsoUrmRCbRvXx-3S~lUKwpvb6DXwfGg5oABKf3uOnz-T4CIrr4AR0-3dQAxe0kikwQi0dOKh4Vbe~D5oObNBDbcnogfIRIdozEM2dt~yGhSCKPphehf4eN1QWIQMGmmuxnHMtJzlufUKAApeykJv-8mYHR7hWVv13G2wskxnmMZ47Dj4zKd2PEy9-9W7HbQ~yCFuUQ9IihKUBK00YMPEzpSqRTv1u-o5HnJg6dObVJt0ozgUuz3LgSMAEaDIjM9DhQU04EH4U~YSKeOE69YSU6GopN6XiByMOGAeBNuUqniPl4u4lCxybFDcoHpt6fdnqzvt-4OHb8VPxpLlEnPT97-B8n-CGIJAyAlBZqaIGFPIhFDtxEAHPjZGd5Ai05HTu89Rk-J8UXGReqHSRU0XEEWneE00B7amjY3mtO7J1~5JfWeD8Z1kpv1Ju1Vi5gxA-K9xmH4gvgaB~N~vYqagx~iXjsHt8N9SNNpliHqIucPrTxk0wDUy2UdiCwFbva3-0EdSZtlTAVe7XO6fJMT4tmxcTV7Mjfzc27yNx7gJjCwCAWAWzj4VHePXpcLEZgyMZ6-xr5qFOnAlYE3F4oMPsM6GHQoFUFxafazeOhSC6pCRyQ3~lvxK9ru3ici2sSCVxZgjjJzZs9R5ouZmVuX0BU3mqhJcUSPiSb~03y-Kr~B~bttfiABaAXI~EvmJDduz-GfHW5-SDyiU7FS6spHRR~N0ZRG2Kgwpek0AaguqSb~s3y2fbgNpZQSkYFVef97-7leev0ckPZN3MPPpKFZmtvpVuHmcKXT61D9mDZrmkqalqSUUqrf6MO6CvgDCnjwZOoRwBhhvGq9bh22rbK4kvbmR-Yvzj4n4aZwGMElZUQGXD2u7MIjhQF7i~2ReF1lHROenUDJ6RKcfU4Eobe7l3NfnEOn13mA~Cdx60ZiAGhC46f2Vnt8uDmczvZOrl68SktDC26nm3Hx47Bet-LocVBVXIXX4-VSwaUjIpL9tAy86-pzrVOaosHSoG59dUt6Onu4V39P1ZbX4vP5JGZcjOpo7ZDmhmZVcb4CEXkeuAtcG6HGY6GARoJnjcHFRfBi6iR46LATvBPagK-BXSMhHwlGEdwrQkdMD7gBR3~cT3A98o-QE4B~ArxvOJmT8uQGAAAAAElFTkSuQmCC
\ No newline at end of file
+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
\ No newline at end of file
diff --git a/scripts/plugin.config b/scripts/plugin.config
index f5f3c01..f3a2737 100644
--- a/scripts/plugin.config
+++ b/scripts/plugin.config
@@ -3,7 +3,7 @@ signer=idki2p@mail.i2p
consoleLinkName=I2PFirefox
consoleLinkURL=/
consoleLinkTooltip=Firefox process manager for I2P
-icon-code=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
+icon-code=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
description=Firefox process manager for I2P
author=idk
updateURL=/i2psnark/i2p.plugins.firefox/i2pfirefox-update.xpi2p
diff --git a/src/java/net/i2p/i2pfirefox/I2PBrowser.java b/src/java/net/i2p/i2pfirefox/I2PBrowser.java
index f384880..aeb5437 100644
--- a/src/java/net/i2p/i2pfirefox/I2PBrowser.java
+++ b/src/java/net/i2p/i2pfirefox/I2PBrowser.java
@@ -1,5 +1,6 @@
package net.i2p.i2pfirefox;
+import java.awt.AWTException;
import java.awt.Image;
import java.awt.Menu;
import java.awt.MenuItem;
@@ -41,9 +42,12 @@ public class I2PBrowser extends I2PCommonBrowser {
private final I2PChromium i2pChromium = new I2PChromium();
private final I2PGenericUnsafeBrowser i2pGeneral =
new I2PGenericUnsafeBrowser();
+ private final Toolkit toolkit = Toolkit.getDefaultToolkit();
private final SystemTray tray = initTray();
+ private final Image image = toolkit.getImage("icon.png");
private final TrayIcon icon = initIcon();
private final PopupMenu menu = initMenu();
+
private final Menu submenuStrict = new Menu("Strict Mode");
private final MenuItem launchRegularBrowserStrict =
new MenuItem("Launch I2P Browser");
@@ -57,6 +61,7 @@ public class I2PBrowser extends I2PCommonBrowser {
private final MenuItem launchConfigBrowserUsability =
new MenuItem("Launch I2P Console");
private final MenuItem closeItem = new MenuItem("Close");
+
public boolean firefox = false;
public boolean chromium = false;
public boolean generic = false;
@@ -96,7 +101,7 @@ public class I2PBrowser extends I2PCommonBrowser {
*
* @since 0.0.16
*/
- public I2PBrowser() {}
+ public I2PBrowser() { initIconFile(); }
/**
* Construct an I2PBrowser class which automatically determines which browser
@@ -106,6 +111,7 @@ public class I2PBrowser extends I2PCommonBrowser {
*/
public I2PBrowser(String browserPath) {
I2PGenericUnsafeBrowser.BROWSER = browserPath;
+ initIconFile();
}
public void setBrowser(String browserPath) {
@@ -282,7 +288,10 @@ public class I2PBrowser extends I2PCommonBrowser {
try {
if (useSystray) {
logger.info("Starting systray");
- systray(args);
+ if (systray()) {
+ logger.info("Systray started");
+ }
+ startupSystray();
Runtime.getRuntime().addShutdownHook(new Thread() {
@Override
public void run() {
@@ -313,13 +322,6 @@ public class I2PBrowser extends I2PCommonBrowser {
}
return false;
}
- protected void shutdownSystray() {
- tray.remove(icon);
- File systrayIsRunningFile =
- new File(runtimeDirectory(""), "systray.running");
- if (systrayIsRunningFile.exists())
- systrayIsRunningFile.delete();
- }
private SystemTray initTray() {
if (systrayIsRunningExternally()) {
return null;
@@ -336,46 +338,61 @@ public class I2PBrowser extends I2PCommonBrowser {
return menu;
}
- private TrayIcon initIcon() {
- File iconFile = new File(runtimeDirectory(""), "icon.png");
- if (!iconFile.exists()) {
+ private File initIconFile() {
+ File icon = new File(runtimeDirectory(""), "icon.png");
+ if (!icon.exists()) {
InputStream resources =
I2PBrowser.class.getClassLoader().getResourceAsStream("icon.png");
try {
- OutputStream fos = new FileOutputStream(iconFile);
+ OutputStream fos = new FileOutputStream(icon);
copy(resources, fos);
} catch (IOException e) {
logger.warning(e.toString());
}
}
- Toolkit toolkit = Toolkit.getDefaultToolkit();
- Image image = toolkit.getImage("icon.png");
+ return icon;
+ }
+ private TrayIcon initIcon() {
TrayIcon icon = new TrayIcon(image, "I2P Browser Profile Controller", menu);
icon.setImageAutoSize(true);
return icon;
}
- public boolean systray(String[] args) throws Exception {
+ protected void startupSystray() {
+ logger.info("Setting up systray");
+ File systrayIsRunningFile =
+ new File(runtimeDirectory(""), "systray.running");
+ if (systrayIsRunningFile.exists()) {
+ try {
+ logger.info("Adding icon to systray");
+ tray.add(icon);
+ } catch (AWTException e) {
+ logger.warning(e.toString());
+ }
+ }
+ }
+ protected void shutdownSystray() {
+ tray.remove(icon);
+ File systrayIsRunningFile =
+ new File(runtimeDirectory(""), "systray.running");
+ if (systrayIsRunningFile.exists())
+ systrayIsRunningFile.delete();
+ }
+ public boolean systray() throws Exception {
if (tray == null)
throw new Exception("System Tray is Null Exception");
- tray.add(icon);
launchRegularBrowserStrict.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
- ArrayList argsList = new ArrayList();
- argsList.addAll(Arrays.asList(args));
- argsList.add("-strict");
- main(argsList.toArray(args));
+ String[] args = {"-strict"};
+ main(args);
}
});
submenuStrict.add(launchRegularBrowserStrict);
logger.info("Added strict mode browser");
launchPrivateBrowserStrict.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
- ArrayList argsList =
- new ArrayList(Arrays.asList(new String[] {"-private"}));
- argsList.addAll(Arrays.asList(args));
- argsList.add("-strict");
- main(argsList.toArray(args));
+ String[] args = {"-private", "-strict"};
+ main(args);
}
});
submenuStrict.add(launchPrivateBrowserStrict);
@@ -384,32 +401,24 @@ public class I2PBrowser extends I2PCommonBrowser {
logger.info("Added strict mode submenu");
launchRegularBrowserUsability.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
- ArrayList argsList = new ArrayList();
- argsList.addAll(Arrays.asList(args));
- argsList.add("-usability");
- main(argsList.toArray(args));
+ String[] args = {"-usability"};
+ main(args);
}
});
submenuUsability.add(launchRegularBrowserUsability);
logger.info("Added usability mode browser");
launchPrivateBrowserUsability.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
- ArrayList argsList =
- new ArrayList(Arrays.asList(new String[] {"-private"}));
- argsList.addAll(Arrays.asList(args));
- argsList.add("-usability");
- main(argsList.toArray(args));
+ String[] args = {"-private", "-strict"};
+ main(args);
}
});
submenuUsability.add(launchPrivateBrowserUsability);
logger.info("Added usability+private mode browser");
launchConfigBrowserUsability.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
- ArrayList argsList = new ArrayList(
- Arrays.asList(new String[] {"-app", "http://127.0.0.1:7657"}));
- argsList.addAll(Arrays.asList(args));
- argsList.add("-usability");
- main(argsList.toArray(args));
+ String[] args = {"-usability", "-app", "http://127.0.0.1:7657"};
+ main(args);
}
});
submenuUsability.add(launchConfigBrowserUsability);
diff --git a/src/java/net/i2p/i2pfirefox/I2PFirefox.java b/src/java/net/i2p/i2pfirefox/I2PFirefox.java
index 4665edb..22b7530 100644
--- a/src/java/net/i2p/i2pfirefox/I2PFirefox.java
+++ b/src/java/net/i2p/i2pfirefox/I2PFirefox.java
@@ -29,7 +29,7 @@ import java.util.stream.Stream;
*/
public class I2PFirefox extends I2PCommonBrowser {
private final String[] FIREFOX_SEARCH_PATHS = FIREFOX_FINDER();
- private Process p = null;
+ private Process process = null;
public static boolean usability = false;
private static String baseMode() {
@@ -696,10 +696,10 @@ public class I2PFirefox extends I2PCommonBrowser {
}
try {
logger.info(pb.command().toString());
- p = pb.start();
+ process = pb.start();
logger.info("I2PFirefox");
sleep(2000);
- return p;
+ return process;
} catch (Throwable e) {
logger.info(e.toString());
}
@@ -725,12 +725,12 @@ public class I2PFirefox extends I2PCommonBrowser {
}
public void launch(int privateWindow, String[] url) {
if (waitForProxy()) {
- p = launchAndDetatch(privateWindow, url);
- if (p == null)
+ process = launchAndDetatch(privateWindow, url);
+ if (process == null)
return;
try {
logger.info("Waiting for I2PFirefox to close...");
- int exit = p.waitFor();
+ int exit = process.waitFor();
logger.info("I2PFirefox exited with value: " + exit);
if (isOSX())
System.exit(exit);