import static java.lang.String.format;
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;
import static net.pterodactylus.irc.util.MessageCleaner.getDefaultInstance;
import static net.pterodactylus.xdcc.data.Channel.TO_NETWORK;
}
Map<Long, Network> timesForNextConnects = new TreeMap<>(missingNetworks.stream()
- .collect(Collectors.toMap(connectionBackoff::getBackoff, Function.identity(), (network, ignore) -> network)));
+ .collect(Collectors.toMap(connectionBackoff::getConnectionTime, Function.identity(), (network, ignore) -> network)));
Optional<Entry<Long, Network>> firstNetwork = Optional.fromNullable(timesForNextConnects.entrySet().stream().findFirst().orElse(null));
if (!firstNetwork.isPresent()) {
continue;
}
- if (firstNetwork.get().getKey() > 0) {
- eventBus.post(new GenericMessage(String.format("Waiting %d minutes to connect to %s...", TimeUnit.MILLISECONDS.toMinutes(firstNetwork.get().getKey()), firstNetwork.get().getValue().name())));
+ if (firstNetwork.get().getKey() > System.currentTimeMillis()) {
+ eventBus.post(new GenericMessage(String.format("Waiting %d minutes to connect to %s...", TimeUnit.MILLISECONDS.toMinutes(firstNetwork.get().getKey() - System.currentTimeMillis()), firstNetwork.get().getValue().name())));
synchronized (syncObject) {
try {
- syncObject.wait(firstNetwork.get().getKey());
+ syncObject.wait(firstNetwork.get().getKey() - System.currentTimeMillis());
} catch (InterruptedException ie1) {
/* ignore. */
}
if (!isRunning()) {
break;
}
+ if (firstNetwork.get().getKey() > System.currentTimeMillis()) {
+ continue;
+ }
}
connectNetwork(firstNetwork.get().getValue());
return;
}
Server server = servers.get((int) (Math.random() * servers.size()));
+ eventBus.post(new GenericMessage(String.format("Connecting to %s on %s...", network.name(), server.hostname())));
Connection connection = connectionFactory.createConnection(server.hostname(),
server.unencryptedPorts().iterator().next());
connection.username(RandomNickname.get()).realName(RandomNickname.get());
format("Not trying to join %s anymore.", channel.get())));
return;
}
+ if (channelNotJoined.reason() == inviteOnly) {
+ channelBanManager.ban(channel.get());
+ eventBus.post(new GenericMessage(
+ format("%s is invite-only, suspending join for a day.",
+ channel.get())));
+ return;
+ }
if (channelNotJoined.reason() == banned) {
channelBanManager.ban(channel.get());
eventBus.post(new GenericMessage(