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:
commit
382bcc4cb5
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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());
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue