// Copyright (c) 2015, Christopher "BlayTheNinth" Baker package net.blay09.mods.eirairc.handler; import net.blay09.mods.eirairc.api.irc.IRCChannel; import net.blay09.mods.eirairc.api.irc.IRCContext; import net.blay09.mods.eirairc.api.irc.IRCUser; import net.blay09.mods.eirairc.util.ConfigHelper; import java.util.ArrayList; import java.util.List; public class ChatSessionHandler { private IRCContext chatTarget = null; private final List<IRCChannel> validTargetChannels = new ArrayList<>(); private final List<IRCUser> validTargetUsers = new ArrayList<>(); private int targetChannelIdx = -1; private int targetUserIdx = 0; public void addTargetUser(IRCUser user) { if (!validTargetUsers.contains(user)) { validTargetUsers.add(user); } } public void addTargetChannel(IRCChannel channel) { if (!validTargetChannels.contains(channel)) { validTargetChannels.add(channel); } } public void removeTargetUser(IRCUser user) { validTargetUsers.remove(user); } public void removeTargetChannel(IRCChannel channel) { validTargetChannels.remove(channel); } public void setChatTarget(IRCContext chatTarget) { this.chatTarget = chatTarget; if (chatTarget == null) { targetChannelIdx = -1; targetUserIdx = 0; } else if (chatTarget instanceof IRCChannel) { targetUserIdx = 0; targetChannelIdx = validTargetChannels.indexOf(chatTarget); } else if (chatTarget instanceof IRCUser) { targetChannelIdx = -1; targetUserIdx = validTargetUsers.indexOf(chatTarget); } } public IRCContext getChatTarget() { return chatTarget; } public IRCContext getNextTarget(boolean users) { if (users) { if (validTargetUsers.isEmpty()) { return null; } targetUserIdx++; if (targetUserIdx >= validTargetUsers.size()) { targetUserIdx = 0; } return validTargetUsers.get(targetUserIdx); } else { if (validTargetChannels.isEmpty()) { return null; } targetChannelIdx++; if (targetChannelIdx >= validTargetChannels.size()) { targetChannelIdx = -1; } if (targetChannelIdx == -1) { return null; } IRCChannel channel = validTargetChannels.get(targetChannelIdx); if (ConfigHelper.getChannelConfig(channel).getGeneralSettings().readOnly.get()) { return getNextTarget(false); } return channel; } } public void clear() { chatTarget = null; validTargetChannels.clear(); validTargetUsers.clear(); targetChannelIdx = -1; targetUserIdx = 0; } }