Mercury-IM/app/src/main/java/org/mercury_im/messenger/handler/RoomPlainMessageHandler.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());
}
}