AbstractBookmarkManager.java

 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}