1package eu.siacs.conversations.xmpp.manager;
2
3import android.util.Log;
4import com.google.common.util.concurrent.ListenableFuture;
5import eu.siacs.conversations.Config;
6import eu.siacs.conversations.entities.Bookmark;
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.bookmark.Storage;
13import im.conversations.android.xmpp.model.pubsub.Items;
14import java.util.Collection;
15import java.util.Map;
16
17public class LegacyBookmarkManager extends AbstractBookmarkManager {
18
19 public LegacyBookmarkManager(
20 final XmppConnectionService service, final XmppConnection connection) {
21 super(service, connection);
22 }
23
24 public void handleItems(final Items items) {
25 final var account = this.getAccount();
26 if (this.hasConversion()) {
27 if (getManager(NativeBookmarkManager.class).hasFeature()) {
28 Log.w(
29 Config.LOGTAG,
30 account.getJid().asBareJid()
31 + ": received storage:bookmark notification even though we"
32 + " opted into bookmarks:1");
33 }
34 final var storage = items.getFirstItem(Storage.class);
35 final Map<Jid, Bookmark> bookmarks = Bookmark.parseFromStorage(storage, account);
36 this.processBookmarksInitial(bookmarks, true);
37 Log.d(Config.LOGTAG, account.getJid().asBareJid() + ": processing bookmark PEP event");
38 } else {
39 Log.d(
40 Config.LOGTAG,
41 account.getJid().asBareJid()
42 + ": ignoring bookmark PEP event because bookmark conversion was"
43 + " not detected");
44 }
45 }
46
47 public boolean hasConversion() {
48 return getManager(PepManager.class).hasPublishOptions()
49 && getManager(DiscoManager.class).hasAccountFeature(Namespace.BOOKMARKS_CONVERSION);
50 }
51
52 public ListenableFuture<Void> publish(final Collection<Bookmark> bookmarks) {
53 final var storage = new Storage();
54 for (final var bookmark : bookmarks) {
55 storage.addChild(bookmark);
56 }
57 return getManager(PepManager.class).publishSingleton(storage, NodeConfiguration.WHITELIST);
58 }
59}