mirror of
https://codeberg.org/Mercury-IM/Smack
synced 2024-11-30 02:02:06 +01:00
only fire roster listener if entry changed (SMACK-312)
git-svn-id: http://svn.igniterealtime.org/svn/repos/smack/trunk@11827 b35dd754-fafc-0310-a699-88a17e54d16e
This commit is contained in:
parent
a5693609b2
commit
e3962d15ae
2 changed files with 51 additions and 4 deletions
|
@ -852,11 +852,13 @@ public class Roster {
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
// If the entry was in then list then update its state with the new values
|
// If the entry was in then list then update its state with the new values
|
||||||
entries.put(item.getUser(), entry);
|
RosterEntry oldEntry = entries.put(item.getUser(), entry);
|
||||||
|
|
||||||
// Keep note that an entry has been updated
|
// Keep note that an entry has been updated but only if it's different
|
||||||
|
if (oldEntry == null || !oldEntry.equalsDeep(entry)) {
|
||||||
updatedEntries.add(item.getUser());
|
updatedEntries.add(item.getUser());
|
||||||
}
|
}
|
||||||
|
}
|
||||||
// If the roster entry belongs to any groups, remove it from the
|
// If the roster entry belongs to any groups, remove it from the
|
||||||
// list of unfiled entries.
|
// list of unfiled entries.
|
||||||
if (!item.getGroupNames().isEmpty()) {
|
if (!item.getGroupNames().isEmpty()) {
|
||||||
|
|
|
@ -181,6 +181,50 @@ public class RosterEntry {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Indicates whether some other object is "equal to" this by comparing all members.
|
||||||
|
* <p>
|
||||||
|
* The {@link #equals(Object)} method returns <code>true</code> if the user JIDs are equal.
|
||||||
|
*
|
||||||
|
* @param obj the reference object with which to compare.
|
||||||
|
* @return <code>true</code> if this object is the same as the obj argument; <code>false</code>
|
||||||
|
* otherwise.
|
||||||
|
*/
|
||||||
|
public boolean equalsDeep(Object obj) {
|
||||||
|
if (this == obj)
|
||||||
|
return true;
|
||||||
|
if (obj == null)
|
||||||
|
return false;
|
||||||
|
if (getClass() != obj.getClass())
|
||||||
|
return false;
|
||||||
|
RosterEntry other = (RosterEntry) obj;
|
||||||
|
if (name == null) {
|
||||||
|
if (other.name != null)
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
else if (!name.equals(other.name))
|
||||||
|
return false;
|
||||||
|
if (status == null) {
|
||||||
|
if (other.status != null)
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
else if (!status.equals(other.status))
|
||||||
|
return false;
|
||||||
|
if (type == null) {
|
||||||
|
if (other.type != null)
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
else if (!type.equals(other.type))
|
||||||
|
return false;
|
||||||
|
if (user == null) {
|
||||||
|
if (other.user != null)
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
else if (!user.equals(other.user))
|
||||||
|
return false;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
static RosterPacket.Item toRosterItem(RosterEntry entry) {
|
static RosterPacket.Item toRosterItem(RosterEntry entry) {
|
||||||
RosterPacket.Item item = new RosterPacket.Item(entry.getUser(), entry.getName());
|
RosterPacket.Item item = new RosterPacket.Item(entry.getUser(), entry.getName());
|
||||||
item.setItemType(entry.getType());
|
item.setItemType(entry.getType());
|
||||||
|
@ -191,4 +235,5 @@ public class RosterEntry {
|
||||||
}
|
}
|
||||||
return item;
|
return item;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
Loading…
Reference in a new issue