package eu.jucy.countries; import geoip.GEOIP; import helpers.GH; import java.util.HashSet; import java.util.List; import java.util.Set; import logger.LoggerFactory; import org.apache.log4j.Level; import org.apache.log4j.Logger; import org.eclipse.swt.custom.StyledText; import org.eclipse.swt.graphics.Image; import uc.IHub; import uc.IUser; import eu.jucy.gui.ApplicationWorkbenchWindowAdvisor; import eu.jucy.gui.texteditor.ITextModificator; import eu.jucy.gui.texteditor.SendingWriteline; import eu.jucy.gui.texteditor.StyledTextViewer; import eu.jucy.gui.texteditor.StyledTextViewer.ImageReplacement; import eu.jucy.gui.texteditor.StyledTextViewer.Message; import eu.jucy.gui.texteditor.StyledTextViewer.TextReplacement; public class FlagsTextModificator implements ITextModificator { private static final Logger logger = LoggerFactory.make(Level.DEBUG); private final Set<IUser> askingForIP = new HashSet<IUser>(); public FlagsTextModificator() {} public void init(StyledText st,StyledTextViewer viewer, IHub hub) { ApplicationWorkbenchWindowAdvisor.get().executeDir(new Runnable() { public void run() { GEOIP.get(); //force initialization } }); } public void dispose() {} public void getMessageModifications(Message original, boolean pm,List<TextReplacement> replacement) { final IUser user = original.getUsr(); if (user != null) { IHub hub = user.getHub(); if (user.getIp() != null) { String cc = GEOIP.get().getCountryCode(user.getIp()); if (!GH.isNullOrEmpty(cc)) { cc = "["+cc+"]"; } else { cc= ""; } Image flag = FlagStorage.get().getFlag(user,false,true); replacement.add(new ImageReplacement(1,0,cc,flag)); } else if (!askingForIP.contains(user) && SendingWriteline.lastTypingOccurred(300000) //only ask for users if we are on the keyboard..-> prevents spamming.. && (hub.getSelf().isTCPActive() || user.isTCPActive() || hub.supportsUserIP()) && user.getShared() != 0 ) { askingForIP.add(user); ApplicationWorkbenchWindowAdvisor.get().executeDir(new Runnable() { public void run() { IHub hub = user.getHub(); logger.debug("asking for user: " + user + " "+ hub.getName()+" "+hub.supportsUserIP()); if (hub.supportsUserIP()) { hub.requestUserIP(user); } else { hub.requestConnection(user, ""+ System.currentTimeMillis()); } } }); if (askingForIP.size() > 10) { askingForIP.clear(); logger.debug("clearing ask "); } } } } }