Mercury-IM/app/src/main/java/org/mercury_im/messenger/ui/RoomRosterHandler.java

101 lines
3.0 KiB
Java

package org.mercury_im.messenger.ui;
import android.util.Log;
import org.jivesoftware.smack.packet.Presence;
import org.jivesoftware.smack.roster.Roster;
import org.jxmpp.jid.EntityBareJid;
import org.jxmpp.jid.Jid;
import org.mercury_im.messenger.MercuryImApplication;
import org.mercury_im.messenger.persistence.room.dao.ContactDao;
import org.mercury_im.messenger.persistence.room.dao.EntityDao;
import org.mercury_im.messenger.persistence.room.model.RoomContactModel;
import org.mercury_im.messenger.persistence.room.model.RoomEntityModel;
import org.mercury_im.messenger.xmpp_core.RosterHandler;
import java.util.Collection;
import javax.inject.Inject;
import static androidx.constraintlayout.widget.Constraints.TAG;
public class RoomRosterHandler implements RosterHandler {
@Inject
ContactDao contactDao;
@Inject
EntityDao entityDao;
private final long accountId;
private final Roster roster;
public RoomRosterHandler(long accountId, Roster roster) {
this.accountId = accountId;
this.roster = roster;
MercuryImApplication.getApplication().getAppComponent().inject(this);
}
@Override
public void entriesAdded(Collection<Jid> addresses) {
for (Jid jid : addresses) {
RoomContactModel contactModel = getContactModel(jid);
contactModel.setNickname(roster.getEntry(jid.asBareJid()).getName());
contactDao.insert(contactModel);
}
}
@Override
public void entriesUpdated(Collection<Jid> addresses) {
for (Jid jid : addresses) {
RoomContactModel contactModel = getContactModel(jid);
contactModel.setNickname(roster.getEntry(jid.asBareJid()).getName());
contactDao.update(contactModel);
}
}
@Override
public void entriesDeleted(Collection<Jid> addresses) {
for (Jid jid : addresses) {
RoomContactModel contactModel = getContactModel(jid);
contactDao.delete(contactModel);
}
}
@Override
public void presenceChanged(Presence presence) {
}
@Override
public void onRosterLoaded(Roster roster) {
}
@Override
public void onRosterLoadingFailed(Exception exception) {
}
private RoomContactModel getContactModel(Jid jid) {
Log.d(TAG, "Build entity " + jid + " " + accountId);
EntityBareJid entityBareJid = jid.asEntityBareJidOrThrow();
RoomEntityModel entityModel = entityDao.getEntityForSync(accountId, entityBareJid);
if (entityModel == null) {
entityModel = new RoomEntityModel();
entityModel.setAccountId(accountId);
entityModel.setJid(entityBareJid);
entityModel.setId(entityDao.insert(entityModel));
}
RoomContactModel contactModel = contactDao.syncGetContactForEntityId(entityModel.getId());
if (contactModel == null) {
contactModel = new RoomContactModel();
contactModel.setAccountId(accountId);
contactModel.setEntityId(entityModel.getId());
}
return contactModel;
}
}