display search results in new window

This commit is contained in:
Zlatin Balevsky
2019-10-24 14:39:25 +01:00
parent 94e7c42d19
commit 837aa6974b
5 changed files with 129 additions and 9 deletions

View File

@@ -87,6 +87,6 @@ class MainWindowView extends BasicWindow {
private void search() {
String query = searchTextBox.getText()
SearchModel model = new SearchModel(query, core)
textGUI.addWindowAndWait(new SearchView(model,core))
textGUI.addWindowAndWait(new SearchView(model,core, textGUI))
}
}

View File

@@ -0,0 +1,28 @@
package com.muwire.clilanterna
import com.muwire.core.search.UIResultBatchEvent
import com.muwire.core.search.UIResultEvent
import net.i2p.data.Base64
import net.i2p.data.DataHelper
import com.googlecode.lanterna.gui2.table.TableModel
class ResultsModel {
private final UIResultBatchEvent results
final TableModel model
final Map<String, UIResultEvent> rootToResult = new HashMap<>()
ResultsModel(UIResultBatchEvent results) {
this.results = results
model = new TableModel("Name","Size","Hash","Sources","Comment")
results.results.each {
String size = DataHelper.formatSize2Decimal(it.size, false) + "B"
String infoHash = Base64.encode(it.infohash.getRoot())
String sources = String.valueOf(it.sources.size())
String comment = String.valueOf(it.comment != null)
model.addRow(it.name, size, infoHash, sources, comment)
rootToResult.put(infoHash, it)
}
}
}

View File

@@ -0,0 +1,48 @@
package com.muwire.clilanterna
import com.googlecode.lanterna.gui2.BasicWindow
import com.googlecode.lanterna.gui2.Button
import com.googlecode.lanterna.gui2.GridLayout
import com.googlecode.lanterna.gui2.GridLayout.Alignment
import com.googlecode.lanterna.gui2.Panel
import com.googlecode.lanterna.gui2.TextGUI
import com.googlecode.lanterna.gui2.Window
import com.googlecode.lanterna.gui2.table.Table
import com.muwire.core.Core
class ResultsView extends BasicWindow {
private final ResultsModel model
private final TextGUI textGUI
private final Core core
private final Table table
ResultsView(ResultsModel model, Core core, TextGUI textGUI) {
super(model.results.results[0].sender.getHumanReadableName() + " Results")
this.model = model
this.core = core
this.textGUI = textGUI
setHints([Window.Hint.EXPANDED])
Panel contentPanel = new Panel()
contentPanel.setLayoutManager(new GridLayout(1))
table = new Table("Name","Size","Hash","Sources","Comment")
table.setCellSelection(false)
table.setSelectAction({rowSelected()})
table.setTableModel(model.model)
contentPanel.addComponent(table, GridLayout.createLayoutData(Alignment.CENTER, Alignment.CENTER))
Button closeButton = new Button("Close", {close()})
contentPanel.addComponent(closeButton, GridLayout.createLayoutData(Alignment.CENTER, Alignment.CENTER))
setComponent(contentPanel)
closeButton.takeFocus()
}
private void rowSelected() {
}
}

View File

@@ -14,7 +14,9 @@ class SearchModel {
private final String query
private final Core core
final TableModel model
final Map<String, UIResultBatchEvent> resultsPerSender = new HashMap<>()
SearchModel(String query, Core core) {
this.query = query
this.core = core
@@ -40,6 +42,9 @@ class SearchModel {
void onUIResultBatchEvent(UIResultBatchEvent e) {
Persona sender = e.results[0].sender
resultsPerSender.put(sender.getHumanReadableName(), e)
String browse = String.valueOf(e.results[0].browse)
String results = String.valueOf(e.results.length)
String trust = core.trustService.getLevel(sender.destination).toString()

View File

@@ -2,7 +2,10 @@ package com.muwire.clilanterna
import com.googlecode.lanterna.gui2.BasicWindow
import com.googlecode.lanterna.gui2.Button
import com.googlecode.lanterna.gui2.GridLayout
import com.googlecode.lanterna.gui2.GridLayout.Alignment
import com.googlecode.lanterna.gui2.Panel
import com.googlecode.lanterna.gui2.TextGUI
import com.googlecode.lanterna.gui2.Window
import com.googlecode.lanterna.gui2.table.Table
@@ -12,28 +15,64 @@ class SearchView extends BasicWindow {
private final Core core
private final SearchModel model
private final Table table
private final TextGUI textGUI
SearchView(SearchModel model, Core core) {
SearchView(SearchModel model, Core core, TextGUI textGUI) {
super(model.query)
this.core = core
this.model = model
this.textGUI = textGUI
setHints([Window.Hint.EXPANDED])
Panel contentPanel = new Panel()
contentPanel.setLayoutManager(new GridLayout(1))
table = new Table("Sender","Results","Browse","Trust")
table.setCellSelection(false)
table.setSelectAction({rowSelected()})
table.setTableModel(model.model)
contentPanel.addComponent(table, GridLayout.createLayoutData(Alignment.CENTER, Alignment.CENTER))
Button closeButton = new Button("Close", {
model.unregister()
close()
})
contentPanel.addComponent(closeButton)
table = new Table("Sender","Results","Browse","Trust")
table.setCellSelection(false)
table.setTableModel(model.model)
contentPanel.addComponent(table)
contentPanel.addComponent(closeButton, GridLayout.createLayoutData(Alignment.CENTER, Alignment.CENTER))
setComponent(contentPanel)
closeButton.takeFocus()
}
private void rowSelected() {
int selectedRow = table.getSelectedRow()
def rows = model.model.getRow(selectedRow)
boolean browse = Boolean.parseBoolean(rows[2])
if (browse) {
Window prompt = new BasicWindow("Show Or Browse "+rows[0]+"?")
prompt.setHints([Window.Hint.CENTERED])
Panel contentPanel = new Panel()
contentPanel.setLayoutManager(new GridLayout(3))
Button showResults = new Button("Show Results", {
showResults(rows[0])
})
Button browseHost = new Button("Browse Host", {})
Button closePrompt = new Button("Close", {prompt.close()})
contentPanel.addComponent(showResults, , GridLayout.createLayoutData(Alignment.CENTER, Alignment.CENTER))
contentPanel.addComponent(browseHost, GridLayout.createLayoutData(Alignment.CENTER, Alignment.CENTER))
contentPanel.addComponent(closePrompt, GridLayout.createLayoutData(Alignment.CENTER, Alignment.CENTER))
prompt.setComponent(contentPanel)
showResults.takeFocus()
textGUI.addWindowAndWait(prompt)
} else {
showResults(rows[0])
}
}
private void showResults(String personaName) {
def results = model.resultsPerSender.get(personaName)
ResultsModel resultsModel = new ResultsModel(results)
ResultsView resultsView = new ResultsView(resultsModel, core, textGUI)
textGUI.addWindowAndWait(resultsView)
}
}