From cf386977743d3bfc17c24446a8bf04c0dd38a6c6 Mon Sep 17 00:00:00 2001 From: zzz Date: Mon, 2 Aug 2021 11:36:38 -0400 Subject: [PATCH] Update: Show restart button after an update is handled by a post-processor --- .../i2p/router/update/ConsoleUpdateManager.java | 17 +++++++++++++++-- .../java/src/net/i2p/router/web/NewsHelper.java | 12 ++++++++++++ .../router/web/helpers/ConfigRestartBean.java | 3 ++- .../i2p/router/web/helpers/SummaryHelper.java | 2 +- 4 files changed, 30 insertions(+), 4 deletions(-) diff --git a/apps/routerconsole/java/src/net/i2p/router/update/ConsoleUpdateManager.java b/apps/routerconsole/java/src/net/i2p/router/update/ConsoleUpdateManager.java index 91f0da235..a1f461e24 100644 --- a/apps/routerconsole/java/src/net/i2p/router/update/ConsoleUpdateManager.java +++ b/apps/routerconsole/java/src/net/i2p/router/update/ConsoleUpdateManager.java @@ -79,6 +79,7 @@ public class ConsoleUpdateManager implements UpdateManager, RouterApp { private volatile ClientAppState _state = UNINITIALIZED; private volatile String _status; + private volatile boolean _externalRestartPending; private static final long DEFAULT_MAX_TIME = 3*60*60*1000L; private static final long DEFAULT_CHECK_TIME = 60*1000; @@ -565,6 +566,16 @@ public class ConsoleUpdateManager implements UpdateManager, RouterApp { } } + /** + * A router update had been downloaded and handled by an UpdatePostProcessor. + * It will provide wrapper-like function to install the update and restart after shutdown. + * + * @since 0.9.51 + */ + public boolean isExternalRestartPending() { + return _externalRestartPending; + } + /** * Install a plugin. Non-blocking. * If returns true, then call isUpdateInProgress() in a loop @@ -1376,10 +1387,12 @@ public class ConsoleUpdateManager implements UpdateManager, RouterApp { (ftype == SU3File.TYPE_EXE && SystemVersion.isWindows())) { Integer key = Integer.valueOf(updateType.toString().hashCode() ^ ftype); UpdatePostProcessor upp = _registeredPostProcessors.get(key); - if (upp != null) + if (upp != null) { upp.updateDownloadedandVerified(updateType, ftype, actualVersion, temp); - else + _externalRestartPending = true; + } else { err = "Unsupported su3 file type " + ftype; + } } else { err = "Unsupported su3 file type " + ftype; } diff --git a/apps/routerconsole/java/src/net/i2p/router/web/NewsHelper.java b/apps/routerconsole/java/src/net/i2p/router/web/NewsHelper.java index 1a058a99c..b30bf9d40 100644 --- a/apps/routerconsole/java/src/net/i2p/router/web/NewsHelper.java +++ b/apps/routerconsole/java/src/net/i2p/router/web/NewsHelper.java @@ -69,6 +69,18 @@ public class NewsHelper extends ContentHelper { mgr.getUpdateAvailable(ROUTER_SIGNED_SU3) != null; } + /** + * A router update had been downloaded and handled by an UpdatePostProcessor. + * It will provide wrapper-like function to install the update and restart after shutdown. + * + * @since 0.9.51 + */ + public static boolean isExternalRestartPending() { + ConsoleUpdateManager mgr = ConsoleUpdateManager.getInstance(); + if (mgr == null) return false; + return mgr.isExternalRestartPending(); + } + /** * Release update only. * Available version, will be null if already downloaded. diff --git a/apps/routerconsole/java/src/net/i2p/router/web/helpers/ConfigRestartBean.java b/apps/routerconsole/java/src/net/i2p/router/web/helpers/ConfigRestartBean.java index b49d17ad2..0d3f769ab 100644 --- a/apps/routerconsole/java/src/net/i2p/router/web/helpers/ConfigRestartBean.java +++ b/apps/routerconsole/java/src/net/i2p/router/web/helpers/ConfigRestartBean.java @@ -6,6 +6,7 @@ import net.i2p.router.RouterContext; import net.i2p.router.web.ConfigServiceHandler; import net.i2p.router.web.ContextHelper; import net.i2p.router.web.Messages; +import net.i2p.router.web.NewsHelper; import net.i2p.util.RandomSource; /** @@ -92,7 +93,7 @@ public class ConfigRestartBean { buf.append("
"); buttons(ctx, buf, urlBase, systemNonce, SET2); } else { - if (ctx.hasWrapper()) + if (ctx.hasWrapper() || NewsHelper.isExternalRestartPending()) buttons(ctx, buf, urlBase, systemNonce, SET3); else buttons(ctx, buf, urlBase, systemNonce, SET4); diff --git a/apps/routerconsole/java/src/net/i2p/router/web/helpers/SummaryHelper.java b/apps/routerconsole/java/src/net/i2p/router/web/helpers/SummaryHelper.java index 94a9cb3b2..9723f2fc1 100644 --- a/apps/routerconsole/java/src/net/i2p/router/web/helpers/SummaryHelper.java +++ b/apps/routerconsole/java/src/net/i2p/router/web/helpers/SummaryHelper.java @@ -837,7 +837,7 @@ public class SummaryHelper extends HelperBase { else needSpace = true; buf.append("

").append(_t("Update downloaded")).append("
"); - if (_context.hasWrapper()) + if (_context.hasWrapper() || NewsHelper.isExternalRestartPending()) buf.append(_t("Click Restart to install")); else buf.append(_t("Click Shutdown and restart to install"));