add more fault tolerant checks for messages left on server
This commit is contained in:
		
							parent
							
								
									17791a703e
								
							
						
					
					
						commit
						f88b8c703e
					
				| @ -81,6 +81,7 @@ public class Conversation extends AbstractEntity implements Blockable { | ||||
| 	private ChatState mOutgoingChatState = Config.DEFAULT_CHATSTATE; | ||||
| 	private ChatState mIncomingChatState = Config.DEFAULT_CHATSTATE; | ||||
| 	private String mLastReceivedOtrMessageId = null; | ||||
| 	private String mFirstMamReference = null; | ||||
| 
 | ||||
| 	public boolean hasMessagesLeftOnServer() { | ||||
| 		return messagesLeftOnServer; | ||||
| @ -277,6 +278,14 @@ public class Conversation extends AbstractEntity implements Blockable { | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	public void setFirstMamReference(String reference) { | ||||
| 		this.mFirstMamReference = reference; | ||||
| 	} | ||||
| 
 | ||||
| 	public String getFirstMamReference() { | ||||
| 		return this.mFirstMamReference; | ||||
| 	} | ||||
| 
 | ||||
| 	public interface OnMessageFound { | ||||
| 		void onMessageFound(final Message message); | ||||
| 	} | ||||
|  | ||||
| @ -102,6 +102,7 @@ public class MessageArchiveService implements OnAdvancedStreamFeaturesLoaded { | ||||
| 				return null; | ||||
| 			} | ||||
| 			final Query query = new Query(conversation, start, end,PagingOrder.REVERSE); | ||||
| 			query.reference = conversation.getFirstMamReference(); | ||||
| 			this.queries.add(query); | ||||
| 			this.execute(query); | ||||
| 			return query; | ||||
| @ -141,7 +142,7 @@ public class MessageArchiveService implements OnAdvancedStreamFeaturesLoaded { | ||||
| 						} | ||||
| 					} else if (packet.getType() != IqPacket.TYPE.RESULT) { | ||||
| 						Log.d(Config.LOGTAG, account.getJid().toBareJid().toString() + ": error executing mam: " + packet.toString()); | ||||
| 						finalizeQuery(query); | ||||
| 						finalizeQuery(query, true); | ||||
| 					} | ||||
| 				} | ||||
| 			}); | ||||
| @ -152,14 +153,14 @@ public class MessageArchiveService implements OnAdvancedStreamFeaturesLoaded { | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	private void finalizeQuery(Query query) { | ||||
| 	private void finalizeQuery(Query query, boolean done) { | ||||
| 		synchronized (this.queries) { | ||||
| 			this.queries.remove(query); | ||||
| 		} | ||||
| 		final Conversation conversation = query.getConversation(); | ||||
| 		if (conversation != null) { | ||||
| 			conversation.sort(); | ||||
| 			conversation.setHasMessagesLeftOnServer(query.getMessageCount() > 0); | ||||
| 			conversation.setHasMessagesLeftOnServer(!done); | ||||
| 		} else { | ||||
| 			for(Conversation tmp : this.mXmppConnectionService.getConversations()) { | ||||
| 				if (tmp.getAccount() == query.getAccount()) { | ||||
| @ -202,9 +203,13 @@ public class MessageArchiveService implements OnAdvancedStreamFeaturesLoaded { | ||||
| 		Element first = set == null ? null : set.findChild("first"); | ||||
| 		Element relevant = query.getPagingOrder() == PagingOrder.NORMAL ? last : first; | ||||
| 		boolean abort = (query.getStart() == 0 && query.getTotalCount() >= Config.PAGE_SIZE) || query.getTotalCount() >= Config.MAM_MAX_MESSAGES; | ||||
| 		if (query.getConversation() != null) { | ||||
| 			query.getConversation().setFirstMamReference(first == null ? null : first.getContent()); | ||||
| 		} | ||||
| 		if (complete || relevant == null || abort) { | ||||
| 			this.finalizeQuery(query); | ||||
| 			Log.d(Config.LOGTAG,query.getAccount().getJid().toBareJid().toString()+": finished mam after "+query.getTotalCount()+" messages"); | ||||
| 			final boolean done = (complete || query.getMessageCount() == 0) && query.getStart() == 0; | ||||
| 			this.finalizeQuery(query, done); | ||||
| 			Log.d(Config.LOGTAG,query.getAccount().getJid().toBareJid()+": finished mam after "+query.getTotalCount()+" messages. messages left="+Boolean.toString(!done)); | ||||
| 			if (query.getWith() == null && query.getMessageCount() > 0) { | ||||
| 				mXmppConnectionService.getNotificationService().finishBacklog(true); | ||||
| 			} | ||||
| @ -216,7 +221,7 @@ public class MessageArchiveService implements OnAdvancedStreamFeaturesLoaded { | ||||
| 				nextQuery = query.prev(first == null ? null : first.getContent()); | ||||
| 			} | ||||
| 			this.execute(nextQuery); | ||||
| 			this.finalizeQuery(query); | ||||
| 			this.finalizeQuery(query, false); | ||||
| 			synchronized (this.queries) { | ||||
| 				this.queries.remove(query); | ||||
| 				this.queries.add(nextQuery); | ||||
|  | ||||
| @ -1230,7 +1230,7 @@ public class XmppConnectionService extends Service implements OnPhoneContactsLoa | ||||
| 						&& account.isOnlineAndConnected()) { | ||||
| 					if ((conversation.getMode() == Conversation.MODE_SINGLE && account.getXmppConnection().getFeatures().mam()) | ||||
| 							|| (conversation.getMode() == Conversation.MODE_MULTI && conversation.getMucOptions().mamSupport())) { | ||||
| 						MessageArchiveService.Query query = getMessageArchiveService().query(conversation, 0, timestamp - 1); | ||||
| 						MessageArchiveService.Query query = getMessageArchiveService().query(conversation, 0, timestamp); | ||||
| 						if (query != null) { | ||||
| 							query.setCallback(callback); | ||||
| 						} | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Daniel Gultsch
						Daniel Gultsch