From d90d84ab06166d2b1cc1bc723394b8bc1329ea7d Mon Sep 17 00:00:00 2001 From: catbref Date: Fri, 3 Apr 2020 08:31:41 +0100 Subject: [PATCH] More descriptive tray mouseover, showing sync percent or connecting status Added sync percent to API call GET /admin/status Added SysTray i18n "CONNECTING" key to CheckTranslations test app. --- .../java/org/qortal/api/model/NodeStatus.java | 3 +++ .../org/qortal/api/resource/AdminResource.java | 3 +++ .../java/org/qortal/controller/Controller.java | 18 +++++++++++++----- src/main/resources/i18n/SysTray_en.properties | 2 ++ .../qortal/test/apps/CheckTranslations.java | 2 +- 5 files changed, 22 insertions(+), 6 deletions(-) diff --git a/src/main/java/org/qortal/api/model/NodeStatus.java b/src/main/java/org/qortal/api/model/NodeStatus.java index 3ab0f873..a9f0e167 100644 --- a/src/main/java/org/qortal/api/model/NodeStatus.java +++ b/src/main/java/org/qortal/api/model/NodeStatus.java @@ -9,6 +9,9 @@ public class NodeStatus { public boolean isMintingPossible; public boolean isSynchronizing; + // Not always present + public Integer syncPercent; + public NodeStatus() { } diff --git a/src/main/java/org/qortal/api/resource/AdminResource.java b/src/main/java/org/qortal/api/resource/AdminResource.java index 7ba536ce..18650793 100644 --- a/src/main/java/org/qortal/api/resource/AdminResource.java +++ b/src/main/java/org/qortal/api/resource/AdminResource.java @@ -139,6 +139,9 @@ public class AdminResource { nodeStatus.isMintingPossible = Controller.getInstance().isMintingPossible(); nodeStatus.isSynchronizing = Controller.getInstance().isSynchronizing(); + if (nodeStatus.isSynchronizing) + nodeStatus.syncPercent = Controller.getInstance().getSyncPercent(); + return nodeStatus; } diff --git a/src/main/java/org/qortal/controller/Controller.java b/src/main/java/org/qortal/controller/Controller.java index a412746b..74d54a8b 100644 --- a/src/main/java/org/qortal/controller/Controller.java +++ b/src/main/java/org/qortal/controller/Controller.java @@ -136,6 +136,8 @@ public class Controller extends Thread { /** Whether we are attempting to synchronize. */ private volatile boolean isSynchronizing = false; + /** Temporary estimate of synchronization progress for SysTray use. */ + private volatile int syncPercent = 0; /** Latest block signatures from other peers that we know are on inferior chains. */ List inferiorChainSignatures = new ArrayList<>(); @@ -258,6 +260,10 @@ public class Controller extends Thread { return this.isSynchronizing; } + public Integer getSyncPercent() { + return this.isSynchronizing ? this.syncPercent : null; + } + // Entry point public static void main(String[] args) { @@ -522,6 +528,7 @@ public class Controller extends Thread { int index = new SecureRandom().nextInt(peers.size()); Peer peer = peers.get(index); + syncPercent = (this.chainTip.getHeight() * 100) / peer.getChainTipData().getLastHeight(); isSynchronizing = true; updateSysTray(); @@ -633,14 +640,15 @@ public class Controller extends Thread { String connectionsText = Translator.INSTANCE.translate("SysTray", numberOfPeers != 1 ? "CONNECTIONS" : "CONNECTION"); String heightText = Translator.INSTANCE.translate("SysTray", "BLOCK_HEIGHT"); - String actionKey; + String actionText; if (isMintingPossible) - actionKey = "MINTING_ENABLED"; + actionText = Translator.INSTANCE.translate("SysTray", "MINTING_ENABLED"); else if (isSynchronizing) - actionKey = "SYNCHRONIZING_BLOCKCHAIN"; + actionText = String.format("%s - %d%%", Translator.INSTANCE.translate("SysTray", "SYNCHRONIZING_BLOCKCHAIN"), syncPercent); + else if (numberOfPeers < Settings.getInstance().getMinBlockchainPeers()) + actionText = Translator.INSTANCE.translate("SysTray", "CONNECTING"); else - actionKey = "MINTING_DISABLED"; - String actionText = Translator.INSTANCE.translate("SysTray", actionKey); + actionText = Translator.INSTANCE.translate("SysTray", "MINTING_DISABLED"); String tooltip = String.format("%s - %d %s - %s %d", actionText, numberOfPeers, connectionsText, heightText, height); SysTray.getInstance().setToolTipText(tooltip); diff --git a/src/main/resources/i18n/SysTray_en.properties b/src/main/resources/i18n/SysTray_en.properties index 118da1bb..f41c1a32 100644 --- a/src/main/resources/i18n/SysTray_en.properties +++ b/src/main/resources/i18n/SysTray_en.properties @@ -9,6 +9,8 @@ BLOCK_HEIGHT = height CHECK_TIME_ACCURACY = Check time accuracy +CONNECTING = Connecting + CONNECTION = connection CONNECTIONS = connections diff --git a/src/test/java/org/qortal/test/apps/CheckTranslations.java b/src/test/java/org/qortal/test/apps/CheckTranslations.java index 70215bcd..faf1727d 100644 --- a/src/test/java/org/qortal/test/apps/CheckTranslations.java +++ b/src/test/java/org/qortal/test/apps/CheckTranslations.java @@ -14,7 +14,7 @@ public class CheckTranslations { private static final String[] SUPPORTED_LANGS = new String[] { "en", "de", "zh", "ru" }; private static final Set SYSTRAY_KEYS = Set.of("AUTO_UPDATE", "APPLYING_UPDATE_AND_RESTARTING", "BLOCK_HEIGHT", - "CHECK_TIME_ACCURACY", "CONNECTION", "CONNECTIONS", "CREATING_BACKUP_OF_DB_FILES", "DB_BACKUP", "EXIT", + "CHECK_TIME_ACCURACY", "CONNECTING", "CONNECTION", "CONNECTIONS", "CREATING_BACKUP_OF_DB_FILES", "DB_BACKUP", "EXIT", "MINTING_DISABLED", "MINTING_ENABLED", "NTP_NAG_CAPTION", "NTP_NAG_TEXT_UNIX", "NTP_NAG_TEXT_WINDOWS", "OPEN_UI", "SYNCHRONIZE_CLOCK", "SYNCHRONIZING_BLOCKCHAIN", "SYNCHRONIZING_CLOCK");