X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fnet%2Fpterodactylus%2Fxdcc%2Fcore%2FCore.java;h=c0a228897ab482d22631a322cec7a6402a0a25a1;hb=8ff1daafb20619a146d0e59c285478cce209faf5;hp=1ea95a99866d225c3f8b3d17ca0f7b1ba414661f;hpb=9ce99900a9d1401c91db97d4de194452c4689526;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 1ea95a9..c0a2288 100644 --- a/src/main/java/net/pterodactylus/xdcc/core/Core.java +++ b/src/main/java/net/pterodactylus/xdcc/core/Core.java @@ -18,6 +18,9 @@ package net.pterodactylus.xdcc.core; import static java.lang.String.format; +import static java.lang.System.currentTimeMillis; +import static java.util.concurrent.TimeUnit.HOURS; +import static net.pterodactylus.irc.event.ChannelNotJoined.Reason.banned; import static net.pterodactylus.irc.event.ChannelNotJoined.Reason.registeredNicknamesOnly; import static net.pterodactylus.irc.util.MessageCleaner.getDefaultInstance; import static net.pterodactylus.xdcc.data.Channel.TO_NETWORK; @@ -104,6 +107,8 @@ public class Core extends AbstractExecutionThreadService { /** The event bus. */ private final EventBus eventBus; + private final ChannelBanManager channelBanManager = + new ChannelBanManager(); /** The temporary directory to download files to. */ private final String temporaryDirectory; @@ -369,6 +374,11 @@ public class Core extends AbstractExecutionThreadService { continue; } + /* are we banned from this channel? */ + if (channelBanManager.isBanned(channel)) { + continue; + } + connectNetwork(channel.network()); Connection connection = networkConnections.get(channel.network()); if (connection.established()) { @@ -425,6 +435,9 @@ public class Core extends AbstractExecutionThreadService { if (!network.isPresent()) { return; } + if (!connection.established()) { + return; + } /* find all channels that need to be removed. */ for (Collection channels : ImmutableList.of(joinedChannels, extraChannels)) { @@ -534,6 +547,7 @@ public class Core extends AbstractExecutionThreadService { return; } + channelBanManager.unban(channel.get()); joinedChannels.add(channel.get()); logger.info(String.format("Joined Channel %s on %s.", channelJoined.channel(), network.get().name())); } @@ -546,12 +560,23 @@ public class Core extends AbstractExecutionThreadService { return; } + Optional channel = getChannel(network.get(), channelNotJoined.channel()); + if (!channel.isPresent()) { + eventBus.post(new GenericMessage(format("Could not join %s but didn’t try to join, either.", channel.get()))); + return; + } + if (channelNotJoined.reason() == registeredNicknamesOnly) { - Optional channel = getChannel(network.get(), channelNotJoined.channel()); - if (channel.isPresent()) { - eventBus.post(new GenericMessage(format("Not trying to join %s anymore.", channel.get()))); - channels.remove(channel.get()); - } + channels.remove(channel.get()); + eventBus.post(new GenericMessage( + format("Not trying to join %s anymore.", channel.get()))); + return; + } + if (channelNotJoined.reason() == banned) { + channelBanManager.ban(channel.get()); + eventBus.post(new GenericMessage( + format("Banned from %s, suspending join for day.", + channel.get()))); return; }