mirror of
https://codeberg.org/Mercury-IM/Smack
synced 2024-11-22 14:22:05 +01:00
Only announce support for ChatMarkers if there is a listener
This commit is contained in:
parent
0fa6fb946c
commit
105192d7e7
1 changed files with 21 additions and 7 deletions
|
@ -16,10 +16,10 @@
|
||||||
*/
|
*/
|
||||||
package org.jivesoftware.smackx.chat_markers;
|
package org.jivesoftware.smackx.chat_markers;
|
||||||
|
|
||||||
|
import java.util.HashSet;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.WeakHashMap;
|
import java.util.WeakHashMap;
|
||||||
import java.util.concurrent.CopyOnWriteArraySet;
|
|
||||||
|
|
||||||
import org.jivesoftware.smack.AsyncButOrdered;
|
import org.jivesoftware.smack.AsyncButOrdered;
|
||||||
import org.jivesoftware.smack.ConnectionCreationListener;
|
import org.jivesoftware.smack.ConnectionCreationListener;
|
||||||
|
@ -87,12 +87,16 @@ public final class ChatMarkersManager extends Manager {
|
||||||
);
|
);
|
||||||
// @FORMATTER:ON
|
// @FORMATTER:ON
|
||||||
|
|
||||||
private final Set<ChatMarkersListener> incomingListeners = new CopyOnWriteArraySet<>();
|
private final Set<ChatMarkersListener> incomingListeners = new HashSet<>();
|
||||||
|
|
||||||
private final AsyncButOrdered<Chat> asyncButOrdered = new AsyncButOrdered<>();
|
private final AsyncButOrdered<Chat> asyncButOrdered = new AsyncButOrdered<>();
|
||||||
|
|
||||||
private final ChatManager chatManager;
|
private final ChatManager chatManager;
|
||||||
|
|
||||||
|
private final ServiceDiscoveryManager serviceDiscoveryManager;
|
||||||
|
|
||||||
|
private boolean enabled;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the singleton instance of ChatMarkersManager.
|
* Get the singleton instance of ChatMarkersManager.
|
||||||
*
|
*
|
||||||
|
@ -166,7 +170,7 @@ public final class ChatMarkersManager extends Manager {
|
||||||
}
|
}
|
||||||
}, INCOMING_MESSAGE_FILTER);
|
}, INCOMING_MESSAGE_FILTER);
|
||||||
|
|
||||||
ServiceDiscoveryManager.getInstanceFor(connection).addFeature(ChatMarkersElements.NAMESPACE);
|
serviceDiscoveryManager = ServiceDiscoveryManager.getInstanceFor(connection);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -191,8 +195,13 @@ public final class ChatMarkersManager extends Manager {
|
||||||
* @param listener ChatMarkersListener
|
* @param listener ChatMarkersListener
|
||||||
* @return true, if the listener was not registered before
|
* @return true, if the listener was not registered before
|
||||||
*/
|
*/
|
||||||
public boolean addIncomingChatMarkerMessageListener(ChatMarkersListener listener) {
|
public synchronized boolean addIncomingChatMarkerMessageListener(ChatMarkersListener listener) {
|
||||||
return incomingListeners.add(listener);
|
boolean res = incomingListeners.add(listener);
|
||||||
|
if (!enabled) {
|
||||||
|
serviceDiscoveryManager.addFeature(ChatMarkersElements.NAMESPACE);
|
||||||
|
enabled = true;
|
||||||
|
}
|
||||||
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -201,7 +210,12 @@ public final class ChatMarkersManager extends Manager {
|
||||||
* @param listener ChatMarkersListener
|
* @param listener ChatMarkersListener
|
||||||
* @return true, if the listener was registered before
|
* @return true, if the listener was registered before
|
||||||
*/
|
*/
|
||||||
public boolean removeIncomingChatMarkerMessageListener(ChatMarkersListener listener) {
|
public synchronized boolean removeIncomingChatMarkerMessageListener(ChatMarkersListener listener) {
|
||||||
return incomingListeners.remove(listener);
|
boolean res = incomingListeners.remove(listener);
|
||||||
|
if (incomingListeners.isEmpty() && enabled) {
|
||||||
|
serviceDiscoveryManager.removeFeature(ChatMarkersElements.NAMESPACE);
|
||||||
|
enabled = false;
|
||||||
|
}
|
||||||
|
return res;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue