on-demand fetching UI side

browse-v2
Zlatin Balevsky 2022-08-28 04:36:31 +01:00
parent 8b1612460e
commit 9b1ab655d8
No known key found for this signature in database
GPG Key ID: A72832072D525E41
4 changed files with 68 additions and 7 deletions

View File

@ -24,6 +24,7 @@ import com.muwire.core.search.UIResultBatchEvent
import com.muwire.core.search.UIResultEvent
import javax.swing.JTextField
import javax.swing.tree.TreePath
@ArtifactProviderFor(GriffonController)
class BrowseController {
@ -126,7 +127,7 @@ class BrowseController {
for(BrowseStatusEvent event : statusCopy) {
model.status = event.status
if(event.status == BrowseStatus.FETCHING) {
model.currentBatch = event.currentItems
model.currentBatch += event.currentItems
model.totalResults = event.totalResults
}
}
@ -221,4 +222,10 @@ class BrowseController {
mvcGroup.createMVCGroup("view-profile", uuid.toString(), params)
}
void requestFetch(TreePath treePath, boolean recursive) {
List<String> path = model.resultsTreeModel.getPathFromRoot(treePath)
if (path != null)
model.session.fetch(path, recursive)
}
}

View File

@ -10,6 +10,8 @@ import javax.swing.JTable
import javax.swing.JTextField
import javax.swing.JTree
import javax.swing.KeyStroke
import javax.swing.event.TreeExpansionEvent
import javax.swing.event.TreeExpansionListener
import javax.swing.tree.TreePath
import java.awt.event.ActionEvent
import java.awt.event.KeyEvent
@ -55,6 +57,8 @@ class BrowseView {
def sequentialDownloadCheckbox
private boolean onDemandExpansionRegistered
void initUI() {
int rowHeight = application.context.get("row-height")
int treeRowHeight = application.context.get("tree-row-height")
@ -330,11 +334,13 @@ class BrowseView {
Set<TreePath> expanded = new HashSet<>(treeExpansions.expandedPaths)
model.resultsTreeModel.nodeStructureChanged(model.root)
if (model.session == null && !model.session.supportsIncremental()) {
if (treeExpansions.manualExpansion)
expanded.each { tree.expandPath(it) }
else
TreeUtil.expand(tree)
TreeUtil.expand(tree)
} else if (!onDemandExpansionRegistered) {
onDemandExpansionRegistered = true
tree.addTreeExpansionListener(new OnDemandTreeExpansion())
}
if (treeExpansions.manualExpansion)
expanded.each { tree.expandPath(it) }
tree.setSelectionPaths(selectedPaths)
}
@ -416,4 +422,16 @@ class BrowseView {
controller.displayBatchedResults()
}
}
private class OnDemandTreeExpansion implements TreeExpansionListener {
@Override
void treeExpanded(TreeExpansionEvent event) {
controller.requestFetch(event.getPath(), false)
}
@Override
void treeCollapsed(TreeExpansionEvent event) {
}
}
}

View File

@ -7,6 +7,7 @@ import javax.swing.tree.DefaultMutableTreeNode
import javax.swing.tree.DefaultTreeModel
import javax.swing.tree.MutableTreeNode
import javax.swing.tree.TreeNode
import javax.swing.tree.TreePath
import java.text.Collator
class ResultTreeModel extends DefaultTreeModel {
@ -31,7 +32,8 @@ class ResultTreeModel extends DefaultTreeModel {
elementNode = new MutableResultNode()
elementNode.setUserObject(nodeData)
node.addDescendant(elementNode)
}
} else
removePlaceholder(elementNode)
node = elementNode
}
@ -59,16 +61,46 @@ class ResultTreeModel extends DefaultTreeModel {
elementNode = new MutableResultNode()
elementNode.setUserObject(nodeData)
node.addDescendant(elementNode)
} else {
removePlaceholder(elementNode)
}
elementNode.getUserObject().addResult(event)
node = elementNode
}
def fileNode = new MutableResultNode(event)
removePlaceholder(node)
node.addDescendant(fileNode)
}
private static void removePlaceholder(SortedTreeNode node) {
TreeNode placeHolder = node.getByKey(ResultTreeRenderer.PLACEHOLDER)
if (placeHolder != null)
node.remove(placeHolder)
node.addDescendant(fileNode)
}
List<String> getPathFromRoot(TreePath treePath) {
MutableResultNode last = (MutableResultNode)treePath.getLastPathComponent()
if (last.getChildCount() != 1)
return null
if (!(last.getChildAt(0) instanceof PlaceholderNode))
return null
Object [] objects = treePath.getPath()
List<String> rv = new ArrayList<>()
String hiddenRoot = null
for (int i = 1; i < objects.length; i++) {
Object userObject = objects[i].getUserObject()
if (userObject instanceof ResultTreeRenderer.ResultTreeNode) {
hiddenRoot = userObject.getHiddenRoot()
rv << userObject.toString()
}
}
rv.add(0, hiddenRoot)
rv
}
static class MutableResultNode extends SortedTreeNode<UIResultEvent> {

View File

@ -94,6 +94,10 @@ class ResultTreeRenderer extends DefaultTreeCellRenderer {
element
}
String getHiddenRoot() {
hiddenRoot
}
void addResult(UIResultEvent event) {
files++
size += event.size