Without this fix people that are in several groups they only appear in the first group and not in all groups: Search for Guido and you see the changes
Class Roster.as
methods:
private function fetchRoster_result( resultIQ:IQ ):Void
{
// Clear out the old roster
rosterItems.removeAll();
// Go through the result IQ and add each item
var ext:RosterExtension = resultIQ.getAllExtensionsByNS( RosterExtension.NS )[0];
var newItems = ext.getAllItems();
for( var i=0; i < newItems.length; i++ ) {
var item = newItems+;
//if a user is in several groups, add it as item for each group. fix by Guido
for( var j=0; j < item.getGroups().length; j++){
addRosterItem( item.jid, item.name, RosterExtension.SHOW_UNAVAILABLE, “Offline”, item.getGroups()[j], item.subscription.toLowerCase() );
}
}
}
private function handlePresence( aPresence:Presence ):Void
{
// Handle based on the type of the presence received
switch( aPresence.type.toLowerCase() )
{
case Presence.SUBSCRIBE_TYPE:
var eventObj:Object = {target:this, type:“subscriptionRequest”, jid:aPresence.from};
dispatchEvent( eventObj );
break;
case Presence.UNSUBSCRIBED_TYPE:
var eventObj:Object = ;
dispatchEvent( eventObj );
break;
case Presence.UNAVAILABLE_TYPE:
var eventObj:Object = ;
dispatchEvent( eventObj );
var l = rosterItems.getLength !== undefined ? rosterItems.getLength() : rosterItems.length;
for( var i = 0; i < l; i++ ) {
var r = rosterItems.getItemAt( i );
if( r.jid.toLowerCase() == aPresence.from.split("/")[0].toLowerCase() ) {
r.show = RosterExtension.SHOW_UNAVAILABLE;
rosterItems.replaceItemAt( i, r );
break;
}
}
break;
// AVAILABLE is the default type, so undefined is also possible
case Presence.AVAILABLE_TYPE:
case undefined:
var eventObj:Object = ;
dispatchEvent( eventObj );
// Change the item on the roster
var l = rosterItems.getLength !== undefined ? rosterItems.getLength() : rosterItems.length;
for( var i = 0; i < l; i++ ) {
if( rosterItems.getItemAt( i ).jid.toLowerCase() == aPresence.from.split("/")[0].toLowerCase() ) {
updateRosterItemPresence( i, aPresence );
trace("roster item: "+rosterItems.getItemAt( i ).jid.toLowerCase());
//removed break, because if user is in several groups only one item gets updated. Bug fix by guido
//break;
}
}
break;
}
}