run mam queries only when online
This commit is contained in:
parent
5cbae25808
commit
f8a496a5f1
|
@ -3,7 +3,9 @@ package eu.siacs.conversations.services;
|
|||
import android.util.Log;
|
||||
|
||||
import java.math.BigInteger;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashSet;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
|
||||
import eu.siacs.conversations.Config;
|
||||
|
@ -22,6 +24,7 @@ public class MessageArchiveService implements OnAdvancedStreamFeaturesLoaded {
|
|||
private final XmppConnectionService mXmppConnectionService;
|
||||
|
||||
private final HashSet<Query> queries = new HashSet<Query>();
|
||||
private ArrayList<Query> pendingQueries = new ArrayList<Query>();
|
||||
|
||||
public enum PagingOrder {
|
||||
NORMAL,
|
||||
|
@ -83,18 +86,41 @@ public class MessageArchiveService implements OnAdvancedStreamFeaturesLoaded {
|
|||
}
|
||||
}
|
||||
|
||||
public void executePendingQueries(final Account account) {
|
||||
List<Query> pending = new ArrayList<>();
|
||||
synchronized(this.pendingQueries) {
|
||||
for(Iterator<Query> iterator = this.pendingQueries.iterator(); iterator.hasNext();) {
|
||||
Query query = iterator.next();
|
||||
if (query.getAccount() == account) {
|
||||
pending.add(query);
|
||||
iterator.remove();
|
||||
}
|
||||
}
|
||||
}
|
||||
for(Query query : pending) {
|
||||
this.execute(query);
|
||||
}
|
||||
}
|
||||
|
||||
private void execute(final Query query) {
|
||||
Log.d(Config.LOGTAG,query.getAccount().getJid().toBareJid().toString()+": running mam query "+query.toString());
|
||||
final Account account= query.getAccount();
|
||||
if (account.getStatus() == Account.State.ONLINE) {
|
||||
Log.d(Config.LOGTAG, account.getJid().toBareJid().toString() + ": running mam query " + query.toString());
|
||||
IqPacket packet = this.mXmppConnectionService.getIqGenerator().queryMessageArchiveManagement(query);
|
||||
this.mXmppConnectionService.sendIqPacket(query.getAccount(), packet, new OnIqPacketReceived() {
|
||||
this.mXmppConnectionService.sendIqPacket(account, packet, new OnIqPacketReceived() {
|
||||
@Override
|
||||
public void onIqPacketReceived(Account account, IqPacket packet) {
|
||||
if (packet.getType() == IqPacket.TYPE_ERROR) {
|
||||
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);
|
||||
}
|
||||
}
|
||||
});
|
||||
} else {
|
||||
synchronized (this.pendingQueries) {
|
||||
this.pendingQueries.add(query);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void finalizeQuery(Query query) {
|
||||
|
|
|
@ -160,6 +160,7 @@ public class XmppConnectionService extends Service implements OnPhoneContactsLoa
|
|||
for (Conversation conversation : account.pendingConferenceJoins) {
|
||||
joinMuc(conversation);
|
||||
}
|
||||
mMessageArchiveService.executePendingQueries(account);
|
||||
mJingleConnectionManager.cancelInTransmission();
|
||||
List<Conversation> conversations = getConversations();
|
||||
for (Conversation conversation : conversations) {
|
||||
|
|
Loading…
Reference in a new issue