101 lines
3.0 KiB
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;
|
|
}
|
|
}
|