diff options
Diffstat (limited to 'src/main/java/eu/siacs/conversations/entities/Presences.java')
-rw-r--r-- | src/main/java/eu/siacs/conversations/entities/Presences.java | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/src/main/java/eu/siacs/conversations/entities/Presences.java b/src/main/java/eu/siacs/conversations/entities/Presences.java index 813eda7a..c8078331 100644 --- a/src/main/java/eu/siacs/conversations/entities/Presences.java +++ b/src/main/java/eu/siacs/conversations/entities/Presences.java @@ -1,8 +1,11 @@ package eu.siacs.conversations.entities; +import java.util.ArrayList; import java.util.Collections; import java.util.Hashtable; import java.util.Iterator; +import java.util.List; +import java.util.Map; import eu.siacs.conversations.xml.Element; @@ -52,9 +55,44 @@ public class Presences { } } + public List<PresenceTemplate> asTemplates() { + synchronized (this.presences) { + ArrayList<PresenceTemplate> templates = new ArrayList<>(presences.size()); + for(Presence p : presences.values()) { + templates.add(new PresenceTemplate(p.getStatus(),p.getMessage())); + } + return templates; + } + } + public boolean has(String presence) { synchronized (this.presences) { return presences.containsKey(presence); } } + + public List<String> getStatusMessages() { + ArrayList<String> messages = new ArrayList<>(); + synchronized (this.presences) { + for(Presence presence : this.presences.values()) { + String message = presence.getMessage() == null ? null : presence.getMessage().trim(); + if (message != null && !message.isEmpty() && !messages.contains(message)) { + messages.add(message); + } + } + } + return messages; + } + + public boolean allOrNonSupport(String namespace) { + synchronized (this.presences) { + for(Presence presence : this.presences.values()) { + ServiceDiscoveryResult disco = presence.getServiceDiscoveryResult(); + if (disco == null || !disco.getFeatures().contains(namespace)) { + return false; + } + } + } + return true; + } } |