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.MoreExecutors;
8import eu.siacs.conversations.Config;
9import eu.siacs.conversations.entities.Bookmark;
10import eu.siacs.conversations.services.XmppConnectionService;
11import eu.siacs.conversations.xmpp.Jid;
12import eu.siacs.conversations.xmpp.XmppConnection;
13import im.conversations.android.xmpp.model.bookmark.Storage;
14import im.conversations.android.xmpp.model.stanza.Iq;
15import im.conversations.android.xmpp.model.storage.PrivateStorage;
16import java.util.Map;
17
18public class PrivateStorageManager extends AbstractBookmarkManager {
19
20 public PrivateStorageManager(final XmppConnectionService service, XmppConnection connection) {
21 super(service, connection);
22 }
23
24 public void fetchBookmarks() {
25 final var iq = new Iq(Iq.Type.GET);
26 final var privateStorage = iq.addExtension(new PrivateStorage());
27 privateStorage.addExtension(new Storage());
28 final var future = this.connection.sendIqPacket(iq);
29 Futures.addCallback(
30 future,
31 new FutureCallback<Iq>() {
32 @Override
33 public void onSuccess(Iq result) {
34 final var privateStorage = result.getExtension(PrivateStorage.class);
35 if (privateStorage == null) {
36 return;
37 }
38 final var bookmarkStorage = privateStorage.getExtension(Storage.class);
39 final Map<Jid, Bookmark> bookmarks =
40 Bookmark.parseFromStorage(bookmarkStorage, getAccount());
41 processBookmarksInitial(bookmarks, false);
42 }
43
44 @Override
45 public void onFailure(@NonNull Throwable t) {
46 Log.d(
47 Config.LOGTAG,
48 getAccount().getJid().asBareJid()
49 + ": could not fetch bookmark from private storage",
50 t);
51 }
52 },
53 MoreExecutors.directExecutor());
54 }
55}