From 9fc2a0c4c5b0351f07884bed56bda468039eb1d0 Mon Sep 17 00:00:00 2001 From: Zlatin Balevsky Date: Sun, 11 Oct 2020 17:42:47 +0100 Subject: [PATCH] show total up & down speeds --- .../muwire/core/download/DownloadManager.groovy | 6 ++++++ .../models/com/muwire/gui/MainFrameModel.groovy | 13 ++++++++++++- gui/griffon-app/resources/down_arrow.png | Bin 0 -> 1840 bytes gui/griffon-app/resources/up_arrow.png | Bin 0 -> 1847 bytes .../views/com/muwire/gui/MainFrameView.groovy | 15 ++++++++++++++- 5 files changed, 32 insertions(+), 2 deletions(-) create mode 100644 gui/griffon-app/resources/down_arrow.png create mode 100644 gui/griffon-app/resources/up_arrow.png diff --git a/core/src/main/groovy/com/muwire/core/download/DownloadManager.groovy b/core/src/main/groovy/com/muwire/core/download/DownloadManager.groovy index 69e1e832..8180197b 100644 --- a/core/src/main/groovy/com/muwire/core/download/DownloadManager.groovy +++ b/core/src/main/groovy/com/muwire/core/download/DownloadManager.groovy @@ -255,4 +255,10 @@ public class DownloadManager { public boolean isDownloading(InfoHash infoHash) { downloaders.containsKey(infoHash) } + + public int totalDownloadSpeed() { + int total = 0 + downloaders.values().each { total += it.speed() } + total + } } diff --git a/gui/griffon-app/models/com/muwire/gui/MainFrameModel.groovy b/gui/griffon-app/models/com/muwire/gui/MainFrameModel.groovy index 3f6198f8..f93b479b 100644 --- a/gui/griffon-app/models/com/muwire/gui/MainFrameModel.groovy +++ b/gui/griffon-app/models/com/muwire/gui/MainFrameModel.groovy @@ -143,6 +143,9 @@ class MainFrameModel { @Observable boolean chatServerRunning @Observable Downloader downloader + + @Observable int downSpeed + @Observable int upSpeed private final Set downloadInfoHashes = new ConcurrentHashSet<>() @@ -208,6 +211,14 @@ class MainFrameModel { updateTablePreservingSelection("downloads-table") updateTablePreservingSelection("trusted-table") updateTablePreservingSelection("distrusted-table") + + int totalUpload = 0 + uploads.each { + totalUpload += it.speed() + } + upSpeed = totalUpload + if (core != null) + downSpeed = core.downloadManager.totalDownloadSpeed() } }, 1000, 1000) @@ -682,7 +693,7 @@ class MainFrameModel { public int speed() { - if (finished) + if (finished) return 0 initIfNeeded() diff --git a/gui/griffon-app/resources/down_arrow.png b/gui/griffon-app/resources/down_arrow.png new file mode 100644 index 0000000000000000000000000000000000000000..6f6d3f595e0893d6c2a7f794fcbf76b2b886707e GIT binary patch literal 1840 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 literal 0 HcmV?d00001 diff --git a/gui/griffon-app/views/com/muwire/gui/MainFrameView.groovy b/gui/griffon-app/views/com/muwire/gui/MainFrameView.groovy index d973e37d..cf290c8b 100644 --- a/gui/griffon-app/views/com/muwire/gui/MainFrameView.groovy +++ b/gui/griffon-app/views/com/muwire/gui/MainFrameView.groovy @@ -593,8 +593,21 @@ class MainFrameView { button(text : trans("COPY_SHORT"), constraints : gbc(gridx:1, gridy:0), copyShortAction) button(text : trans("COPY_FULL"), constraints : gbc(gridx:2, gridy:0), copyFullAction) } + panel (constraints : BorderLayout.CENTER) { + gridBagLayout() + panel (constraints : gbc(gridx : 0, gridy : 0)){ + borderLayout() + label(icon : imageIcon('/down_arrow.png'), constraints : BorderLayout.CENTER) + label(text : bind { DataHelper.formatSize2Decimal(model.downSpeed, false) + trans("B_SEC") }, constraints : BorderLayout.EAST) + } + panel (constraints : gbc(gridx: 1, gridy : 0)){ + borderLayout() + label(icon : imageIcon('/up_arrow.png'), constraints : BorderLayout.CENTER) + label(text : bind { DataHelper.formatSize2Decimal(model.upSpeed, false) + trans("B_SEC") }, constraints : BorderLayout.EAST) + } + } panel (constraints : BorderLayout.EAST) { - label(trans("CONNECTIONS") + ":") + label(" " + trans("CONNECTIONS") + ":") label(text : bind {model.connections}) } }