PrivateStorageManager.java

 1package eu.siacs.conversations.xmpp.manager;
 2
 3import android.util.Log;
 4import androidx.annotation.NonNull;
 5import com.google.common.util.concurrent.FutureCallback;
 6import com.google.common.util.concurrent.Futures;
 7import com.google.common.util.concurrent.ListenableFuture;
 8import com.google.common.util.concurrent.MoreExecutors;
 9import eu.siacs.conversations.Config;
10import eu.siacs.conversations.entities.Bookmark;
11import eu.siacs.conversations.services.XmppConnectionService;
12import eu.siacs.conversations.xmpp.Jid;
13import eu.siacs.conversations.xmpp.XmppConnection;
14import im.conversations.android.xmpp.model.bookmark.Storage;
15import im.conversations.android.xmpp.model.stanza.Iq;
16import im.conversations.android.xmpp.model.storage.PrivateStorage;
17import java.util.Collection;
18import java.util.Map;
19
20public class PrivateStorageManager extends AbstractBookmarkManager {
21
22    public PrivateStorageManager(final XmppConnectionService service, XmppConnection connection) {
23        super(service, connection);
24    }
25
26    public void fetchBookmarks() {
27        final var iq = new Iq(Iq.Type.GET);
28        final var privateStorage = iq.addExtension(new PrivateStorage());
29        privateStorage.addExtension(new Storage());
30        final var future = this.connection.sendIqPacket(iq);
31        Futures.addCallback(
32                future,
33                new FutureCallback<Iq>() {
34                    @Override
35                    public void onSuccess(Iq result) {
36                        final var privateStorage = result.getExtension(PrivateStorage.class);
37                        if (privateStorage == null) {
38                            return;
39                        }
40                        final var bookmarkStorage = privateStorage.getExtension(Storage.class);
41                        final Map<Jid, Bookmark> bookmarks =
42                                Bookmark.parseFromStorage(bookmarkStorage, getAccount());
43                        processBookmarksInitial(bookmarks, false);
44                    }
45
46                    @Override
47                    public void onFailure(@NonNull Throwable t) {
48                        Log.d(
49                                Config.LOGTAG,
50                                getAccount().getJid().asBareJid()
51                                        + ": could not fetch bookmark from private storage",
52                                t);
53                    }
54                },
55                MoreExecutors.directExecutor());
56    }
57
58    public ListenableFuture<Void> publishBookmarks(Collection<Bookmark> bookmarks) {
59        final var iq = new Iq(Iq.Type.SET);
60        final var privateStorage = iq.addExtension(new PrivateStorage());
61        final var storage = privateStorage.addExtension(new Storage());
62        for (final var bookmark : bookmarks) {
63            storage.addChild(bookmark);
64        }
65        return Futures.transform(
66                connection.sendIqPacket(iq), result -> null, MoreExecutors.directExecutor());
67    }
68}