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(final Class<T> clazz) {
26 return pubSubManager().fetchMostRecentItem(pepService(), clazz);
27 }
28
29 public <T extends Extension> ListenableFuture<T> fetchMostRecentItem(
30 final String node, final Class<T> clazz) {
31 return pubSubManager().fetchMostRecentItem(pepService(), node, clazz);
32 }
33
34 public ListenableFuture<Void> publish(
35 Extension item, final String itemId, final NodeConfiguration nodeConfiguration) {
36 return pubSubManager().publish(pepService(), item, itemId, nodeConfiguration);
37 }
38
39 public ListenableFuture<Void> publishSingleton(
40 Extension item, final String node, final NodeConfiguration nodeConfiguration) {
41 return pubSubManager().publishSingleton(pepService(), item, node, nodeConfiguration);
42 }
43
44 public ListenableFuture<Void> publishSingleton(
45 final Extension item, final NodeConfiguration nodeConfiguration) {
46 return pubSubManager().publishSingleton(pepService(), item, nodeConfiguration);
47 }
48
49 public ListenableFuture<Iq> retract(final String itemId, final String node) {
50 return pubSubManager().retract(pepService(), itemId, node);
51 }
52
53 public ListenableFuture<Void> delete(final String node) {
54 final var future = pubSubManager().delete(pepService(), node);
55 return Futures.transform(future, iq -> null, MoreExecutors.directExecutor());
56 }
57
58 public boolean hasPublishOptions() {
59 return getManager(DiscoManager.class).hasAccountFeature(Namespace.PUBSUB_PUBLISH_OPTIONS);
60 }
61
62 public boolean hasConfigNodeMax() {
63 return getManager(DiscoManager.class).hasAccountFeature(Namespace.PUBSUB_CONFIG_NODE_MAX);
64 }
65
66 private PubSubManager pubSubManager() {
67 return getManager(PubSubManager.class);
68 }
69
70 private Jid pepService() {
71 return connection.getAccount().getJid().asBareJid();
72 }
73}