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