diff --git a/apps/routerconsole/java/src/net/i2p/router/web/PluginStarter.java b/apps/routerconsole/java/src/net/i2p/router/web/PluginStarter.java index 7a3077ea5a2bca46c0d4231295781bf84ee1b4c1..27fe4e9f800697fa0880ef6f65cc7a1a9f76b462 100644 --- a/apps/routerconsole/java/src/net/i2p/router/web/PluginStarter.java +++ b/apps/routerconsole/java/src/net/i2p/router/web/PluginStarter.java @@ -127,6 +127,7 @@ public class PluginStarter implements Runnable { } Log log = ctx.logManager().getLog(PluginStarter.class); + int updated = 0; for (Map.Entry<String, String> entry : toUpdate.entrySet()) { String appName = entry.getKey(); if (log.shouldLog(Log.WARN)) @@ -152,7 +153,13 @@ public class PluginStarter implements Runnable { Thread.sleep(5*1000); } catch (InterruptedException ie) {} } while (puh.isRunning()); + if (puh.wasUpdateSuccessful()) + updated++; } + if (updated > 0) + puc.setDoneStatus(ngettext("1 plugin updated", "{0} plugins updated", updated, ctx)); + else + puc.setDoneStatus(Messages.getString("Plugin update check complete", ctx)); } /** this shouldn't throw anything */ @@ -764,4 +771,9 @@ public class PluginStarter implements Runnable { method.setAccessible(true); method.invoke(urlClassLoader, new Object[]{u}); } + + /** translate a string */ + private static String ngettext(String s, String p, int n, I2PAppContext ctx) { + return Messages.getString(n, s, p, ctx); + } } diff --git a/apps/routerconsole/java/src/net/i2p/router/web/PluginUpdateChecker.java b/apps/routerconsole/java/src/net/i2p/router/web/PluginUpdateChecker.java index bc4ef05dbc118f6d59f3f958ba3406cbaac75766..d5e1687144f619cf9df760306f98daa357c48289 100644 --- a/apps/routerconsole/java/src/net/i2p/router/web/PluginUpdateChecker.java +++ b/apps/routerconsole/java/src/net/i2p/router/web/PluginUpdateChecker.java @@ -104,6 +104,12 @@ public class PluginUpdateChecker extends UpdateHandler { public void setAppStatus(String status) { updateStatus(status); } + + /** @since 0.8.13 */ + public void setDoneStatus(String status) { + updateStatus(status); + scheduleStatusClean(status); + } public boolean isRunning() { return _pluginUpdateCheckerRunner != null && _pluginUpdateCheckerRunner.isRunning(); diff --git a/apps/routerconsole/java/src/net/i2p/router/web/PluginUpdateHandler.java b/apps/routerconsole/java/src/net/i2p/router/web/PluginUpdateHandler.java index 0c1fce48e86b0312f7e73f0abd6c2ab1b6bcac00..f34c9ac903acb11bf420762302fb3165f4694c53 100644 --- a/apps/routerconsole/java/src/net/i2p/router/web/PluginUpdateHandler.java +++ b/apps/routerconsole/java/src/net/i2p/router/web/PluginUpdateHandler.java @@ -42,6 +42,8 @@ public class PluginUpdateHandler extends UpdateHandler { private static PluginUpdateRunner _pluginUpdateRunner; private String _xpi2pURL; private String _appStatus; + private volatile boolean _updated; + private static final String XPI2P = "app.xpi2p"; private static final String ZIP = XPI2P + ".zip"; public static final String PLUGIN_DIR = "plugins"; @@ -92,6 +94,11 @@ public class PluginUpdateHandler extends UpdateHandler { return false; } + /** @since 0.8.13 */ + public boolean wasUpdateSuccessful() { + return _updated; + } + private void scheduleStatusClean(String msg) { SimpleScheduler.getInstance().addEvent(new Cleaner(msg), 20*60*1000); } @@ -108,6 +115,7 @@ public class PluginUpdateHandler extends UpdateHandler { } public class PluginUpdateRunner extends UpdateRunner implements Runnable, EepGet.StatusListener { + private boolean _updated; public PluginUpdateRunner(String url) { super(); @@ -115,6 +123,7 @@ public class PluginUpdateHandler extends UpdateHandler { @Override protected void update() { + _updated = false; updateStatus("<b>" + _("Downloading plugin from {0}", _xpi2pURL) + "</b>"); // use the same settings as for updater boolean shouldProxy = Boolean.valueOf(_context.getProperty(ConfigUpdateHandler.PROP_SHOULD_PROXY, ConfigUpdateHandler.DEFAULT_SHOULD_PROXY)).booleanValue(); @@ -383,6 +392,7 @@ public class PluginUpdateHandler extends UpdateHandler { return; } + _updated = true; to.delete(); if (Boolean.valueOf(props.getProperty("dont-start-at-install")).booleanValue()) { if (Boolean.valueOf(props.getProperty("router-restart-required")).booleanValue())