properly clean up timed out mam queries
This commit is contained in:
parent
ede92235d7
commit
2262921ff4
|
@ -425,7 +425,7 @@ public class MessageParser extends AbstractParser implements
|
||||||
mXmppConnectionService.sendMessagePacket(account, receipt);
|
mXmppConnectionService.sendMessagePacket(account, receipt);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (account.getXmppConnection() != null && account.getXmppConnection().getFeatures().advancedStreamFeaturesLoaded()) {
|
if (account.isOnlineAndConnected() && query == null) {
|
||||||
if (conversation.setLastMessageTransmitted(System.currentTimeMillis())) {
|
if (conversation.setLastMessageTransmitted(System.currentTimeMillis())) {
|
||||||
mXmppConnectionService.updateConversation(conversation);
|
mXmppConnectionService.updateConversation(conversation);
|
||||||
}
|
}
|
||||||
|
|
|
@ -35,7 +35,15 @@ public class MessageArchiveService implements OnAdvancedStreamFeaturesLoaded {
|
||||||
this.mXmppConnectionService = service;
|
this.mXmppConnectionService = service;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void catchup(final Account account) {
|
private void catchup(final Account account) {
|
||||||
|
synchronized (this.queries) {
|
||||||
|
for(Iterator<Query> iterator = this.queries.iterator(); iterator.hasNext();) {
|
||||||
|
Query query = iterator.next();
|
||||||
|
if (query.getAccount() == account) {
|
||||||
|
iterator.remove();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
long startCatchup = getLastMessageTransmitted(account);
|
long startCatchup = getLastMessageTransmitted(account);
|
||||||
long endCatchup = account.getXmppConnection().getLastSessionEstablished();
|
long endCatchup = account.getXmppConnection().getLastSessionEstablished();
|
||||||
if (startCatchup == 0) {
|
if (startCatchup == 0) {
|
||||||
|
@ -131,7 +139,14 @@ public class MessageArchiveService implements OnAdvancedStreamFeaturesLoaded {
|
||||||
this.mXmppConnectionService.sendIqPacket(account, packet, new OnIqPacketReceived() {
|
this.mXmppConnectionService.sendIqPacket(account, packet, new OnIqPacketReceived() {
|
||||||
@Override
|
@Override
|
||||||
public void onIqPacketReceived(Account account, IqPacket packet) {
|
public void onIqPacketReceived(Account account, IqPacket packet) {
|
||||||
if (packet.getType() != IqPacket.TYPE.RESULT) {
|
if (packet.getType() == IqPacket.TYPE.TIMEOUT) {
|
||||||
|
synchronized (MessageArchiveService.this.queries) {
|
||||||
|
MessageArchiveService.this.queries.remove(query);
|
||||||
|
if (query.hasCallback()) {
|
||||||
|
query.callback();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if (packet.getType() != IqPacket.TYPE.RESULT) {
|
||||||
Log.d(Config.LOGTAG, account.getJid().toBareJid().toString() + ": error executing mam: " + packet.toString());
|
Log.d(Config.LOGTAG, account.getJid().toBareJid().toString() + ": error executing mam: " + packet.toString());
|
||||||
finalizeQuery(query);
|
finalizeQuery(query);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue