do not parse delay tag for unavailable presences when it comes form own server
This commit is contained in:
		
							parent
							
								
									ed7882fe69
								
							
						
					
					
						commit
						612e0afa63
					
				| @ -2,6 +2,7 @@ package eu.siacs.conversations.parser; | |||||||
| 
 | 
 | ||||||
| import java.text.ParseException; | import java.text.ParseException; | ||||||
| import java.text.SimpleDateFormat; | import java.text.SimpleDateFormat; | ||||||
|  | 
 | ||||||
| import java.util.Locale; | import java.util.Locale; | ||||||
| 
 | 
 | ||||||
| import eu.siacs.conversations.entities.Account; | import eu.siacs.conversations.entities.Account; | ||||||
| @ -12,6 +13,7 @@ import eu.siacs.conversations.services.XmppConnectionService; | |||||||
| import eu.siacs.conversations.xml.Element; | import eu.siacs.conversations.xml.Element; | ||||||
| import eu.siacs.conversations.xmpp.jid.InvalidJidException; | import eu.siacs.conversations.xmpp.jid.InvalidJidException; | ||||||
| import eu.siacs.conversations.xmpp.jid.Jid; | import eu.siacs.conversations.xmpp.jid.Jid; | ||||||
|  | import eu.siacs.conversations.xmpp.stanzas.AbstractStanza; | ||||||
| 
 | 
 | ||||||
| public abstract class AbstractParser { | public abstract class AbstractParser { | ||||||
| 
 | 
 | ||||||
| @ -22,11 +24,25 @@ public abstract class AbstractParser { | |||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	public static Long parseTimestamp(Element element, Long d) { | 	public static Long parseTimestamp(Element element, Long d) { | ||||||
|  | 		return parseTimestamp(element,d,false); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	public static Long parseTimestamp(Element element, Long d, boolean ignoreCsiAndSm) { | ||||||
| 		long min = Long.MAX_VALUE; | 		long min = Long.MAX_VALUE; | ||||||
| 		boolean returnDefault = true; | 		boolean returnDefault = true; | ||||||
|  | 		final Jid to; | ||||||
|  | 		if (ignoreCsiAndSm && element instanceof AbstractStanza) { | ||||||
|  | 			to = ((AbstractStanza) element).getTo(); | ||||||
|  | 		} else { | ||||||
|  | 			to = null; | ||||||
|  | 		} | ||||||
| 		for(Element child : element.getChildren()) { | 		for(Element child : element.getChildren()) { | ||||||
| 			if ("delay".equals(child.getName()) && "urn:xmpp:delay".equals(child.getNamespace())) { | 			if ("delay".equals(child.getName()) && "urn:xmpp:delay".equals(child.getNamespace())) { | ||||||
| 				String stamp = child.getAttribute("stamp"); | 				final Jid f = to == null ? null : child.getAttributeAsJid("from"); | ||||||
|  | 				if (f != null && (to.toBareJid().equals(f) || to.getDomainpart().equals(f.toString()))) { | ||||||
|  | 					continue; | ||||||
|  | 				} | ||||||
|  | 				final String stamp = child.getAttribute("stamp"); | ||||||
| 				if (stamp != null) { | 				if (stamp != null) { | ||||||
| 					try { | 					try { | ||||||
| 						min = Math.min(min,AbstractParser.parseTimestamp(stamp)); | 						min = Math.min(min,AbstractParser.parseTimestamp(stamp)); | ||||||
|  | |||||||
| @ -240,7 +240,7 @@ public class PresenceParser extends AbstractParser implements | |||||||
| 			boolean online = sizeBefore < contact.getPresences().size(); | 			boolean online = sizeBefore < contact.getPresences().size(); | ||||||
| 			mXmppConnectionService.onContactStatusChanged.onContactStatusChanged(contact, online); | 			mXmppConnectionService.onContactStatusChanged.onContactStatusChanged(contact, online); | ||||||
| 		} else if (type.equals("unavailable")) { | 		} else if (type.equals("unavailable")) { | ||||||
| 			if (contact.setLastseen(AbstractParser.parseTimestamp(packet))) { | 			if (contact.setLastseen(AbstractParser.parseTimestamp(packet,0L,true))) { | ||||||
| 				contact.flagInactive(); | 				contact.flagInactive(); | ||||||
| 			} | 			} | ||||||
| 			if (from.isBareJid()) { | 			if (from.isBareJid()) { | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Daniel Gultsch
						Daniel Gultsch