Mercurial > pidgin
changeset 26909:2a95e8bd9b80
Parse the invite message out of the pending membership list so that it can
be presented to the user when someone adds us to their buddy list.
author | Elliott Sales de Andrade <qulogic@pidgin.im> |
---|---|
date | Tue, 19 May 2009 03:16:45 +0000 |
parents | 16255111b180 |
children | 9ffd12823dc1 |
files | libpurple/protocols/msn/contact.c libpurple/protocols/msn/user.c libpurple/protocols/msn/user.h libpurple/protocols/msn/userlist.c |
diffstat | 4 files changed, 68 insertions(+), 20 deletions(-) [+] |
line wrap: on
line diff
--- a/libpurple/protocols/msn/contact.c Mon May 18 23:14:46 2009 +0000 +++ b/libpurple/protocols/msn/contact.c Tue May 19 03:16:45 2009 +0000 @@ -357,29 +357,36 @@ MsnUser *user = msn_userlist_find_add_user(session->userlist, passport, NULL); xmlnode *annotation; guint nid = MSN_NETWORK_UNKNOWN; + char *invite = NULL; - /* For EmailMembers, the network must be found in the annotations. */ - if (!strcmp(node, "PassportName")) { + for (annotation = xmlnode_get_child(member, "Annotations/Annotation"); + annotation; + annotation = xmlnode_get_next_twin(annotation)) { + char *name = xmlnode_get_data(xmlnode_get_child(annotation, "Name")); + char *value = xmlnode_get_data(xmlnode_get_child(annotation, "Value")); + if (name && value) { + if (!strcmp(name, "MSN.IM.BuddyType")) { + nid = strtoul(value, NULL, 10); + } + else if (!strcmp(name, "MSN.IM.InviteMessage")) { + invite = value; + value = NULL; + } + } + g_free(name); + g_free(value); + } + + /* For EmailMembers, the network must be found in the annotations, above. + Otherwise, PassportMembers are on the Passport network. */ + if (!strcmp(node, "PassportName")) nid = MSN_NETWORK_PASSPORT; - } else { - for (annotation = xmlnode_get_child(member, "Annotations/Annotation"); - annotation; - annotation = xmlnode_get_next_twin(annotation)) { - char *name = xmlnode_get_data(xmlnode_get_child(annotation, "Name")); - if (name && !strcmp(name, "MSN.IM.BuddyType")) { - char *value = xmlnode_get_data(xmlnode_get_child(annotation, "Value")); - if (value != NULL) - nid = strtoul(value, NULL, 10); - g_free(value); - } - g_free(name); - } - } purple_debug_info("msn", "CL: %s name: %s, Type: %s, MembershipID: %s, NetworkID: %u\n", node, passport, type, member_id == NULL ? "(null)" : member_id, nid); msn_user_set_network(user, nid); + msn_user_set_invite_message(user, invite); if (member_id) { user->membership_id[list] = atoi(member_id); @@ -390,6 +397,7 @@ g_free(passport); g_free(type); g_free(member_id); + g_free(invite); } static void
--- a/libpurple/protocols/msn/user.c Mon May 18 23:14:46 2009 +0000 +++ b/libpurple/protocols/msn/user.c Tue May 19 03:16:45 2009 +0000 @@ -74,6 +74,7 @@ g_free(user->media.title); g_free(user->media.album); g_free(user->statusline); + g_free(user->invite_message); g_free(user); } @@ -426,6 +427,15 @@ user->clientcaps = info; } +void +msn_user_set_invite_message(MsnUser *user, const char *message) +{ + g_return_if_fail(user != NULL); + + g_free(user->invite_message); + user->invite_message = g_strdup(message); +} + const char * msn_user_get_passport(const MsnUser *user) { @@ -489,3 +499,12 @@ return user->clientcaps; } + +const char * +msn_user_get_invite_message(const MsnUser *user) +{ + g_return_val_if_fail(user != NULL, NULL); + + return user->invite_message; +} +
--- a/libpurple/protocols/msn/user.h Mon May 18 23:14:46 2009 +0000 +++ b/libpurple/protocols/msn/user.h Tue May 19 03:16:45 2009 +0000 @@ -105,6 +105,8 @@ guint membership_id[5]; /**< The membershipId sent by the contacts server, indexed by the list it belongs to */ + + char *invite_message; /**< Invite message of user request */ }; /************************************************************************** @@ -290,6 +292,14 @@ */ void msn_user_set_client_caps(MsnUser *user, GHashTable *info); +/** + * Sets the invite message for a user. + * + * @param user The user. + * @param message The invite message for a user. + */ +void msn_user_set_invite_message(MsnUser *user, const char *message); + /** * Returns the passport account for a user. @@ -373,6 +383,15 @@ GHashTable *msn_user_get_client_caps(const MsnUser *user); /** + * Returns the invite message for a user. + * + * @param user The user. + * + * @return The user's invite message. + */ +const char *msn_user_get_invite_message(const MsnUser *user); + +/** * check to see if user is online */ gboolean
--- a/libpurple/protocols/msn/userlist.c Mon May 18 23:14:46 2009 +0000 +++ b/libpurple/protocols/msn/userlist.c Tue May 19 03:16:45 2009 +0000 @@ -86,7 +86,7 @@ } static void -got_new_entry(PurpleConnection *gc, const char *passport, const char *friendly) +got_new_entry(PurpleConnection *gc, const char *passport, const char *friendly, const char *message) { PurpleAccount *acct; MsnPermitAdd *pa; @@ -97,7 +97,7 @@ pa->gc = gc; acct = purple_connection_get_account(gc); - purple_account_request_authorization(acct, passport, NULL, friendly, NULL, + purple_account_request_authorization(acct, passport, NULL, friendly, message, purple_find_buddy(acct, passport) != NULL, msn_accept_add_cb, msn_cancel_add_cb, pa); @@ -150,12 +150,14 @@ PurpleAccount *account; const char *passport; const char *store; + const char *message; account = session->account; gc = purple_account_get_connection(account); passport = msn_user_get_passport(user); store = msn_user_get_friendly_name(user); + message = msn_user_get_invite_message(user); msn_user_set_op(user, list_op); @@ -199,13 +201,13 @@ if (!(list_op & (MSN_LIST_AL_OP | MSN_LIST_BL_OP))) { -/* got_new_entry(gc, passport, store); */ +/* got_new_entry(gc, passport, store, NULL); */ } } if (list_op & MSN_LIST_PL_OP) { - got_new_entry(gc, passport, store); + got_new_entry(gc, passport, store, message); } }