Пример #1
0
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);
}
Пример #2
0
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);
}
Пример #3
0
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);
}
Пример #4
0
PurpleXmlNode*
purple_xmlnode_get_child(const PurpleXmlNode *parent, const char *name)
{
    return purple_xmlnode_get_child_with_namespace(parent, name, NULL);
}