PepManager.java

 1package eu.siacs.conversations.xmpp.manager;
 2
 3import android.content.Context;
 4import com.google.common.util.concurrent.Futures;
 5import com.google.common.util.concurrent.ListenableFuture;
 6import com.google.common.util.concurrent.MoreExecutors;
 7import eu.siacs.conversations.xml.Namespace;
 8import eu.siacs.conversations.xmpp.Jid;
 9import eu.siacs.conversations.xmpp.XmppConnection;
10import im.conversations.android.xmpp.NodeConfiguration;
11import im.conversations.android.xmpp.model.Extension;
12import im.conversations.android.xmpp.model.stanza.Iq;
13import java.util.Map;
14
15public class PepManager extends AbstractManager {
16
17    public PepManager(Context context, XmppConnection connection) {
18        super(context, connection);
19    }
20
21    public <T extends Extension> ListenableFuture<Map<String, T>> fetchItems(final Class<T> clazz) {
22        return pubSubManager().fetchItems(pepService(), clazz);
23    }
24
25    public <T extends Extension> ListenableFuture<T> fetchMostRecentItem(
26            final String node, final Class<T> clazz) {
27        return pubSubManager().fetchMostRecentItem(pepService(), node, clazz);
28    }
29
30    public ListenableFuture<Void> publish(
31            Extension item, final String itemId, final NodeConfiguration nodeConfiguration) {
32        return pubSubManager().publish(pepService(), item, itemId, nodeConfiguration);
33    }
34
35    public ListenableFuture<Void> publishSingleton(
36            Extension item, final String node, final NodeConfiguration nodeConfiguration) {
37        return pubSubManager().publishSingleton(pepService(), item, node, nodeConfiguration);
38    }
39
40    public ListenableFuture<Void> publishSingleton(
41            final Extension item, final NodeConfiguration nodeConfiguration) {
42        return pubSubManager().publishSingleton(pepService(), item, nodeConfiguration);
43    }
44
45    public ListenableFuture<Iq> retract(final String itemId, final String node) {
46        return pubSubManager().retract(pepService(), itemId, node);
47    }
48
49    public ListenableFuture<Void> delete(final String node) {
50        final var future = pubSubManager().delete(pepService(), node);
51        return Futures.transform(future, iq -> null, MoreExecutors.directExecutor());
52    }
53
54    public boolean hasPublishOptions() {
55        return getManager(DiscoManager.class).hasAccountFeature(Namespace.PUBSUB_PUBLISH_OPTIONS);
56    }
57
58    public boolean hasConfigNodeMax() {
59        return getManager(DiscoManager.class).hasAccountFeature(Namespace.PUBSUB_CONFIG_NODE_MAX);
60    }
61
62    private PubSubManager pubSubManager() {
63        return getManager(PubSubManager.class);
64    }
65
66    private Jid pepService() {
67        return connection.getAccount().getJid().asBareJid();
68    }
69}