package org.limewire.core.impl.friend; import org.limewire.core.api.library.RemoteLibraryManager; import org.limewire.friend.api.FriendPresence; import org.limewire.friend.api.feature.AddressFeature; import org.limewire.friend.api.feature.AuthTokenFeature; import org.limewire.friend.api.feature.FeatureEvent; import org.limewire.inject.EagerSingleton; import org.limewire.listener.BlockingEvent; import org.limewire.listener.EventListener; import org.limewire.listener.ListenerSupport; import org.limewire.logging.Log; import org.limewire.logging.LogFactory; import com.google.inject.Inject; /** * Listens for new presences and for them to have features so they become * browsable and can be added to {@link RemoteLibraryManager}. */ @EagerSingleton class FriendPresenceLibraryAdder { private static final Log LOG = LogFactory.getLog(FriendPresenceLibraryAdder.class); private final RemoteLibraryManager remoteLibraryManager; @Inject public FriendPresenceLibraryAdder(RemoteLibraryManager remoteLibraryManager) { this.remoteLibraryManager = remoteLibraryManager; } @Inject void register(ListenerSupport<FeatureEvent> featureSupport) { featureSupport.addListener(new FeatureListener()); } class FeatureListener implements EventListener<FeatureEvent> { @Override @BlockingEvent public void handleEvent(FeatureEvent featureEvent) { FriendPresence presence = featureEvent.getSource(); if (featureEvent.getType() == FeatureEvent.Type.ADDED) { if (presence.hasFeatures(AddressFeature.ID, AuthTokenFeature.ID)) { LOG.debugf("adding presence library for: {0}", presence); remoteLibraryManager.addPresenceLibrary(presence); } } else if (featureEvent.getType() == FeatureEvent.Type.REMOVED) { if (!presence.hasFeatures(AddressFeature.ID, AuthTokenFeature.ID)) { LOG.debugf("removing presence library for: {0}", presence); remoteLibraryManager.removePresenceLibrary(presence); } } } } }