aboutsummaryrefslogtreecommitdiffstats
path: root/src/main/java/de/pixart/messenger/parser/MessageParser.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/de/pixart/messenger/parser/MessageParser.java')
-rw-r--r--src/main/java/de/pixart/messenger/parser/MessageParser.java27
1 files changed, 17 insertions, 10 deletions
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)) {