@@ -31,11 +31,11 @@ { self = [super init]; @try { connection = [conn retain]; - groups = [[OFMutableDictionary alloc] init]; + rosterItems = [[OFMutableDictionary alloc] init]; } @catch (id e) { [self release]; @throw e; } @@ -49,60 +49,27 @@ [super dealloc]; } - (void)XMPP_addRosterItem: (XMPPRosterItem*)rosterItem { - if ([[rosterItem groups] count] > 0) { - OFEnumerator *enumerator; - OFString *group; - - enumerator = [[rosterItem groups] objectEnumerator]; - while ((group = [enumerator nextObject]) != nil) { - OFMutableArray *rosterGroup = - [groups objectForKey: group]; - - if (rosterGroup == nil) { - rosterGroup = [OFMutableArray array]; - [groups setObject: rosterGroup - forKey: group]; - } - - [rosterGroup addObject: rosterItem]; - } - } else { - OFMutableArray *rosterGroup = [groups objectForKey: @""]; - - if (rosterGroup == nil) { - rosterGroup = [OFMutableArray array]; - [groups setObject: rosterGroup - forKey: @""]; - } - - [rosterGroup addObject: rosterItem]; - } -} - -- (OFArray*)groups -{ - OFMutableArray *ret = [OFMutableArray array]; - OFEnumerator *enumerator; - OFString *group; - - enumerator = [groups keyEnumerator]; - while ((group = [enumerator nextObject]) != nil) - [ret addObject: group]; - - ret->isa = [OFArray class]; - return ret; -} - -- (OFArray*)rosterItemsInGroup: (OFString*)group -{ - if (group == nil) - group = @""; - - return [[[groups objectForKey: group] copy] autorelease]; + return [self XMPP_updateRosterItem: rosterItem]; +} + +- (void)XMPP_updateRosterItem: (XMPPRosterItem*)rosterItem +{ + [rosterItems setObject: rosterItem + forKey: [[rosterItem JID] bareJID]]; +} + +- (void)XMPP_deleteRosterItem: (XMPPRosterItem*)rosterItem +{ + [rosterItems removeObjectForKey: [[rosterItem JID] bareJID]]; +} + +- (OFDictionary*)rosterItems +{ + return [[rosterItems copy] autorelease]; } - (void)addRosterItem: (XMPPRosterItem*)rosterItem { [self updateRosterItem: rosterItem];