X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fnet%2Fpterodactylus%2Fxdcc%2Fcore%2FCore.java;h=8ef074c89568eefb36d3dba6304fe6d8e6d77749;hb=0df7b8013abac27e1071761b98a106744fe1f929;hp=8bc923f34c6c6e6cdde5d9dc2ef230e7945eebcb;hpb=fa0781daff73c7d3b572da53e3b3a0acc5f7ec3b;p=xudocci.git diff --git a/src/main/java/net/pterodactylus/xdcc/core/Core.java b/src/main/java/net/pterodactylus/xdcc/core/Core.java index 8bc923f..8ef074c 100644 --- a/src/main/java/net/pterodactylus/xdcc/core/Core.java +++ b/src/main/java/net/pterodactylus/xdcc/core/Core.java @@ -18,6 +18,7 @@ package net.pterodactylus.xdcc.core; import static java.lang.String.format; +import static java.util.stream.Collectors.toSet; import static net.pterodactylus.irc.event.ChannelNotJoined.Reason.banned; import static net.pterodactylus.irc.event.ChannelNotJoined.Reason.inviteOnly; import static net.pterodactylus.irc.event.ChannelNotJoined.Reason.registeredNicknamesOnly; @@ -410,7 +411,7 @@ public class Core extends AbstractExecutionThreadService { .map(Channel::network) .distinct() .filter((network) -> !networkConnections.containsKey(network)) - .collect(Collectors.toSet()); + .collect(toSet()); if (missingNetworks.isEmpty()) { if (!missingChannels.isEmpty()) { @@ -662,7 +663,7 @@ public class Core extends AbstractExecutionThreadService { .values().stream() .filter(bot -> bot.channel() .equalsIgnoreCase(channel.get().name())) - .collect(Collectors.toSet()); + .collect(toSet()); botsToRemove.stream() .forEach(bot -> networkBots.row(network.get()) .remove(bot.name())); @@ -886,38 +887,38 @@ public class Core extends AbstractExecutionThreadService { @Subscribe public void dccSendReceived(final DccSendReceived dccSendReceived) { final Optional network = getNetwork(dccSendReceived.connection()); + eventBus.post(new GenericMessage(format("Got DCC Send from %s for %s.", dccSendReceived.source(), dccSendReceived.filename()))); if (!network.isPresent()) { return; } + eventBus.post(new GenericMessage("a")); - Collection packDownloads = downloads.get(dccSendReceived.filename()); - if (packDownloads.isEmpty()) { - /* unknown download, ignore. */ - return; - } + Set openDownloads = downloads.values().stream() + .filter(download -> download.bot().name().equalsIgnoreCase(dccSendReceived.source().nick().orNull())) + .filter(download -> download.dccReceiver() == null) + .collect(toSet()); + eventBus.post(new GenericMessage("b")); - /* check if it’s already downloading. */ - Collection runningDownloads = FluentIterable.from(packDownloads).filter(FILTER_RUNNING).toSet(); - if (!runningDownloads.isEmpty()) { - eventBus.post(new GenericMessage(String.format("Ignoring offer for %s, it’s already being downloaded.", dccSendReceived.filename()))); + if (openDownloads.isEmpty()) { + /* I don't think we requested this. */ + eventBus.post(new GenericMessage(format("Ignoring offer for %s, no open download from %s.", dccSendReceived.filename(), dccSendReceived.source()))); return; } + eventBus.post(new GenericMessage("c")); - /* locate the correct download. */ - Collection requestedDownload = FluentIterable.from(packDownloads).filter(new Predicate() { - - @Override - public boolean apply(Download download) { - return download.bot().network().equals(network.get()) && download.bot().name().equalsIgnoreCase(dccSendReceived.source().nick().get()); - } - }).toSet(); - - /* we did not request this download. */ - if (requestedDownload.isEmpty()) { + /* check if it’s already downloading. */ + if (downloads.values().stream().anyMatch(download -> download.filename().equals(dccSendReceived.filename()) && download.dccReceiver() != null)) { + eventBus.post(new GenericMessage(format("Ignoring offer for %s, it’s already being downloaded.", dccSendReceived.filename()))); return; } - - Download download = requestedDownload.iterator().next(); + eventBus.post(new GenericMessage("d")); + + Download download = openDownloads.stream() + .filter(it -> it.filename().equals(dccSendReceived.filename())) + .findFirst() + .orElse(openDownloads.iterator().next()); + eventBus.post(new GenericMessage("e")); + eventBus.post(new GenericMessage(format("Downloading %s from %s as %s.", dccSendReceived.filename(), dccSendReceived.source(), download.filename()))); /* check if the file already exists. */ File outputFile = new File(temporaryDirectory, dccSendReceived.filename());