diff --git a/gui/griffon-app/controllers/com/muwire/gui/OptionsController.groovy b/gui/griffon-app/controllers/com/muwire/gui/OptionsController.groovy index 2a85a853..29c0b6db 100644 --- a/gui/griffon-app/controllers/com/muwire/gui/OptionsController.groovy +++ b/gui/griffon-app/controllers/com/muwire/gui/OptionsController.groovy @@ -93,6 +93,10 @@ class OptionsController { model.excludeLocalResult = excludeLocalResult uiSettings.excludeLocalResult = excludeLocalResult + boolean showSearchHashes = view.showSearchHashesCheckbox.model.isSelected() + model.showSearchHashes = showSearchHashes + uiSettings.showSearchHashes = showSearchHashes + File uiSettingsFile = new File(core.home, "gui.properties") uiSettingsFile.withOutputStream { uiSettings.write(it) diff --git a/gui/griffon-app/models/com/muwire/gui/MainFrameModel.groovy b/gui/griffon-app/models/com/muwire/gui/MainFrameModel.groovy index 2e6eae96..3d6a9d4c 100644 --- a/gui/griffon-app/models/com/muwire/gui/MainFrameModel.groovy +++ b/gui/griffon-app/models/com/muwire/gui/MainFrameModel.groovy @@ -34,6 +34,7 @@ import griffon.core.mvc.MVCGroup import griffon.inject.MVCMember import griffon.transform.FXObservable import griffon.transform.Observable +import net.i2p.data.Base64 import net.i2p.data.Destination import griffon.metadata.ArtifactProviderFor @@ -67,6 +68,8 @@ class MainFrameModel { volatile Core core private long lastRetryTime = System.currentTimeMillis() + + UISettings uiSettings void updateTablePreservingSelection(String tableName) { def downloadTable = builder.getVariable(tableName) @@ -77,7 +80,7 @@ class MainFrameModel { void mvcGroupInit(Map args) { - UISettings uiSettings = application.context.get("ui-settings") + uiSettings = application.context.get("ui-settings") Timer timer = new Timer("download-pumper", true) timer.schedule({ @@ -258,14 +261,23 @@ class MainFrameModel { void onQueryEvent(QueryEvent e) { if (e.replyTo == core.me.destination) return - StringBuilder sb = new StringBuilder() - e.searchEvent.searchTerms?.each { - sb.append(it) - sb.append(" ") + + def search + if (e.searchEvent.searchHash != null) { + if (!uiSettings.showSearchHashes) { + return + } + search = Base64.encode(e.searchEvent.searchHash) + } else { + StringBuilder sb = new StringBuilder() + e.searchEvent.searchTerms?.each { + sb.append(it) + sb.append(" ") + } + search = sb.toString() + if (search.trim().size() == 0) + return } - def search = sb.toString() - if (search.trim().size() == 0) - return runInsideUIAsync { searches.addFirst(new IncomingSearch(search : search, replyTo : e.replyTo, originator : e.originator)) while(searches.size() > 200) diff --git a/gui/griffon-app/models/com/muwire/gui/OptionsModel.groovy b/gui/griffon-app/models/com/muwire/gui/OptionsModel.groovy index f9a55bc5..f8e6281d 100644 --- a/gui/griffon-app/models/com/muwire/gui/OptionsModel.groovy +++ b/gui/griffon-app/models/com/muwire/gui/OptionsModel.groovy @@ -27,6 +27,7 @@ class OptionsModel { @Observable boolean clearCancelledDownloads @Observable boolean clearFinishedDownloads @Observable boolean excludeLocalResult + @Observable boolean showSearchHashes void mvcGroupInit(Map args) { MuWireSettings settings = application.context.get("muwire-settings") @@ -48,5 +49,6 @@ class OptionsModel { clearCancelledDownloads = uiSettings.clearCancelledDownloads clearFinishedDownloads = uiSettings.clearFinishedDownloads excludeLocalResult = uiSettings.excludeLocalResult + showSearchHashes = uiSettings.showSearchHashes } } \ 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 61e89cd4..919bee8a 100644 --- a/gui/griffon-app/views/com/muwire/gui/OptionsView.groovy +++ b/gui/griffon-app/views/com/muwire/gui/OptionsView.groovy @@ -43,6 +43,7 @@ class OptionsView { def clearCancelledDownloadsCheckbox def clearFinishedDownloadsCheckbox def excludeLocalResultCheckbox + def showSearchHashesCheckbox def buttonsPanel @@ -96,6 +97,8 @@ class OptionsView { clearFinishedDownloadsCheckbox = checkBox(selected : bind {model.clearFinishedDownloads}, constraints : gbc(gridx : 1, gridy:5)) label(text : "Exclude Local Files From Results", constraints: gbc(gridx:0, gridy:6)) excludeLocalResultCheckbox = checkBox(selected : bind {model.excludeLocalResult}, constraints : gbc(gridx: 1, gridy : 6)) + 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)) } buttonsPanel = builder.panel { gridBagLayout() diff --git a/gui/src/main/groovy/com/muwire/gui/UISettings.groovy b/gui/src/main/groovy/com/muwire/gui/UISettings.groovy index a19ea4cd..bd2c1161 100644 --- a/gui/src/main/groovy/com/muwire/gui/UISettings.groovy +++ b/gui/src/main/groovy/com/muwire/gui/UISettings.groovy @@ -8,6 +8,7 @@ class UISettings { boolean clearCancelledDownloads boolean clearFinishedDownloads boolean excludeLocalResult + boolean showSearchHashes UISettings(Properties props) { lnf = props.getProperty("lnf", "system") @@ -16,6 +17,7 @@ class UISettings { clearCancelledDownloads = Boolean.parseBoolean(props.getProperty("clearCancelledDownloads","false")) clearFinishedDownloads = Boolean.parseBoolean(props.getProperty("clearFinishedDownloads","false")) excludeLocalResult = Boolean.parseBoolean(props.getProperty("excludeLocalResult","false")) + showSearchHashes = Boolean.parseBoolean(props.getProperty("showSearchHashes","false")) } void write(OutputStream out) throws IOException { @@ -25,6 +27,7 @@ class UISettings { props.setProperty("clearCancelledDownloads", String.valueOf(clearCancelledDownloads)) props.setProperty("clearFinishedDownloads", String.valueOf(clearFinishedDownloads)) props.setProperty("excludeLocalResult", String.valueOf(excludeLocalResult)) + props.setProperty("showSearchHashes", String.valueOf(showSearchHashes)) if (font != null) props.setProperty("font", font)