From 98b98d8938e01cdee71284d20b3b1f7555b2fbdd Mon Sep 17 00:00:00 2001 From: Zlatin Balevsky Date: Sat, 29 Jun 2019 06:33:53 +0100 Subject: [PATCH] I2P status panel --- .../com/muwire/gui/I2PStatusController.groovy | 20 +++++- .../com/muwire/gui/I2PStatusModel.groovy | 14 ++++- .../com/muwire/gui/MainFrameModel.groovy | 4 +- .../views/com/muwire/gui/I2PStatusView.groovy | 61 +++++++++++++++---- .../views/com/muwire/gui/MainFrameView.groovy | 3 + .../com/muwire/gui/MuWireStatusView.groovy | 1 - 6 files changed, 86 insertions(+), 17 deletions(-) diff --git a/gui/griffon-app/controllers/com/muwire/gui/I2PStatusController.groovy b/gui/griffon-app/controllers/com/muwire/gui/I2PStatusController.groovy index d20ec0ed..c6e7b0fe 100644 --- a/gui/griffon-app/controllers/com/muwire/gui/I2PStatusController.groovy +++ b/gui/griffon-app/controllers/com/muwire/gui/I2PStatusController.groovy @@ -4,15 +4,31 @@ import griffon.core.artifact.GriffonController import griffon.core.controller.ControllerAction import griffon.inject.MVCMember import griffon.metadata.ArtifactProviderFor +import net.i2p.router.Router + import javax.annotation.Nonnull +import com.muwire.core.Core + @ArtifactProviderFor(GriffonController) class I2PStatusController { @MVCMember @Nonnull I2PStatusModel model + @MVCMember @Nonnull + I2PStatusView view @ControllerAction - void click() { - model.clickCount++ + void refresh() { + Core core = application.context.get("core") + Router router = core.router + model.networkStatus = router._context.commSystem().status.toStatusString() + model.ntcpConnections = router._context.commSystem().getTransports()["NTCP"].countPeers() + model.ssuConnections = router._context.commSystem().getTransports()["SSU"].countPeers() + } + + @ControllerAction + void close() { + view.dialog.setVisible(false) + mvcGroup.destroy() } } \ No newline at end of file diff --git a/gui/griffon-app/models/com/muwire/gui/I2PStatusModel.groovy b/gui/griffon-app/models/com/muwire/gui/I2PStatusModel.groovy index 3012fc37..37322afc 100644 --- a/gui/griffon-app/models/com/muwire/gui/I2PStatusModel.groovy +++ b/gui/griffon-app/models/com/muwire/gui/I2PStatusModel.groovy @@ -1,10 +1,22 @@ package com.muwire.gui +import javax.annotation.Nonnull + import griffon.core.artifact.GriffonModel +import griffon.inject.MVCMember import griffon.transform.Observable import griffon.metadata.ArtifactProviderFor @ArtifactProviderFor(GriffonModel) class I2PStatusModel { - @Observable int clickCount = 0 + @MVCMember @Nonnull + I2PStatusController controller + + @Observable int ntcpConnections + @Observable int ssuConnections + @Observable String networkStatus + + void mvcGroupInit(Map args) { + controller.refresh() + } } \ No newline at end of file diff --git a/gui/griffon-app/models/com/muwire/gui/MainFrameModel.groovy b/gui/griffon-app/models/com/muwire/gui/MainFrameModel.groovy index d6ee4457..b8e3319b 100644 --- a/gui/griffon-app/models/com/muwire/gui/MainFrameModel.groovy +++ b/gui/griffon-app/models/com/muwire/gui/MainFrameModel.groovy @@ -52,6 +52,7 @@ class MainFrameModel { MainFrameController controller @Inject @Nonnull GriffonApplication application @Observable boolean coreInitialized = false + @Observable boolean routerPresent def results = new ConcurrentHashMap<>() def downloads = [] @@ -76,7 +77,7 @@ class MainFrameModel { private final Set downloadInfoHashes = new HashSet<>() - volatile Core core + @Observable volatile Core core private long lastRetryTime = System.currentTimeMillis() @@ -124,6 +125,7 @@ class MainFrameModel { application.addPropertyChangeListener("core", {e -> coreInitialized = (e.getNewValue() != null) core = e.getNewValue() + routerPresent = core.router != null me = core.me.getHumanReadableName() core.eventBus.register(UIResultEvent.class, this) core.eventBus.register(UIResultBatchEvent.class, this) diff --git a/gui/griffon-app/views/com/muwire/gui/I2PStatusView.groovy b/gui/griffon-app/views/com/muwire/gui/I2PStatusView.groovy index 6094dc47..f96ba6d6 100644 --- a/gui/griffon-app/views/com/muwire/gui/I2PStatusView.groovy +++ b/gui/griffon-app/views/com/muwire/gui/I2PStatusView.groovy @@ -3,7 +3,15 @@ package com.muwire.gui import griffon.core.artifact.GriffonView import griffon.inject.MVCMember import griffon.metadata.ArtifactProviderFor + +import javax.swing.JDialog +import javax.swing.JPanel import javax.swing.SwingConstants + +import java.awt.BorderLayout +import java.awt.event.WindowAdapter +import java.awt.event.WindowEvent + import javax.annotation.Nonnull @ArtifactProviderFor(GriffonView) @@ -13,19 +21,48 @@ class I2PStatusView { @MVCMember @Nonnull I2PStatusModel model + def mainFrame + def dialog + def panel + def buttonsPanel + void initUI() { - builder.with { - application(size: [320, 160], id: 'i-2-p-status', - title: application.configuration['application.title'], - iconImage: imageIcon('/griffon-icon-48x48.png').image, - iconImages: [imageIcon('/griffon-icon-48x48.png').image, - imageIcon('/griffon-icon-32x32.png').image, - imageIcon('/griffon-icon-16x16.png').image]) { - gridLayout(rows: 2, cols: 1) - label(id: 'clickLabel', text: bind { model.clickCount }, - horizontalAlignment: SwingConstants.CENTER) - button(id: 'clickButton', clickAction) - } + mainFrame = application.windowManager.findWindow("main-frame") + + dialog = new JDialog(mainFrame, "I2P Status", true) + + panel = builder.panel { + gridBagLayout() + label(text : "Network status", constraints : gbc(gridx:0, gridy:0)) + label(text : bind {model.networkStatus}, constraints : gbc(gridx: 1, gridy:0)) + label(text : "NTCP Connections", constraints : gbc(gridx:0, gridy:1)) + label(text : bind {model.ntcpConnections}, constraints : gbc(gridx: 1, gridy:1)) + label(text : "SSU Connections", constraints : gbc(gridx:0, gridy:2)) + label(text : bind {model.ssuConnections}, constraints : gbc(gridx: 1, gridy:2)) + } + + buttonsPanel = builder.panel { + gridBagLayout() + button(text : "Refresh", constraints: gbc(gridx: 0, gridy: 0), refreshAction) + button(text : "Close", constraints : gbc(gridx : 1, gridy :0), closeAction) } } + + void mvcGroupInit(Map args) { + JPanel statusPanel = new JPanel() + statusPanel.setLayout(new BorderLayout()) + statusPanel.add(panel, BorderLayout.CENTER) + statusPanel.add(buttonsPanel, BorderLayout.SOUTH) + + dialog.getContentPane().add(statusPanel) + dialog.pack() + dialog.setLocationRelativeTo(mainFrame) + dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE) + dialog.addWindowListener(new WindowAdapter() { + public void windowClosed(WindowEvent e) { + mvcGroup.destroy() + } + }) + dialog.show() + } } \ No newline at end of file diff --git a/gui/griffon-app/views/com/muwire/gui/MainFrameView.groovy b/gui/griffon-app/views/com/muwire/gui/MainFrameView.groovy index 4b057e3f..ec729682 100644 --- a/gui/griffon-app/views/com/muwire/gui/MainFrameView.groovy +++ b/gui/griffon-app/views/com/muwire/gui/MainFrameView.groovy @@ -22,6 +22,7 @@ import javax.swing.border.Border import javax.swing.table.DefaultTableCellRenderer import com.muwire.core.Constants +import com.muwire.core.MuWireSettings import com.muwire.core.download.Downloader import com.muwire.core.files.FileSharedEvent @@ -73,6 +74,8 @@ class MainFrameView { } menu (text : "Status") { menuItem("MuWire", actionPerformed : {mvcGroup.createMVCGroup("mu-wire-status")}) + MuWireSettings muSettings = application.context.get("muwire-settings") + menuItem("I2P", enabled : bind {model.routerPresent}, actionPerformed: {mvcGroup.createMVCGroup("i-2-p-status")}) } } borderLayout() diff --git a/gui/griffon-app/views/com/muwire/gui/MuWireStatusView.groovy b/gui/griffon-app/views/com/muwire/gui/MuWireStatusView.groovy index 9460ae2c..5879ab04 100644 --- a/gui/griffon-app/views/com/muwire/gui/MuWireStatusView.groovy +++ b/gui/griffon-app/views/com/muwire/gui/MuWireStatusView.groovy @@ -30,7 +30,6 @@ class MuWireStatusView { void initUI() { mainFrame = application.windowManager.findWindow("main-frame") - Core core = application.context.get("core") dialog = new JDialog(mainFrame, "MuWire Status", true)