X-Git-Url: https://git.pterodactylus.net/?p=xudocci.git;a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fnet%2Fpterodactylus%2Fxdcc%2Fcore%2FCore.java;h=171683b9a71892438a3b8476080333776e5507c4;hp=240beb1eb4bd301a775d17a1b169e5889dada59c;hb=c45f3f052f1ade1291732bc92e14e6c741a564ff;hpb=a94f83c63a742aad3deeeb110032b3a3efc9da58 diff --git a/src/main/java/net/pterodactylus/xdcc/core/Core.java b/src/main/java/net/pterodactylus/xdcc/core/Core.java index 240beb1..171683b 100644 --- a/src/main/java/net/pterodactylus/xdcc/core/Core.java +++ b/src/main/java/net/pterodactylus/xdcc/core/Core.java @@ -17,6 +17,9 @@ package net.pterodactylus.xdcc.core; +import static java.lang.String.format; +import static net.pterodactylus.irc.util.MessageCleaner.getDefaultInstance; +import static net.pterodactylus.xdcc.data.Channel.TO_NETWORK; import static net.pterodactylus.xdcc.data.Download.FILTER_RUNNING; import java.io.File; @@ -31,8 +34,6 @@ import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.concurrent.TimeUnit; -import java.util.logging.Level; -import java.util.logging.Logger; import net.pterodactylus.irc.Connection; import net.pterodactylus.irc.ConnectionBuilder; @@ -48,11 +49,11 @@ import net.pterodactylus.irc.event.DccAcceptReceived; import net.pterodactylus.irc.event.DccDownloadFailed; import net.pterodactylus.irc.event.DccDownloadFinished; import net.pterodactylus.irc.event.DccSendReceived; +import net.pterodactylus.irc.event.KickedFromChannel; import net.pterodactylus.irc.event.NicknameChanged; import net.pterodactylus.irc.event.PrivateMessageReceived; import net.pterodactylus.irc.event.PrivateNoticeReceived; import net.pterodactylus.irc.event.ReplyReceived; -import net.pterodactylus.irc.util.MessageCleaner; import net.pterodactylus.irc.util.RandomNickname; import net.pterodactylus.xdcc.core.event.BotAdded; import net.pterodactylus.xdcc.core.event.CoreStarted; @@ -69,6 +70,7 @@ import net.pterodactylus.xdcc.data.Network; import net.pterodactylus.xdcc.data.Pack; import net.pterodactylus.xdcc.data.Server; +import com.google.common.base.Function; import com.google.common.base.Optional; import com.google.common.base.Predicate; import com.google.common.collect.FluentIterable; @@ -86,6 +88,7 @@ import com.google.common.eventbus.Subscribe; import com.google.common.io.Closeables; import com.google.common.util.concurrent.AbstractExecutionThreadService; import com.google.inject.Inject; +import org.apache.log4j.Logger; /** * The core of XDCC Downloader. @@ -158,6 +161,29 @@ public class Core extends AbstractExecutionThreadService { } /** + * Returns all defined networks. + * + * @return All defined networks + */ + public Collection networks() { + return FluentIterable.from(channels).transform(TO_NETWORK).toSet(); + } + + /** + * Returns all connected networks. + * + * @return All connected networks + */ + public Collection connectedNetworks() { + return Lists.newArrayList(Optional.presentInstances(FluentIterable.from(networkConnections.values()).transform(new Function>() { + @Override + public Optional apply(Connection connection) { + return getNetwork(connection); + } + }))); + } + + /** * Returns all configured channels. Due to various circumstances, configured * channels might not actually be joined. * @@ -256,7 +282,7 @@ public class Core extends AbstractExecutionThreadService { try { connection.sendMessage(bot.name(), "XDCC SEND " + pack.id()); } catch (IOException ioe1) { - logger.log(Level.WARNING, "Could not send message to bot!", ioe1); + logger.warn("Could not send message to bot!", ioe1); } } @@ -281,19 +307,19 @@ public class Core extends AbstractExecutionThreadService { return; } - /* remove download. */ - downloads.remove(pack.name(), download.get()); - /* stop the DCC receiver. */ if (download.get().dccReceiver() != null) { download.get().dccReceiver().stop(); + } else { + /* remove download if it hasn’t started yet. */ + downloads.remove(pack.name(), download.get()); } /* remove the request from the bot, too. */ try { connection.sendMessage(bot.name(), String.format("XDCC %s", (download.get().dccReceiver() != null) ? "CANCEL" : "REMOVE")); } catch (IOException ioe1) { - logger.log(Level.WARNING, String.format("Could not cancel DCC from %s (%s)!", bot.name(), bot.network().name()), ioe1); + logger.warn(String.format("Could not cancel DCC from %s (%s)!", bot.name(), bot.network().name()), ioe1); } } @@ -443,16 +469,20 @@ public class Core extends AbstractExecutionThreadService { /* found network? */ if (!network.isPresent()) { + eventBus.post(new GenericMessage(String.format("Connected to unknown network: %s", connectionEstablished.connection().hostname()))); return; } + eventBus.post(new GenericMessage(String.format("Connected to network %s.", network.get().name()))); + /* join all channels on this network. */ for (Channel channel : channels) { if (channel.network().equals(network.get())) { try { + eventBus.post(new GenericMessage(String.format("Trying to join %s on %s...", channel.name(), network.get().name()))); connectionEstablished.connection().joinChannel(channel.name()); } catch (IOException ioe1) { - logger.log(Level.WARNING, String.format("Could not join %s on %s!", channel.name(), network.get().name()), ioe1); + logger.warn(String.format("Could not join %s on %s!", channel.name(), network.get().name()), ioe1); } } } @@ -475,6 +505,7 @@ public class Core extends AbstractExecutionThreadService { * @param connectionFailed * The connection failed event */ + @Subscribe public void connectionFailed(ConnectionFailed connectionFailed) { removeConnection(connectionFailed.connection()); } @@ -506,6 +537,18 @@ public class Core extends AbstractExecutionThreadService { } } + @Subscribe + public void channelNotJoined(ChannelNotJoined channelNotJoined) { + Optional network = getNetwork(channelNotJoined.connection()); + if (!network.isPresent()) { + return; + } + + eventBus.post(new GenericMessage( + format("Could not join %s/%s: %s", channelNotJoined.channel(), + network.get(), channelNotJoined.reason()))); + } + /** * Removes bots that leave a channel, or channels when it’s us that’s leaving. * @@ -543,12 +586,31 @@ public class Core extends AbstractExecutionThreadService { return; } - Bot removedBot = networkBots.remove(network.get(), channelLeft.client().nick().get()); - if (removedBot != null) { - eventBus.post(new GenericMessage(String.format("Bot %s (%s) was removed, %d packs removed.", removedBot.name(), removedBot.network().name(), removedBot.packs().size()))); + networkBots.remove(network.get(), channelLeft.client().nick().get()); + } + + @Subscribe + public void kickedFromChannel(KickedFromChannel kickedFromChannel) { + Optional network = getNetwork(kickedFromChannel.connection()); + if (!network.isPresent()) { + return; + } + + /* have we been kicked? */ + if (nicknameMatchesConnection(kickedFromChannel.connection(), kickedFromChannel.kickee())) { + eventBus.post(new GenericMessage(format( + "Kicked from %s/%s by %s: %s", + kickedFromChannel.channel(), network.get(), + kickedFromChannel.kicker(), + kickedFromChannel.reason().or("") + ))); } } + private boolean nicknameMatchesConnection(Connection connection, String nickname) { + return connection.nickname().equalsIgnoreCase(nickname); + } + /** * Removes a client (which may be a bot) from the table of known bots. * @@ -562,10 +624,7 @@ public class Core extends AbstractExecutionThreadService { return; } - Bot removedBot = networkBots.remove(network.get(), clientQuit.client().nick().get()); - if (removedBot != null) { - eventBus.post(new GenericMessage(String.format("Bot %s (%s) was removed, %d packs removed.", removedBot.name(), removedBot.network().name(), removedBot.packs().size()))); - } + networkBots.remove(network.get(), clientQuit.client().nick().get()); } /** @@ -599,7 +658,7 @@ public class Core extends AbstractExecutionThreadService { */ @Subscribe public void channelMessageReceived(ChannelMessageReceived channelMessageReceived) { - String message = MessageCleaner.getDefaultInstance().clean(channelMessageReceived.message()); + String message = getDefaultInstance().clean(channelMessageReceived.message()); if (!message.startsWith("#")) { /* most probably not a pack announcement. */ return; @@ -630,7 +689,7 @@ public class Core extends AbstractExecutionThreadService { /* add pack. */ bot.addPack(pack.get()); - logger.fine(String.format("Bot %s now has %d packs.", bot, bot.packs().size())); + logger.debug(String.format("Bot %s now has %d packs.", bot, bot.packs().size())); } /** @@ -785,7 +844,7 @@ public class Core extends AbstractExecutionThreadService { File outputFile = new File(temporaryDirectory, dccAcceptReceived.filename()); if (outputFile.length() != dccAcceptReceived.position()) { eventBus.post(new GenericError(String.format("Download %s from %s does not start at the right position!"))); - logger.log(Level.WARNING, String.format("Download %s from %s: have %d bytes but wants to resume from %d!", dccAcceptReceived.filename(), dccAcceptReceived.source(), outputFile.length(), dccAcceptReceived.position())); + logger.warn(String.format("Download %s from %s: have %d bytes but wants to resume from %d!", dccAcceptReceived.filename(), dccAcceptReceived.source(), outputFile.length(), dccAcceptReceived.position())); downloads.removeAll(download.pack().name()); return; @@ -814,7 +873,7 @@ public class Core extends AbstractExecutionThreadService { Collection requestedDownload = FluentIterable.from(downloads.get(dccDownloadFinished.dccReceiver().filename())).filter(FILTER_RUNNING).toSet(); if (requestedDownload.isEmpty()) { /* this seems wrong. */ - logger.warning("Download finished but could not be located."); + logger.warn("Download finished but could not be located."); return; } Download download = requestedDownload.iterator().next(); @@ -828,7 +887,7 @@ public class Core extends AbstractExecutionThreadService { downloads.removeAll(download.pack().name()); } catch (IOException ioe1) { /* TODO - handle all the errors. */ - logger.log(Level.WARNING, String.format("Could not move file %s to directory %s.", download.filename(), finalDirectory), ioe1); + logger.warn(String.format("Could not move file %s to directory %s.", download.filename(), finalDirectory), ioe1); } } @@ -845,7 +904,7 @@ public class Core extends AbstractExecutionThreadService { Collection requestedDownload = FluentIterable.from(downloads.get(dccDownloadFailed.dccReceiver().filename())).filter(FILTER_RUNNING).toSet(); if (requestedDownload.isEmpty()) { /* this seems wrong. */ - logger.warning("Download finished but could not be located."); + logger.warn("Download finished but could not be located."); return; } Download download = requestedDownload.iterator().next(); @@ -862,7 +921,7 @@ public class Core extends AbstractExecutionThreadService { @Subscribe public void replyReceived(ReplyReceived replyReceived) { - logger.log(Level.FINEST, String.format("%s: %s", replyReceived.connection().hostname(), replyReceived.reply())); + logger.trace(String.format("%s: %s", replyReceived.connection().hostname(), replyReceived.reply())); } //