From 5c4b2f9650c44f4537137eb0dea7d41ff1291f99 Mon Sep 17 00:00:00 2001 From: =?utf8?q?David=20=E2=80=98Bombe=E2=80=99=20Roden?= Date: Thu, 18 Apr 2013 06:14:08 +0200 Subject: [PATCH] Ignore fetches for a file we are already downloading. --- src/main/java/net/pterodactylus/xdcc/core/Core.java | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/src/main/java/net/pterodactylus/xdcc/core/Core.java b/src/main/java/net/pterodactylus/xdcc/core/Core.java index 607246c..0e7d2e7 100644 --- a/src/main/java/net/pterodactylus/xdcc/core/Core.java +++ b/src/main/java/net/pterodactylus/xdcc/core/Core.java @@ -220,6 +220,25 @@ public class Core extends AbstractExecutionThreadService { return; } + /* check if we are already downloading the file? */ + if (downloads.containsKey(pack.name())) { + Collection packDownloads = downloads.get(pack.name()); + Collection runningDownloads = FluentIterable.from(packDownloads).filter(FILTER_RUNNING).toSet(); + if (!runningDownloads.isEmpty()) { + Download download = runningDownloads.iterator().next(); + eventBus.post(new GenericMessage(String.format("File %s is already downloading from %s (%s).", pack.name(), download.bot().name(), download.bot().network().name()))); + return; + } + StringBuilder bots = new StringBuilder(); + for (Download download : packDownloads) { + if (bots.length() > 0) { + bots.append(", "); + } + bots.append(download.bot().name()).append(" (").append(download.bot().network().name()).append(')'); + } + eventBus.post(new GenericMessage(String.format("File %s is already requested from %d bots (%s).", pack.name(), packDownloads.size(), bots.toString()))); + } + Download download = new Download(bot, pack); downloads.put(pack.name(), download); -- 2.7.4