1package eu.siacs.conversations.xmpp.manager;
2
3import android.util.Log;
4import eu.siacs.conversations.Config;
5import eu.siacs.conversations.entities.Account;
6import eu.siacs.conversations.entities.Bookmark;
7import eu.siacs.conversations.entities.Conversation;
8import eu.siacs.conversations.services.XmppConnectionService;
9import eu.siacs.conversations.xmpp.Jid;
10import eu.siacs.conversations.xmpp.XmppConnection;
11import java.util.Collection;
12import java.util.Map;
13import java.util.Set;
14
15public class AbstractBookmarkManager extends AbstractManager {
16
17 private final XmppConnectionService service;
18
19 protected AbstractBookmarkManager(
20 final XmppConnectionService service, final XmppConnection connection) {
21 super(service, connection);
22 this.service = service;
23 }
24
25 // TODO rename to setBookmarks?
26 public void processBookmarksInitial(final Map<Jid, Bookmark> bookmarks, final boolean pep) {
27 final var account = getAccount();
28 // TODO we can internalize this getBookmarkedJid
29 final Set<Jid> previousBookmarks = account.getBookmarkedJids();
30 for (final Bookmark bookmark : bookmarks.values()) {
31 previousBookmarks.remove(bookmark.getJid().asBareJid());
32 service.processModifiedBookmark(bookmark, pep);
33 }
34 if (pep) {
35 this.processDeletedBookmarks(account, previousBookmarks);
36 }
37 account.setBookmarks(bookmarks);
38 }
39
40 public void processDeletedBookmarks(final Account account, final Collection<Jid> bookmarks) {
41 Log.d(
42 Config.LOGTAG,
43 account.getJid().asBareJid()
44 + ": "
45 + bookmarks.size()
46 + " bookmarks have been removed");
47 for (final Jid bookmark : bookmarks) {
48 processDeletedBookmark(account, bookmark);
49 }
50 }
51
52 public void processDeletedBookmark(final Account account, final Jid jid) {
53 final Conversation conversation = service.find(account, jid);
54 if (conversation == null) {
55 return;
56 }
57 Log.d(
58 Config.LOGTAG,
59 account.getJid().asBareJid() + ": archiving MUC " + jid + " after PEP update");
60 this.service.archiveConversation(conversation, false);
61 }
62}