Merge pull request #1042 from BrianBlade/FIXES_muc-dlrs_muc-lastseen

add delivery receipts for private muc msgs & enable update last-seen for muc-msgs
This commit is contained in:
Daniel Gultsch 2015-03-19 18:47:33 +01:00
commit 382bcc4cb5
4 changed files with 24 additions and 8 deletions

View File

@ -35,6 +35,9 @@ public class MessageGenerator extends AbstractGenerator {
} else if (message.getType() == Message.TYPE_PRIVATE) {
packet.setTo(message.getCounterpart());
packet.setType(MessagePacket.TYPE_CHAT);
if (this.mXmppConnectionService.indicateReceived()) {
packet.addChild("request", "urn:xmpp:receipts");
}
} else {
packet.setTo(message.getCounterpart().toBareJid());
packet.setType(MessagePacket.TYPE_GROUPCHAT);

View File

@ -49,6 +49,11 @@ public abstract class AbstractParser {
protected void updateLastseen(final Element packet, final Account account,
final boolean presenceOverwrite) {
final Jid from = packet.getAttributeAsJid("from");
updateLastseen(packet, account, from, presenceOverwrite);
}
protected void updateLastseen(final Element packet, final Account account, final Jid from,
final boolean presenceOverwrite) {
final String presence = from == null || from.isBareJid() ? "" : from.getResourcepart();
final Contact contact = account.getRoster().getContact(from);
final long timestamp = getTimestamp(packet);

View File

@ -44,12 +44,11 @@ public class MessageParser extends AbstractParser implements
}
private Message parseChat(MessagePacket packet, Account account) {
final Jid jid = packet.getFrom();
final Jid jid = packet.getFrom();
if (jid == null) {
return null;
}
Conversation conversation = mXmppConnectionService.findOrCreateConversation(account, jid.toBareJid(), false);
updateLastseen(packet, account, true);
String pgpBody = getPgpBody(packet);
Message finishedMessage;
if (pgpBody != null) {
@ -64,13 +63,18 @@ public class MessageParser extends AbstractParser implements
finishedMessage.markable = isMarkable(packet);
if (conversation.getMode() == Conversation.MODE_MULTI
&& !jid.isBareJid()) {
final Jid trueCounterpart = conversation.getMucOptions()
.getTrueCounterpart(jid.getResourcepart());
if (trueCounterpart != null) {
updateLastseen(packet, account, trueCounterpart, true);
}
finishedMessage.setType(Message.TYPE_PRIVATE);
finishedMessage.setTrueCounterpart(conversation.getMucOptions()
.getTrueCounterpart(jid.getResourcepart()));
finishedMessage.setTrueCounterpart(trueCounterpart);
if (conversation.hasDuplicateMessage(finishedMessage)) {
return null;
}
} else {
updateLastseen(packet, account, true);
}
finishedMessage.setCounterpart(jid);
finishedMessage.setTime(getTimestamp(packet));
@ -89,7 +93,7 @@ public class MessageParser extends AbstractParser implements
.findOrCreateConversation(account, from.toBareJid(), false);
String presence;
if (from.isBareJid()) {
presence = "";
presence = "";
} else {
presence = from.getResourcepart();
}
@ -153,7 +157,7 @@ public class MessageParser extends AbstractParser implements
private Message parseGroupchat(MessagePacket packet, Account account) {
int status;
final Jid from = packet.getFrom();
final Jid from = packet.getFrom();
if (from == null) {
return null;
}
@ -163,6 +167,10 @@ public class MessageParser extends AbstractParser implements
}
Conversation conversation = mXmppConnectionService
.findOrCreateConversation(account, from.toBareJid(), true);
final Jid trueCounterpart = conversation.getMucOptions().getTrueCounterpart(from.getResourcepart());
if (trueCounterpart != null) {
updateLastseen(packet, account, trueCounterpart.toBareJid(), true);
}
if (packet.hasChild("subject")) {
conversation.setHasMessagesLeftOnServer(true);
conversation.getMucOptions().setSubject(packet.findChild("subject").getContent());

View File

@ -2041,7 +2041,7 @@ public class XmppConnectionService extends Service implements OnPhoneContactsLoa
return null;
}
for (Conversation conversation : getConversations()) {
if (conversation.getJid().equals(recipient) && conversation.getAccount() == account) {
if (conversation.getJid().toBareJid().equals(recipient) && conversation.getAccount() == account) {
final Message message = conversation.findSentMessageWithUuid(uuid);
if (message != null) {
markMessage(message, status);