display search results in new window
This commit is contained in:
@@ -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))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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() {
|
||||
|
||||
}
|
||||
}
|
||||
@@ -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()
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user