diff --git a/src/XMPPRoster.h b/src/XMPPRoster.h index 53f7cbd..0bfdd51 100644 --- a/src/XMPPRoster.h +++ b/src/XMPPRoster.h @@ -35,4 +35,6 @@ - (OFArray*)groups; - (OFArray*)rosterItemsInGroup: (OFString*)group; - (void)addRosterItem: (XMPPRosterItem*)rosterItem; +- (void)updateRosterItem: (XMPPRosterItem*)rosterItem; +- (void)deleteRosterItem: (XMPPRosterItem*)rosterItem; @end diff --git a/src/XMPPRoster.m b/src/XMPPRoster.m index 26a3905..282e4d8 100644 --- a/src/XMPPRoster.m +++ b/src/XMPPRoster.m @@ -98,6 +98,11 @@ } - (void)addRosterItem: (XMPPRosterItem*)rosterItem +{ + [self updateRosterItem: rosterItem]; +} + +- (void)updateRosterItem: (XMPPRosterItem*)rosterItem { XMPPIQ *iq = [XMPPIQ IQWithType: @"set" ID: [connection generateStanzaID]]; @@ -122,4 +127,24 @@ [connection sendStanza: iq]; } + +- (void)deleteRosterItem: (XMPPRosterItem*)rosterItem +{ + XMPPIQ *iq = [XMPPIQ IQWithType: @"set" + ID: [connection generateStanzaID]]; + OFXMLElement *query = [OFXMLElement elementWithName: @"query" + namespace: XMPP_NS_ROSTER]; + OFXMLElement *item = [OFXMLElement elementWithName: @"item" + namespace: XMPP_NS_ROSTER]; + + [item addAttributeWithName: @"jid" + stringValue: rosterItem.JID.bareJID]; + [item addAttributeWithName: @"subscription" + stringValue: @"remove"]; + + [query addChild: item]; + [iq addChild: query]; + + [connection sendStanza: iq]; +} @end diff --git a/src/XMPPRosterItem.m b/src/XMPPRosterItem.m index ee84e84..80ba6c1 100644 --- a/src/XMPPRosterItem.m +++ b/src/XMPPRosterItem.m @@ -30,6 +30,23 @@ return [[[self alloc] init] autorelease]; } +- copy +{ + XMPPRosterItem *new = [[XMPPRosterItem alloc] init]; + + @try { + new->JID = [JID copy]; + new->name = [name copy]; + new->subscription = [subscription copy]; + new->groups = [groups copy]; + } @catch (id e) { + [new release]; + @throw e; + } + + return new; +} + - (OFString*)description { return [OFString stringWithFormat: @"