diff --git a/configure.ac b/configure.ac index eec9665..1a5c1b8 100644 --- a/configure.ac +++ b/configure.ac @@ -59,6 +59,6 @@ dnl and add OBJCPPA.FLAGS to CPPFLAGS, thus we need to AC_SUBST these ourself AC_SUBST(CPP) AC_SUBST(CPPFLAGS) -AC_SUBST(PACKAGE, ObjFW) +AC_SUBST(PACKAGE, ObjXMPP) AC_CONFIG_FILES([buildsys.mk extra.mk]) AC_OUTPUT diff --git a/src/XMPPRoster.h b/src/XMPPRoster.h index faa8632..4e2cf99 100644 --- a/src/XMPPRoster.h +++ b/src/XMPPRoster.h @@ -28,13 +28,14 @@ @interface XMPPRoster: OFObject { XMPPConnection *connection; - OFMutableDictionary *groups; + OFMutableDictionary *rosterItems; } - initWithConnection: (XMPPConnection*)conn; - (void)XMPP_addRosterItem: (XMPPRosterItem*)rosterItem; -- (OFArray*)groups; -- (OFArray*)rosterItemsInGroup: (OFString*)group; +- (void)XMPP_updateRosterItem: (XMPPRosterItem*)rosterItem; +- (void)XMPP_deleteRosterItem: (XMPPRosterItem*)rosterItem; +- (OFDictionary*)rosterItems; - (void)addRosterItem: (XMPPRosterItem*)rosterItem; - (void)updateRosterItem: (XMPPRosterItem*)rosterItem; - (void)deleteRosterItem: (XMPPRosterItem*)rosterItem; diff --git a/src/XMPPRoster.m b/src/XMPPRoster.m index 57795bd..8d0ace0 100644 --- a/src/XMPPRoster.m +++ b/src/XMPPRoster.m @@ -33,7 +33,7 @@ @try { connection = [conn retain]; - groups = [[OFMutableDictionary alloc] init]; + rosterItems = [[OFMutableDictionary alloc] init]; } @catch (id e) { [self release]; @throw e; @@ -51,56 +51,23 @@ - (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]; - } + return [self XMPP_updateRosterItem: rosterItem]; } -- (OFArray*)groups +- (void)XMPP_updateRosterItem: (XMPPRosterItem*)rosterItem { - 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; + [rosterItems setObject: rosterItem + forKey: [[rosterItem JID] bareJID]]; } -- (OFArray*)rosterItemsInGroup: (OFString*)group +- (void)XMPP_deleteRosterItem: (XMPPRosterItem*)rosterItem { - if (group == nil) - group = @""; + [rosterItems removeObjectForKey: [[rosterItem JID] bareJID]]; +} - return [[[groups objectForKey: group] copy] autorelease]; +- (OFDictionary*)rosterItems +{ + return [[rosterItems copy] autorelease]; } - (void)addRosterItem: (XMPPRosterItem*)rosterItem diff --git a/tests/test.m b/tests/test.m index cb74ea7..1c7dc10 100644 --- a/tests/test.m +++ b/tests/test.m @@ -126,14 +126,8 @@ OF_APPLICATION_DELEGATE(AppDelegate) - (void)connectionDidReceiveRoster :(XMPPConnection*)conn { XMPPPresence *pres; - OFEnumerator *enumerator; - OFString *group; - of_log(@"Got roster! Groups: %@", [[conn roster] groups]); - enumerator = [[[conn roster] groups] objectEnumerator]; - while ((group = [enumerator nextObject]) != nil) - of_log(@"Group %@: %@", group, - [[conn roster] rosterItemsInGroup: group]); + of_log(@"Got roster: %@", [[conn roster] rosterItems]); pres = [XMPPPresence presence]; [pres addPriority: 10];