85 lines
3.3 KiB
Java
85 lines
3.3 KiB
Java
package org.mercury_im.messenger.handler;
|
|
|
|
import android.util.Log;
|
|
|
|
import org.jivesoftware.smack.chat2.Chat;
|
|
import org.jivesoftware.smack.packet.Message;
|
|
import org.jivesoftware.smackx.carbons.packet.CarbonExtension;
|
|
import org.jxmpp.jid.EntityBareJid;
|
|
import org.mercury_im.messenger.MercuryImApplication;
|
|
import org.mercury_im.messenger.persistence.model.MessageModel;
|
|
import org.mercury_im.messenger.persistence.repository.MessageRepository;
|
|
import org.mercury_im.messenger.persistence.room.model.RoomMessageModel;
|
|
import org.mercury_im.messenger.core.PlainMessageHandler;
|
|
|
|
import java.util.Date;
|
|
|
|
import javax.inject.Inject;
|
|
|
|
import io.reactivex.Single;
|
|
|
|
import static org.mercury_im.messenger.MercuryImApplication.TAG;
|
|
|
|
public class RoomPlainMessageHandler implements PlainMessageHandler {
|
|
|
|
private final long accountId;
|
|
|
|
@Inject
|
|
MessageRepository messageRepository;
|
|
|
|
public RoomPlainMessageHandler(long accountId) {
|
|
this.accountId = accountId;
|
|
|
|
MercuryImApplication.getApplication().getAppComponent().inject(this);
|
|
}
|
|
|
|
@Override
|
|
public void newIncomingMessage(EntityBareJid from, Message message, Chat chat) {
|
|
if (message.getBody() == null) {
|
|
return;
|
|
}
|
|
MessageModel messageModel = new RoomMessageModel();
|
|
messageModel.setAccountId(accountId);
|
|
messageModel.setFrom(chat.getXmppAddressOfChatPartner());
|
|
messageModel.setTo(message.getTo().asEntityBareJidIfPossible());
|
|
messageModel.setIncoming(true);
|
|
messageModel.setBody(message.getBody());
|
|
messageModel.setSendDate(new Date());
|
|
Single<Long> messageId = messageRepository.insertMessage(messageModel);
|
|
|
|
Log.d(TAG, "Inserted incoming message " + messageId.blockingGet());
|
|
}
|
|
|
|
@Override
|
|
public void newOutgoingMessage(EntityBareJid to, Message message, Chat chat) {
|
|
MessageModel messageModel = new RoomMessageModel();
|
|
messageModel.setAccountId(accountId);
|
|
messageModel.setFrom(message.getFrom() != null ? message.getFrom().asEntityBareJidIfPossible() : null);
|
|
messageModel.setTo(chat.getXmppAddressOfChatPartner());
|
|
messageModel.setIncoming(false);
|
|
messageModel.setBody(message.getBody());
|
|
messageModel.setSendDate(new Date());
|
|
Single<Long> messageId = messageRepository.insertMessage(messageModel);
|
|
Log.d(TAG, "Inserted outgoing message " + messageId.blockingGet());
|
|
}
|
|
|
|
@Override
|
|
public void onCarbonCopyReceived(CarbonExtension.Direction direction, Message carbonCopy, Message wrappingMessage) {
|
|
Log.d(TAG, "onCarbonReceived:" + carbonCopy.toXML());
|
|
if (carbonCopy.getBody() == null) {
|
|
return;
|
|
}
|
|
MessageModel messageModel = new RoomMessageModel();
|
|
messageModel.setAccountId(accountId);
|
|
messageModel.setFrom(carbonCopy.getFrom() != null ? carbonCopy.getFrom().asEntityBareJidIfPossible() : null);
|
|
messageModel.setTo(carbonCopy.getTo() != null ? carbonCopy.getTo().asEntityBareJidIfPossible() : null);
|
|
|
|
messageModel.setIncoming(direction == CarbonExtension.Direction.received);
|
|
|
|
messageModel.setBody(carbonCopy.getBody());
|
|
messageModel.setSendDate(new Date());
|
|
Single<Long> messageId = messageRepository.insertMessage(messageModel);
|
|
Log.d(TAG, "Inserted carbon message " + messageId.blockingGet());
|
|
}
|
|
}
|