package com.faforever.client.chat; import com.google.common.collect.ImmutableSortedSet; import javafx.beans.property.ObjectProperty; import javafx.beans.property.SetProperty; import javafx.beans.property.SimpleObjectProperty; import javafx.beans.property.SimpleSetProperty; import javafx.beans.property.SimpleStringProperty; import javafx.beans.property.StringProperty; import javafx.collections.FXCollections; import javafx.collections.ObservableSet; import javafx.scene.paint.Color; import org.pircbotx.Channel; import org.pircbotx.User; import org.pircbotx.UserLevel; import java.util.HashSet; import java.util.Set; public class ChatUser { private StringProperty username; private SetProperty<String> moderatorInChannels; private ObjectProperty<Color> color; public ChatUser(String username, Color color) { this(username, new HashSet<>(), color); } ChatUser(String username, Set<String> moderatorInChannels, Color color) { this.username = new SimpleStringProperty(username); this.moderatorInChannels = new SimpleSetProperty<>(FXCollections.observableSet(moderatorInChannels)); this.color = new SimpleObjectProperty<>(color); } public Color getColor() { return color.get(); } public void setColor(Color color) { this.color.set(color); } public ObjectProperty<Color> colorProperty() { return color; } public ObservableSet<String> getModeratorInChannels() { return moderatorInChannels.get(); } public SetProperty<String> moderatorInChannelsProperty() { return moderatorInChannels; } public String getUsername() { return username.get(); } public StringProperty usernameProperty() { return username; } @Override public int hashCode() { return username.get().hashCode(); } @Override public boolean equals(Object obj) { return obj != null && obj.getClass() == this.getClass() && username.get().equalsIgnoreCase(((ChatUser) obj).username.get()); } public static ChatUser fromIrcUser(User user, Color color) { String username = user.getNick() != null ? user.getNick() : user.getLogin(); Set<String> moderatorInChannels = new HashSet<>(); for (Channel channel : user.getChannels()) { ImmutableSortedSet<UserLevel> userLevels = user.getUserLevels(channel); for (UserLevel userLevel : userLevels) { switch (userLevel) { case OP: case HALFOP: case SUPEROP: case OWNER: moderatorInChannels.add(channel.getName()); break; default: // Nothing special } } } return new ChatUser(username, moderatorInChannels, color); } }