extract affiliations from unavailable presence
This commit is contained in:
		
							parent
							
								
									035d0c7957
								
							
						
					
					
						commit
						1d3167b520
					
				| @ -409,7 +409,7 @@ public class MucOptions { | |||||||
| 		return user; | 		return user; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	public void addUser(User user) { | 	public void updateUser(User user) { | ||||||
| 		User old; | 		User old; | ||||||
| 		if (user.fullJid == null && user.realJid != null) { | 		if (user.fullJid == null && user.realJid != null) { | ||||||
| 			old = findUserByRealJid(user.realJid); | 			old = findUserByRealJid(user.realJid); | ||||||
|  | |||||||
| @ -74,19 +74,24 @@ public abstract class AbstractParser { | |||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	public static MucOptions.User parseItem(Conversation conference, Element item) { | 	public static MucOptions.User parseItem(Conversation conference, Element item) { | ||||||
|  | 		return parseItem(conference,item, null); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	public static MucOptions.User parseItem(Conversation conference, Element item, Jid fullJid) { | ||||||
| 		final String local = conference.getJid().getLocalpart(); | 		final String local = conference.getJid().getLocalpart(); | ||||||
| 		final String domain = conference.getJid().getDomainpart(); | 		final String domain = conference.getJid().getDomainpart(); | ||||||
| 		String affiliation = item.getAttribute("affiliation"); | 		String affiliation = item.getAttribute("affiliation"); | ||||||
| 		String role = item.getAttribute("role"); | 		String role = item.getAttribute("role"); | ||||||
| 		String nick = item.getAttribute("nick"); | 		String nick = item.getAttribute("nick"); | ||||||
| 		Jid fullJid; | 		if (nick != null && fullJid == null) { | ||||||
| 			try { | 			try { | ||||||
| 			fullJid = nick != null ? Jid.fromParts(local, domain, nick) : null; | 				fullJid = Jid.fromParts(local, domain, nick); | ||||||
| 			} catch (InvalidJidException e) { | 			} catch (InvalidJidException e) { | ||||||
| 				fullJid = null; | 				fullJid = null; | ||||||
| 			} | 			} | ||||||
|  | 		} | ||||||
| 		Jid realJid = item.getAttributeAsJid("jid"); | 		Jid realJid = item.getAttributeAsJid("jid"); | ||||||
| 		MucOptions.User user = new MucOptions.User(conference.getMucOptions(), nick == null ? null : fullJid); | 		MucOptions.User user = new MucOptions.User(conference.getMucOptions(), fullJid); | ||||||
| 		user.setRealJid(realJid); | 		user.setRealJid(realJid); | ||||||
| 		user.setAffiliation(affiliation); | 		user.setAffiliation(affiliation); | ||||||
| 		user.setRole(role); | 		user.setRole(role); | ||||||
|  | |||||||
| @ -612,7 +612,7 @@ public class MessageParser extends AbstractParser implements OnMessagePacketRece | |||||||
| 								+user.getRealJid()+" to "+user.getAffiliation()+" in " | 								+user.getRealJid()+" to "+user.getAffiliation()+" in " | ||||||
| 								+conversation.getJid().toBareJid()); | 								+conversation.getJid().toBareJid()); | ||||||
| 						if (!user.realJidMatchesAccount()) { | 						if (!user.realJidMatchesAccount()) { | ||||||
| 							conversation.getMucOptions().addUser(user); | 							conversation.getMucOptions().updateUser(user); | ||||||
| 							mXmppConnectionService.getAvatarService().clear(conversation); | 							mXmppConnectionService.getAvatarService().clear(conversation); | ||||||
| 							mXmppConnectionService.updateMucRosterUi(); | 							mXmppConnectionService.updateMucRosterUi(); | ||||||
| 							mXmppConnectionService.updateConversationUi(); | 							mXmppConnectionService.updateConversationUi(); | ||||||
|  | |||||||
| @ -38,7 +38,7 @@ public class PresenceParser extends AbstractParser implements | |||||||
| 			boolean before = mucOptions.online(); | 			boolean before = mucOptions.online(); | ||||||
| 			int count = mucOptions.getUserCount(); | 			int count = mucOptions.getUserCount(); | ||||||
| 			final List<MucOptions.User> tileUserBefore = mucOptions.getUsers(5); | 			final List<MucOptions.User> tileUserBefore = mucOptions.getUsers(5); | ||||||
| 			processConferencePresence(packet, mucOptions); | 			processConferencePresence(packet, conversation); | ||||||
| 			final List<MucOptions.User> tileUserAfter = mucOptions.getUsers(5); | 			final List<MucOptions.User> tileUserAfter = mucOptions.getUsers(5); | ||||||
| 			if (!tileUserAfter.equals(tileUserBefore)) { | 			if (!tileUserAfter.equals(tileUserBefore)) { | ||||||
| 				mXmppConnectionService.getAvatarService().clear(mucOptions); | 				mXmppConnectionService.getAvatarService().clear(mucOptions); | ||||||
| @ -51,7 +51,8 @@ public class PresenceParser extends AbstractParser implements | |||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	private void processConferencePresence(PresencePacket packet, MucOptions mucOptions) { | 	private void processConferencePresence(PresencePacket packet, Conversation conversation) { | ||||||
|  | 		MucOptions mucOptions = conversation.getMucOptions(); | ||||||
| 		final Jid from = packet.getFrom(); | 		final Jid from = packet.getFrom(); | ||||||
| 		if (!from.isBareJid()) { | 		if (!from.isBareJid()) { | ||||||
| 			final String type = packet.getAttribute("type"); | 			final String type = packet.getAttribute("type"); | ||||||
| @ -63,10 +64,7 @@ public class PresenceParser extends AbstractParser implements | |||||||
| 					Element item = x.findChild("item"); | 					Element item = x.findChild("item"); | ||||||
| 					if (item != null && !from.isBareJid()) { | 					if (item != null && !from.isBareJid()) { | ||||||
| 						mucOptions.setError(MucOptions.Error.NONE); | 						mucOptions.setError(MucOptions.Error.NONE); | ||||||
| 						MucOptions.User user = new MucOptions.User(mucOptions, from); | 						MucOptions.User user = parseItem(conversation, item, from); | ||||||
| 						user.setAffiliation(item.getAttribute("affiliation")); |  | ||||||
| 						user.setRole(item.getAttribute("role")); |  | ||||||
| 						user.setRealJid(item.getAttributeAsJid("jid")); |  | ||||||
| 						if (codes.contains(MucOptions.STATUS_CODE_SELF_PRESENCE) || packet.getFrom().equals(mucOptions.getConversation().getJid())) { | 						if (codes.contains(MucOptions.STATUS_CODE_SELF_PRESENCE) || packet.getFrom().equals(mucOptions.getConversation().getJid())) { | ||||||
| 							mucOptions.setOnline(); | 							mucOptions.setOnline(); | ||||||
| 							mucOptions.setSelf(user); | 							mucOptions.setSelf(user); | ||||||
| @ -77,7 +75,7 @@ public class PresenceParser extends AbstractParser implements | |||||||
| 								mucOptions.mNickChangingInProgress = false; | 								mucOptions.mNickChangingInProgress = false; | ||||||
| 							} | 							} | ||||||
| 						} else { | 						} else { | ||||||
| 							mucOptions.addUser(user); | 							mucOptions.updateUser(user); | ||||||
| 						} | 						} | ||||||
| 						if (codes.contains(MucOptions.STATUS_CODE_ROOM_CREATED) && mucOptions.autoPushConfiguration()) { | 						if (codes.contains(MucOptions.STATUS_CODE_ROOM_CREATED) && mucOptions.autoPushConfiguration()) { | ||||||
| 							Log.d(Config.LOGTAG,mucOptions.getAccount().getJid().toBareJid() | 							Log.d(Config.LOGTAG,mucOptions.getAccount().getJid().toBareJid() | ||||||
| @ -131,6 +129,10 @@ public class PresenceParser extends AbstractParser implements | |||||||
| 						Log.d(Config.LOGTAG, "unknown error in conference: " + packet); | 						Log.d(Config.LOGTAG, "unknown error in conference: " + packet); | ||||||
| 					} | 					} | ||||||
| 				} else if (!from.isBareJid()){ | 				} else if (!from.isBareJid()){ | ||||||
|  | 					Element item = x.findChild("item"); | ||||||
|  | 					if (item != null) { | ||||||
|  | 						mucOptions.updateUser(parseItem(conversation, item, from)); | ||||||
|  | 					} | ||||||
| 					MucOptions.User user = mucOptions.deleteUser(from); | 					MucOptions.User user = mucOptions.deleteUser(from); | ||||||
| 					if (user != null) { | 					if (user != null) { | ||||||
| 						mXmppConnectionService.getAvatarService().clear(user); | 						mXmppConnectionService.getAvatarService().clear(user); | ||||||
|  | |||||||
| @ -2127,7 +2127,7 @@ public class XmppConnectionService extends Service { | |||||||
| 						if ("item".equals(child.getName())) { | 						if ("item".equals(child.getName())) { | ||||||
| 							MucOptions.User user = AbstractParser.parseItem(conversation,child); | 							MucOptions.User user = AbstractParser.parseItem(conversation,child); | ||||||
| 							if (!user.realJidMatchesAccount()) { | 							if (!user.realJidMatchesAccount()) { | ||||||
| 								conversation.getMucOptions().addUser(user); | 								conversation.getMucOptions().updateUser(user); | ||||||
| 							} | 							} | ||||||
| 						} | 						} | ||||||
| 					} | 					} | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Daniel Gultsch
						Daniel Gultsch