1package eu.siacs.conversations.xmpp.pep;
2
3import android.os.Bundle;
4import eu.siacs.conversations.xml.Element;
5import eu.siacs.conversations.xml.Namespace;
6import im.conversations.android.xmpp.model.stanza.Iq;
7
8public class PublishOptions {
9
10 private PublishOptions() {}
11
12 public static Bundle openAccess() {
13 final Bundle options = new Bundle();
14 options.putString("pubsub#access_model", "open");
15 return options;
16 }
17
18 public static Bundle presenceAccess() {
19 final Bundle options = new Bundle();
20 options.putString("pubsub#access_model", "presence");
21 return options;
22 }
23
24 public static Bundle persistentWhitelistAccess() {
25 final Bundle options = new Bundle();
26 options.putString("pubsub#persist_items", "true");
27 options.putString("pubsub#access_model", "whitelist");
28 return options;
29 }
30
31 public static Bundle persistentWhitelistAccessMaxItems() {
32 final Bundle options = new Bundle();
33 options.putString("pubsub#persist_items", "true");
34 options.putString("pubsub#access_model", "whitelist");
35 options.putString("pubsub#send_last_published_item", "never");
36 options.putString("pubsub#max_items", "max");
37 options.putString("pubsub#notify_delete", "true");
38 options.putString(
39 "pubsub#notify_retract", "true"); // one could also set notify=true on the retract
40
41 return options;
42 }
43
44 public static boolean preconditionNotMet(Iq response) {
45 final Element error =
46 response.getType() == Iq.Type.ERROR ? response.findChild("error") : null;
47 return error != null && error.hasChild("precondition-not-met", Namespace.PUBSUB_ERROR);
48 }
49}