From d0318e3e8373bd652ff8f84a8d055bd32126a0cb Mon Sep 17 00:00:00 2001 From: Zlatin Balevsky Date: Tue, 3 Dec 2019 06:00:56 +0000 Subject: [PATCH] display direct and possible sources. Pass possible sources to core --- .../com/muwire/webui/DownloadServlet.java | 3 +- .../java/com/muwire/webui/SearchResults.java | 33 ++++++++++++++++--- webui/src/main/webapp/Home.jsp | 5 +++ 3 files changed, 34 insertions(+), 7 deletions(-) diff --git a/webui/src/main/java/com/muwire/webui/DownloadServlet.java b/webui/src/main/java/com/muwire/webui/DownloadServlet.java index e3087351..5cfa564f 100644 --- a/webui/src/main/java/com/muwire/webui/DownloadServlet.java +++ b/webui/src/main/java/com/muwire/webui/DownloadServlet.java @@ -45,8 +45,7 @@ public class DownloadServlet extends HttpServlet { UIResultEvent[] resultsArray = results.toArray(new UIResultEvent[0]); event.setResult(resultsArray); // TODO: sequential - // TODO: possible sources - event.setSources(Collections.emptySet()); + event.setSources(searchManager.getResults().get(uuid).getPossibleSources(infoHash)); event.setTarget(new File(core.getMuOptions().getDownloadLocation(), resultsArray[0].getName())); core.getEventBus().publish(event); } else if (action.equals("cancel")) { diff --git a/webui/src/main/java/com/muwire/webui/SearchResults.java b/webui/src/main/java/com/muwire/webui/SearchResults.java index 789fe048..2272819e 100644 --- a/webui/src/main/java/com/muwire/webui/SearchResults.java +++ b/webui/src/main/java/com/muwire/webui/SearchResults.java @@ -1,6 +1,7 @@ package com.muwire.webui; import java.util.Arrays; +import java.util.Collections; import java.util.HashMap; import java.util.HashSet; import java.util.Map; @@ -14,11 +15,16 @@ import com.muwire.core.Persona; import com.muwire.core.search.UIResultBatchEvent; import com.muwire.core.search.UIResultEvent; +import net.i2p.data.Destination; +import net.i2p.util.ConcurrentHashSet; + public class SearchResults { private final UUID uuid; private final String search; private final Map> bySender = new ConcurrentHashMap<>(); + private final Map> byInfohash = new ConcurrentHashMap<>(); + private final Map> possibleSources = new ConcurrentHashMap<>(); public SearchResults(UUID uuid, String search) { this.uuid = uuid; @@ -29,10 +35,26 @@ public class SearchResults { Persona sender = e.getResults()[0].getSender(); Set existing = bySender.get(sender); if (existing == null) { - existing = new HashSet<>(); + existing = new ConcurrentHashSet<>(); bySender.put(sender, existing); } existing.addAll(Arrays.asList(e.getResults())); + + for(UIResultEvent result : e.getResults()) { + existing = byInfohash.get(result.getInfohash()); + if (existing == null) { + existing = new ConcurrentHashSet<>(); + byInfohash.put(result.getInfohash(), existing); + } + existing.add(result); + + Set sources = possibleSources.get(result.getInfohash()); + if (sources == null) { + sources = new ConcurrentHashSet<>(); + possibleSources.put(result.getInfohash(), sources); + } + sources.addAll(result.getSources()); + } } public UUID getUUID() { @@ -48,10 +70,11 @@ public class SearchResults { } public Set getByInfoHash(InfoHash infoHash) { - return bySender.values().stream(). - flatMap(r -> r.stream()). - filter(r -> r.getInfohash().equals(infoHash)). - collect(Collectors.toSet()); + return byInfohash.get(infoHash); + } + + public Set getPossibleSources(InfoHash infoHash) { + return possibleSources.getOrDefault(infoHash, Collections.emptySet()); } } diff --git a/webui/src/main/webapp/Home.jsp b/webui/src/main/webapp/Home.jsp index 98391b93..03ecc5fe 100644 --- a/webui/src/main/webapp/Home.jsp +++ b/webui/src/main/webapp/Home.jsp @@ -99,10 +99,15 @@ StringBuilder sb = new StringBuilder(); sb.append(""); + sb.append(""); results.forEach(result -> { sb.append(""); sb.append(""); sb.append(""); + sb.append(""); + sb.append(""); + + if (downloadManager.isDownloading(result.getInfohash())) { sb.append(""); } else {
NameSizeDirect SourcesPossible SourcesDownload
").append(result.getName()).append("").append(DataHelper.formatSize2Decimal(result.getSize(),false)).append("B").append("").append(searchResults.getByInfoHash(result.getInfohash()).size()).append("").append(searchResults.getPossibleSources(result.getInfohash()).size()).append("Downloading