static void jabber_nick_cb(JabberStream *js, const char *from, PurpleXmlNode *items) { /* it doesn't make sense to have more than one item here, so let's just pick the first one */ PurpleXmlNode *item = purple_xmlnode_get_child(items, "item"); JabberBuddy *buddy = jabber_buddy_find(js, from, FALSE); PurpleXmlNode *nick; char *nickname = NULL; /* ignore the nick of people not on our buddy list */ if (!buddy || !item) return; nick = purple_xmlnode_get_child_with_namespace(item, "nick", "http://jabber.org/protocol/nick"); if (!nick) return; nickname = purple_xmlnode_get_data(nick); purple_serv_got_alias(js->gc, from, nickname); g_free(nickname); }
static void do_nick_got_own_nick_cb(JabberStream *js, const char *from, PurpleXmlNode *items) { char *oldnickname = NULL; PurpleXmlNode *item = NULL; if (items) item = purple_xmlnode_get_child(items,"item"); if(item) { PurpleXmlNode *nick = purple_xmlnode_get_child_with_namespace(item,"nick","http://jabber.org/protocol/nick"); if(nick) oldnickname = purple_xmlnode_get_data(nick); } purple_request_input(js->gc, _("Set User Nickname"), _("Please specify a new nickname for you."), _("This information is visible to all contacts on your contact list, so choose something appropriate."), oldnickname, FALSE, FALSE, NULL, _("Set"), PURPLE_CALLBACK(do_nick_set), _("Cancel"), NULL, purple_request_cpar_from_connection(js->gc), js); g_free(oldnickname); }
static void jabber_mood_cb(JabberStream *js, const char *from, PurpleXmlNode *items) { /* it doesn't make sense to have more than one item here, so let's just pick the first one */ PurpleXmlNode *item = purple_xmlnode_get_child(items, "item"); const char *newmood = NULL; char *moodtext = NULL; JabberBuddy *buddy = jabber_buddy_find(js, from, FALSE); PurpleXmlNode *moodinfo, *mood; /* ignore the mood of people not on our buddy list */ if (!buddy || !item) return; mood = purple_xmlnode_get_child_with_namespace(item, "mood", "http://jabber.org/protocol/mood"); if (!mood) return; for (moodinfo = mood->child; moodinfo; moodinfo = moodinfo->next) { if (moodinfo->type == PURPLE_XMLNODE_TYPE_TAG) { if (!strcmp(moodinfo->name, "text")) { if (!moodtext) /* only pick the first one */ moodtext = purple_xmlnode_get_data(moodinfo); } else { const PurpleMood *target_mood; /* verify that the mood is known (valid) */ target_mood = find_mood_by_name(moodinfo->name); newmood = target_mood ? target_mood->mood : NULL; } } if (newmood != NULL && moodtext != NULL) break; } if (newmood != NULL) { purple_prpl_got_user_status(purple_connection_get_account(js->gc), from, "mood", PURPLE_MOOD_NAME, newmood, PURPLE_MOOD_COMMENT, moodtext, NULL); } else { purple_prpl_got_user_status_deactive(purple_connection_get_account(js->gc), from, "mood"); } g_free(moodtext); }
PurpleXmlNode* purple_xmlnode_get_child(const PurpleXmlNode *parent, const char *name) { return purple_xmlnode_get_child_with_namespace(parent, name, NULL); }