- if ([presence_.from isEqual: connection.JID]) {
- [ui client: self
- didChangePresence: presence_];
- OF_SETTER(presence, presence_, YES, 0);
+ XMPPPresence *presence;
+
+ if ([status isEqual: @"unavailable"])
+ presence = [XMPPPresence presenceWithType: @"unavailable"];
+ else
+ presence = [XMPPPresence presence];
+
+ if (!([status isEqual: @"available"] ||
+ [status isEqual: @"unavailable"]))
+ presence.show = status;
+
+ if (text != nil)
+ presence.status = text;
+
+ OFXMLElement *caps = [OFXMLElement elementWithName: @"c"
+ namespace: XMPP_NS_CAPS];
+ [caps addAttributeWithName: @"hash"
+ stringValue: @"sha-1"];
+ [caps addAttributeWithName: @"ver"
+ stringValue: [_discoEntity capsHash]];
+ [caps addAttributeWithName: @"node"
+ stringValue: JUB_CLIENT_URI];
+
+ [presence addChild: caps];
+
+ [_connection sendStanza: presence];
+}
+
+- (void)connection: (XMPPConnection*)connection
+ wasBoundToJID: (XMPPJID*)jid
+{
+ [_roster requestRoster];
+}
+
+- (void)connection: (XMPPConnection*)connection
+ didReceivePresence: (XMPPPresence*)presence
+{
+ if ([presence.from isEqual: connection.JID]) {
+ [_ui client: self
+ didChangePresence: presence];
+ OF_SETTER(_presence, presence, true, 0);