From a7aa3008c0daeaa9f1e78d89d1fc502ea9ad1769 Mon Sep 17 00:00:00 2001 From: Zlatin Balevsky Date: Thu, 27 Jun 2019 00:42:27 +0100 Subject: [PATCH] bandwidth settings --- .../main/groovy/com/muwire/core/Core.groovy | 2 ++ .../com/muwire/core/MuWireSettings.groovy | 5 +++++ .../com/muwire/gui/OptionsController.groovy | 18 ++++++++++++++-- .../models/com/muwire/gui/OptionsModel.groovy | 9 ++++++++ .../views/com/muwire/gui/OptionsView.groovy | 21 +++++++++++++++++++ 5 files changed, 53 insertions(+), 2 deletions(-) diff --git a/core/src/main/groovy/com/muwire/core/Core.groovy b/core/src/main/groovy/com/muwire/core/Core.groovy index d8383e3c..844ac30a 100644 --- a/core/src/main/groovy/com/muwire/core/Core.groovy +++ b/core/src/main/groovy/com/muwire/core/Core.groovy @@ -101,6 +101,8 @@ public class Core { log.info("launching embedded router") Properties routerProps = new Properties() routerProps.setProperty("i2p.dir.config", home.getAbsolutePath()) + routerProps.setProperty("i2np.inboundKBytesPerSecond", String.valueOf(props.inBw)) + routerProps.setProperty("i2np.outboundKBytesPerSecond", String.valueOf(props.outBw)) router = new Router(routerProps) I2PAppContext.getGlobalContext().metaClass = new RouterContextMetaClass() router.runRouter() diff --git a/core/src/main/groovy/com/muwire/core/MuWireSettings.groovy b/core/src/main/groovy/com/muwire/core/MuWireSettings.groovy index d5081934..1f2966d2 100644 --- a/core/src/main/groovy/com/muwire/core/MuWireSettings.groovy +++ b/core/src/main/groovy/com/muwire/core/MuWireSettings.groovy @@ -22,6 +22,7 @@ class MuWireSettings { int hostClearInterval int meshExpiration boolean embeddedRouter + int inBw, outBw MuWireSettings() { this(new Properties()) @@ -41,6 +42,8 @@ class MuWireSettings { hostClearInterval = Integer.valueOf(props.getProperty("hostClearInterval","60")) meshExpiration = Integer.valueOf(props.getProperty("meshExpiration","60")) embeddedRouter = Boolean.valueOf(props.getProperty("embeddedRouter","false")) + inBw = Integer.valueOf(props.getProperty("inBw","256")) + outBw = Integer.valueOf(props.getProperty("outBw","128")) watchedDirectories = new HashSet<>() if (props.containsKey("watchedDirectories")) { @@ -64,6 +67,8 @@ class MuWireSettings { props.setProperty("hostClearInterval", String.valueOf(hostClearInterval)) props.setProperty("meshExpiration", String.valueOf(meshExpiration)) props.setProperty("embeddedRouter", String.valueOf(embeddedRouter)) + props.setProperty("inBw", String.valueOf(inBw)) + props.setProperty("outBw", String.valueOf(outBw)) if (!watchedDirectories.isEmpty()) { String encoded = watchedDirectories.stream(). diff --git a/gui/griffon-app/controllers/com/muwire/gui/OptionsController.groovy b/gui/griffon-app/controllers/com/muwire/gui/OptionsController.groovy index 493b27c8..2b91f055 100644 --- a/gui/griffon-app/controllers/com/muwire/gui/OptionsController.groovy +++ b/gui/griffon-app/controllers/com/muwire/gui/OptionsController.groovy @@ -4,10 +4,15 @@ import griffon.core.artifact.GriffonController import griffon.core.controller.ControllerAction import griffon.inject.MVCMember import griffon.metadata.ArtifactProviderFor +import groovy.util.logging.Log + +import java.util.logging.Level + import javax.annotation.Nonnull import javax.swing.JFileChooser import com.muwire.core.Core +import com.muwire.core.MuWireSettings @ArtifactProviderFor(GriffonController) class OptionsController { @@ -47,7 +52,7 @@ class OptionsController { text = view.retryField.text model.downloadRetryInterval = text - def settings = application.context.get("muwire-settings") + MuWireSettings settings = application.context.get("muwire-settings") settings.downloadRetryInterval = Integer.valueOf(text) text = view.updateField.text @@ -64,7 +69,16 @@ class OptionsController { String downloadLocation = model.downloadLocation settings.downloadLocation = new File(downloadLocation) - + + if (settings.embeddedRouter) { + text = view.inBwField.text + model.inBw = text + settings.inBw = Integer.valueOf(text) + text = view.outBwField.text + model.outBw = text + settings.outBw = Integer.valueOf(text) + } + File settingsFile = new File(core.home, "MuWire.properties") settingsFile.withOutputStream { settings.write(it) diff --git a/gui/griffon-app/models/com/muwire/gui/OptionsModel.groovy b/gui/griffon-app/models/com/muwire/gui/OptionsModel.groovy index af993f86..2f568cae 100644 --- a/gui/griffon-app/models/com/muwire/gui/OptionsModel.groovy +++ b/gui/griffon-app/models/com/muwire/gui/OptionsModel.groovy @@ -30,6 +30,10 @@ class OptionsModel { @Observable boolean excludeLocalResult @Observable boolean showSearchHashes + // bw options + @Observable String inBw + @Observable String outBw + void mvcGroupInit(Map args) { MuWireSettings settings = application.context.get("muwire-settings") downloadRetryInterval = settings.downloadRetryInterval @@ -52,5 +56,10 @@ class OptionsModel { clearFinishedDownloads = uiSettings.clearFinishedDownloads excludeLocalResult = uiSettings.excludeLocalResult showSearchHashes = uiSettings.showSearchHashes + + if (core.router != null) { + inBw = String.valueOf(settings.inBw) + outBw = String.valueOf(settings.outBw) + } } } \ No newline at end of file diff --git a/gui/griffon-app/views/com/muwire/gui/OptionsView.groovy b/gui/griffon-app/views/com/muwire/gui/OptionsView.groovy index 39ec79c2..dadb57c0 100644 --- a/gui/griffon-app/views/com/muwire/gui/OptionsView.groovy +++ b/gui/griffon-app/views/com/muwire/gui/OptionsView.groovy @@ -9,6 +9,8 @@ import javax.swing.JPanel import javax.swing.JTabbedPane import javax.swing.SwingConstants +import com.muwire.core.Core + import java.awt.BorderLayout import java.awt.event.WindowAdapter import java.awt.event.WindowEvent @@ -26,6 +28,7 @@ class OptionsView { def p def i def u + def bandwidth def retryField def updateField @@ -45,6 +48,10 @@ class OptionsView { def excludeLocalResultCheckbox def showSearchHashesCheckbox + + def inBwField + def outBwField + def buttonsPanel def mainFrame @@ -104,6 +111,16 @@ class OptionsView { // label(text : "Show Hash Searches In Monitor", constraints: gbc(gridx:0, gridy:7)) // showSearchHashesCheckbox = checkBox(selected : bind {model.showSearchHashes}, constraints : gbc(gridx: 1, gridy: 7)) } + bandwidth = builder.panel { + gridBagLayout() + label(text : "Changing these settings requires a restart", constraints : gbc(gridx : 0, gridy : 0, gridwidth: 2)) + label(text : "Inbound bandwidth (KB)", constraints : gbc(gridx: 0, gridy : 1)) + inBwField = textField(text : bind {model.inBw}, columns : 3, constraints : gbc(gridx : 1, gridy : 1)) + label(text : "Outbound bandwidth (KB)", constraints : gbc(gridx: 0, gridy : 2)) + outBwField = textField(text : bind {model.outBw}, columns : 3, constraints : gbc(gridx : 1, gridy : 2)) + } + + buttonsPanel = builder.panel { gridBagLayout() button(text : "Save", constraints : gbc(gridx : 1, gridy: 2), saveAction) @@ -116,6 +133,10 @@ class OptionsView { tabbedPane.addTab("MuWire", p) tabbedPane.addTab("I2P", i) tabbedPane.addTab("GUI", u) + Core core = application.context.get("core") + if (core.router != null) { + tabbedPane.addTab("Bandwidth", bandwidth) + } JPanel panel = new JPanel() panel.setLayout(new BorderLayout())