LegacyBookmarkManager.java

 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}