BookmarkManager.java

 1package eu.siacs.conversations.xmpp.manager;
 2
 3import android.util.Log;
 4import androidx.annotation.NonNull;
 5import com.google.common.collect.ImmutableMap;
 6import com.google.common.util.concurrent.FutureCallback;
 7import com.google.common.util.concurrent.Futures;
 8import com.google.common.util.concurrent.ListenableFuture;
 9import com.google.common.util.concurrent.MoreExecutors;
10import eu.siacs.conversations.Config;
11import eu.siacs.conversations.entities.Bookmark;
12import eu.siacs.conversations.services.XmppConnectionService;
13import eu.siacs.conversations.xml.Namespace;
14import eu.siacs.conversations.xmpp.Jid;
15import eu.siacs.conversations.xmpp.XmppConnection;
16import im.conversations.android.xmpp.NodeConfiguration;
17import im.conversations.android.xmpp.model.bookmark2.Conference;
18import im.conversations.android.xmpp.model.bookmark2.Nick;
19import im.conversations.android.xmpp.model.pubsub.Items;
20import java.util.Map;
21
22public class BookmarkManager extends AbstractBookmarkManager {
23
24    public BookmarkManager(final XmppConnectionService service, XmppConnection connection) {
25        super(service, connection);
26    }
27
28    public void fetch() {
29        final var future = getManager(PepManager.class).fetchItems(Conference.class);
30        Futures.addCallback(
31                future,
32                new FutureCallback<>() {
33                    @Override
34                    public void onSuccess(final Map<String, Conference> bookmarks) {
35                        final var builder = new ImmutableMap.Builder<Jid, Bookmark>();
36                        for (final var entry : bookmarks.entrySet()) {
37                            final Bookmark bookmark =
38                                    Bookmark.parseFromItem(
39                                            entry.getKey(), entry.getValue(), getAccount());
40                            if (bookmark == null) {
41                                continue;
42                            }
43                            builder.put(bookmark.getJid(), bookmark);
44                        }
45                        processBookmarksInitial(builder.buildKeepingLast(), true);
46                    }
47
48                    @Override
49                    public void onFailure(@NonNull final Throwable throwable) {
50                        Log.d(Config.LOGTAG, "Could not fetch bookmarks", throwable);
51                    }
52                },
53                MoreExecutors.directExecutor());
54    }
55
56    public void handleItems(final Items items) {
57        final var retractions = items.getRetractions();
58        final var itemMap = items.getItemMap(Conference.class);
59        if (!retractions.isEmpty()) {
60            // deleteItems(retractions);
61        }
62        if (!itemMap.isEmpty()) {
63            // updateItems(itemMap);
64        }
65    }
66
67    public ListenableFuture<Void> publishBookmark(final Jid address, final boolean autoJoin) {
68        return publishBookmark(address, autoJoin, null);
69    }
70
71    public ListenableFuture<Void> publishBookmark(
72            final Jid address, final boolean autoJoin, final String nick) {
73        final var itemId = address.toString();
74        final var conference = new Conference();
75        conference.setAutoJoin(autoJoin);
76        if (nick != null) {
77            conference.addExtension(new Nick()).setContent(nick);
78        }
79        return Futures.transform(
80                getManager(PepManager.class)
81                        .publish(conference, itemId, NodeConfiguration.WHITELIST_MAX_ITEMS),
82                result -> null,
83                MoreExecutors.directExecutor());
84    }
85
86    public ListenableFuture<Void> retractBookmark(final Jid address) {
87        final var itemId = address.toString();
88        return Futures.transform(
89                getManager(PepManager.class).retract(itemId, Namespace.BOOKMARKS2),
90                result -> null,
91                MoreExecutors.directExecutor());
92    }
93
94    public void deleteAllItems() {}
95}