From 3e932930713e1dfaf141878dfb6dea8fea23ab7a Mon Sep 17 00:00:00 2001 From: Christian Schneppe Date: Sat, 11 Mar 2017 12:08:30 +0100 Subject: send and parse Chat States to and from conferences --- .../de/pixart/messenger/parser/MessageParser.java | 27 ++++++++++++++-------- 1 file changed, 17 insertions(+), 10 deletions(-) (limited to 'src/main/java/de/pixart/messenger/parser/MessageParser.java') diff --git a/src/main/java/de/pixart/messenger/parser/MessageParser.java b/src/main/java/de/pixart/messenger/parser/MessageParser.java index 2fa7160b6..baa3b4d79 100644 --- a/src/main/java/de/pixart/messenger/parser/MessageParser.java +++ b/src/main/java/de/pixart/messenger/parser/MessageParser.java @@ -47,20 +47,29 @@ public class MessageParser extends AbstractParser implements OnMessagePacketRece super(service); } - private boolean extractChatState(Conversation conversation, final MessagePacket packet) { + private boolean extractChatState(Conversation c, final boolean isTypeGroupChat, final MessagePacket packet) { ChatState state = ChatState.parse(packet); - if (state != null && conversation != null) { - final Account account = conversation.getAccount(); + if (state != null && c != null) { + final Account account = c.getAccount(); Jid from = packet.getFrom(); if (from.toBareJid().equals(account.getJid().toBareJid())) { - conversation.setOutgoingChatState(state); + c.setOutgoingChatState(state); if (state == ChatState.ACTIVE || state == ChatState.COMPOSING) { - mXmppConnectionService.markRead(conversation); + mXmppConnectionService.markRead(c); activateGracePeriod(account); } return false; } else { - return conversation.setIncomingChatState(state); + if (isTypeGroupChat) { + MucOptions.User user = c.getMucOptions().findUserByFullJid(from); + if (user != null) { + return user.setChatState(state); + } else { + return false; + } + } else { + return c.setIncomingChatState(state); + } } } return false; @@ -395,9 +404,7 @@ public class MessageParser extends AbstractParser implements OnMessagePacketRece return; } - if (!isTypeGroupChat - && query == null - && extractChatState(mXmppConnectionService.find(account, counterpart.toBareJid()), packet)) { + if (query == null && extractChatState(mXmppConnectionService.find(account, counterpart.toBareJid()), isTypeGroupChat, packet)) { mXmppConnectionService.updateConversationUi(); } @@ -408,7 +415,7 @@ public class MessageParser extends AbstractParser implements OnMessagePacketRece serverMsgId = extractStanzaId(packet, isTypeGroupChat, conversation); } if (isTypeGroupChat) { - if (counterpart.getResourcepart().equals(conversation.getMucOptions().getActualNick())) { + if (conversation.getMucOptions().isSelf(counterpart)) { status = Message.STATUS_SEND_RECEIVED; isCarbon = true; //not really carbon but received from another resource if (mXmppConnectionService.markMessage(conversation, remoteMsgId, status, serverMsgId)) { -- cgit v1.2.3