avoid race conditions when downloading files or decrypting pgp messages and waiting for sm catchup
This commit is contained in:
		
							parent
							
								
									15e5ccd1f4
								
							
						
					
					
						commit
						84baa3ae68
					
				| @ -624,9 +624,6 @@ public class MessageParser extends AbstractParser implements OnMessagePacketRece | ||||
| 			} else if (notify) { | ||||
| 				if (query != null && query.isCatchup()) { | ||||
| 					mXmppConnectionService.getNotificationService().pushFromBacklog(message); | ||||
| 				} else if (account.getXmppConnection().isWaitingForSmCatchup()) { | ||||
| 					account.getXmppConnection().incrementSmCatchupMessageCounter(); | ||||
| 					mXmppConnectionService.getNotificationService().pushFromBacklog(message); | ||||
| 				} else { | ||||
| 					mXmppConnectionService.getNotificationService().push(message); | ||||
| 				} | ||||
| @ -700,7 +697,7 @@ public class MessageParser extends AbstractParser implements OnMessagePacketRece | ||||
| 		if (displayed != null) { | ||||
| 			if (packet.fromAccount(account)) { | ||||
| 				Conversation conversation = mXmppConnectionService.find(account,counterpart.toBareJid()); | ||||
| 				if (conversation != null) { | ||||
| 				if (conversation != null && (query == null || query.isCatchup())) { | ||||
| 					mXmppConnectionService.markRead(conversation); | ||||
| 				} | ||||
| 			} else { | ||||
|  | ||||
| @ -46,6 +46,7 @@ import eu.siacs.conversations.ui.SettingsActivity; | ||||
| import eu.siacs.conversations.ui.TimePreference; | ||||
| import eu.siacs.conversations.utils.GeoHelper; | ||||
| import eu.siacs.conversations.utils.UIHelper; | ||||
| import eu.siacs.conversations.xmpp.XmppConnection; | ||||
| 
 | ||||
| public class NotificationService { | ||||
| 
 | ||||
| @ -170,6 +171,18 @@ public class NotificationService { | ||||
| 	} | ||||
| 
 | ||||
| 	public void push(final Message message) { | ||||
| 		synchronized (message.getConversation().getAccount()) { | ||||
| 			final XmppConnection connection = message.getConversation().getAccount().getXmppConnection(); | ||||
| 			if (connection.isWaitingForSmCatchup()) { | ||||
| 				connection.incrementSmCatchupMessageCounter(); | ||||
| 				pushFromBacklog(message); | ||||
| 			} else { | ||||
| 				pushNow(message); | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	private void pushNow(final Message message) { | ||||
| 		mXmppConnectionService.updateUnreadCountBadge(); | ||||
| 		if (!notify(message)) { | ||||
| 			Log.d(Config.LOGTAG,message.getConversation().getAccount().getJid().toBareJid()+": suppressing notification because turned off"); | ||||
|  | ||||
| @ -96,7 +96,7 @@ public class XmppConnection implements Runnable { | ||||
| 	private static final int PACKET_IQ = 0; | ||||
| 	private static final int PACKET_MESSAGE = 1; | ||||
| 	private static final int PACKET_PRESENCE = 2; | ||||
| 	protected Account account; | ||||
| 	protected final Account account; | ||||
| 	private final WakeLock wakeLock; | ||||
| 	private Socket socket; | ||||
| 	private XmlReader tagReader; | ||||
| @ -133,7 +133,7 @@ public class XmppConnection implements Runnable { | ||||
| 	private OnBindListener bindListener = null; | ||||
| 	private final ArrayList<OnAdvancedStreamFeaturesLoaded> advancedStreamFeaturesLoadedListeners = new ArrayList<>(); | ||||
| 	private OnMessageAcknowledged acknowledgedListener = null; | ||||
| 	private XmppConnectionService mXmppConnectionService = null; | ||||
| 	private final XmppConnectionService mXmppConnectionService; | ||||
| 
 | ||||
| 	private SaslMechanism saslMechanism; | ||||
| 
 | ||||
| @ -626,6 +626,7 @@ public class XmppConnection implements Runnable { | ||||
| 				final AckPacket ack = new AckPacket(this.stanzasReceived, smVersion); | ||||
| 				tagWriter.writeStanzaAsync(ack); | ||||
| 			} else if (nextTag.isStart("a")) { | ||||
| 				synchronized (account) { | ||||
| 					if (mWaitingForSmCatchup.compareAndSet(true, false)) { | ||||
| 						int count = mSmCatchupMessageCounter.get(); | ||||
| 						Log.d(Config.LOGTAG, account.getJid().toBareJid() + ": SM catchup complete (" + count + ")"); | ||||
| @ -633,6 +634,7 @@ public class XmppConnection implements Runnable { | ||||
| 							mXmppConnectionService.getNotificationService().finishBacklog(true, account); | ||||
| 						} | ||||
| 					} | ||||
| 				} | ||||
| 				final Element ack = tagReader.readElement(nextTag); | ||||
| 				lastPacketReceived = SystemClock.elapsedRealtime(); | ||||
| 				try { | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Daniel Gultsch
						Daniel Gultsch