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.data.Data;
13import im.conversations.android.xmpp.model.stanza.Iq;
14import java.util.Map;
15
16public class PepManager extends AbstractManager {
17
18 public PepManager(Context context, XmppConnection connection) {
19 super(context, connection);
20 }
21
22 public <T extends Extension> ListenableFuture<Map<String, T>> fetchItems(final Class<T> clazz) {
23 return pubSubManager().fetchItems(pepService(), clazz);
24 }
25
26 public <T extends Extension> ListenableFuture<T> fetchMostRecentItem(final Class<T> clazz) {
27 return pubSubManager().fetchMostRecentItem(pepService(), clazz);
28 }
29
30 public <T extends Extension> ListenableFuture<T> fetchMostRecentItem(
31 final String node, final Class<T> clazz) {
32 return pubSubManager().fetchMostRecentItem(pepService(), node, clazz);
33 }
34
35 public ListenableFuture<Void> publish(
36 Extension item, final String itemId, final NodeConfiguration nodeConfiguration) {
37 return pubSubManager().publish(pepService(), item, itemId, nodeConfiguration);
38 }
39
40 public ListenableFuture<Void> publishSingleton(
41 Extension item, final String node, final NodeConfiguration nodeConfiguration) {
42 return pubSubManager().publishSingleton(pepService(), item, node, nodeConfiguration);
43 }
44
45 public ListenableFuture<Void> publishSingleton(
46 final Extension item, final NodeConfiguration nodeConfiguration) {
47 return pubSubManager().publishSingleton(pepService(), item, nodeConfiguration);
48 }
49
50 public ListenableFuture<Iq> retract(final String itemId, final String node) {
51 return pubSubManager().retract(pepService(), itemId, node);
52 }
53
54 public ListenableFuture<Void> delete(final String node) {
55 final var future = pubSubManager().delete(pepService(), node);
56 return Futures.transform(future, iq -> null, MoreExecutors.directExecutor());
57 }
58
59 public ListenableFuture<Data> getNodeConfiguration(final String node) {
60 return pubSubManager().getNodeConfiguration(pepService(), node);
61 }
62
63 public boolean hasPublishOptions() {
64 return getManager(DiscoManager.class).hasAccountFeature(Namespace.PUBSUB_PUBLISH_OPTIONS);
65 }
66
67 public boolean hasConfigNodeMax() {
68 return getManager(DiscoManager.class).hasAccountFeature(Namespace.PUBSUB_CONFIG_NODE_MAX);
69 }
70
71 private PubSubManager pubSubManager() {
72 return getManager(PubSubManager.class);
73 }
74
75 private Jid pepService() {
76 return connection.getAccount().getJid().asBareJid();
77 }
78}