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