Mercurial > pidgin
comparison libpurple/protocols/msn/contact.c @ 26217:de48f984f6e7
For federated buddies, we should set <Member>/<Type> to Email, and use an
<Email> node instead of <PassportName>. Along with that, we shouldn't set
any <Annotations> to specify it's a federated buddy either, since the MSN
server will complain about it.
Fixes #7939.
author | Elliott Sales de Andrade <qulogic@pidgin.im> |
---|---|
date | Thu, 26 Mar 2009 05:29:18 +0000 |
parents | c729cdeb88c8 |
children | f2f4fbbb9006 |
comparison
equal
deleted
inserted
replaced
26213:1b2d418c26ff | 26217:de48f984f6e7 |
---|---|
1480 void | 1480 void |
1481 msn_del_contact_from_list(MsnSession *session, MsnCallbackState *state, | 1481 msn_del_contact_from_list(MsnSession *session, MsnCallbackState *state, |
1482 const gchar *passport, const MsnListId list) | 1482 const gchar *passport, const MsnListId list) |
1483 { | 1483 { |
1484 gchar *body = NULL, *member = NULL; | 1484 gchar *body = NULL, *member = NULL; |
1485 const char *type = "PassportMember"; | |
1486 gchar *federate = NULL; | |
1487 MsnSoapPartnerScenario partner_scenario; | 1485 MsnSoapPartnerScenario partner_scenario; |
1488 MsnUser *user; | 1486 MsnUser *user; |
1489 | 1487 |
1490 g_return_if_fail(session != NULL); | 1488 g_return_if_fail(session != NULL); |
1491 g_return_if_fail(session->userlist != NULL); | 1489 g_return_if_fail(session->userlist != NULL); |
1499 } | 1497 } |
1500 msn_callback_state_set_list_id(state, list); | 1498 msn_callback_state_set_list_id(state, list); |
1501 msn_callback_state_set_who(state, passport); | 1499 msn_callback_state_set_who(state, passport); |
1502 | 1500 |
1503 user = msn_userlist_find_user(session->userlist, passport); | 1501 user = msn_userlist_find_user(session->userlist, passport); |
1504 if (user && user->networkid != MSN_NETWORK_PASSPORT) { | |
1505 type = "EmailMember"; | |
1506 federate = g_strdup_printf(MSN_MEMBER_FEDERATED_ANNOTATION_XML, | |
1507 user->networkid); | |
1508 } | |
1509 | 1502 |
1510 if (list == MSN_LIST_PL) { | 1503 if (list == MSN_LIST_PL) { |
1511 partner_scenario = MSN_PS_CONTACT_API; | 1504 partner_scenario = MSN_PS_CONTACT_API; |
1512 member = g_strdup_printf(MSN_MEMBER_MEMBERSHIPID_XML, | 1505 if (user && user->networkid != MSN_NETWORK_PASSPORT) |
1513 type, user->membership_id[MSN_LIST_PL], | 1506 member = g_strdup_printf(MSN_MEMBER_MEMBERSHIPID_XML, |
1514 federate ? federate : ""); | 1507 "EmailMember", "Email", |
1508 user->membership_id[MSN_LIST_PL]); | |
1509 else | |
1510 member = g_strdup_printf(MSN_MEMBER_MEMBERSHIPID_XML, | |
1511 "PassportMember", "Passport", | |
1512 user->membership_id[MSN_LIST_PL]); | |
1515 } else { | 1513 } else { |
1516 /* list == MSN_LIST_AL || list == MSN_LIST_BL */ | 1514 /* list == MSN_LIST_AL || list == MSN_LIST_BL */ |
1517 partner_scenario = MSN_PS_BLOCK_UNBLOCK; | 1515 partner_scenario = MSN_PS_BLOCK_UNBLOCK; |
1518 member = g_strdup_printf(MSN_MEMBER_PASSPORT_XML, | 1516 if (user && user->networkid != MSN_NETWORK_PASSPORT) |
1519 type, passport, | 1517 member = g_strdup_printf(MSN_MEMBER_PASSPORT_XML, |
1520 federate ? federate : ""); | 1518 "EmailMember", "Email", |
1519 "Email", passport, "Email"); | |
1520 else | |
1521 member = g_strdup_printf(MSN_MEMBER_PASSPORT_XML, | |
1522 "PassportMember", "Passport", | |
1523 "PassportName", passport, "PassportName"); | |
1521 } | 1524 } |
1522 | 1525 |
1523 body = g_strdup_printf(MSN_CONTACT_DELETE_FROM_LIST_TEMPLATE, | 1526 body = g_strdup_printf(MSN_CONTACT_DELETE_FROM_LIST_TEMPLATE, |
1524 MsnSoapPartnerScenarioText[partner_scenario], | 1527 MsnSoapPartnerScenarioText[partner_scenario], |
1525 MsnMemberRole[list], member); | 1528 MsnMemberRole[list], member); |
1528 state->post_action = MSN_DELETE_MEMBER_FROM_LIST_SOAP_ACTION; | 1531 state->post_action = MSN_DELETE_MEMBER_FROM_LIST_SOAP_ACTION; |
1529 state->post_url = MSN_SHARE_POST_URL; | 1532 state->post_url = MSN_SHARE_POST_URL; |
1530 state->cb = msn_del_contact_from_list_read_cb; | 1533 state->cb = msn_del_contact_from_list_read_cb; |
1531 msn_contact_request(state); | 1534 msn_contact_request(state); |
1532 | 1535 |
1533 g_free(federate); | |
1534 g_free(member); | 1536 g_free(member); |
1535 g_free(body); | 1537 g_free(body); |
1536 } | 1538 } |
1537 | 1539 |
1538 static void | 1540 static void |
1576 void | 1578 void |
1577 msn_add_contact_to_list(MsnSession *session, MsnCallbackState *state, | 1579 msn_add_contact_to_list(MsnSession *session, MsnCallbackState *state, |
1578 const gchar *passport, const MsnListId list) | 1580 const gchar *passport, const MsnListId list) |
1579 { | 1581 { |
1580 gchar *body = NULL, *member = NULL; | 1582 gchar *body = NULL, *member = NULL; |
1581 const char *type = "PassportMember"; | |
1582 gchar *federate = NULL; | |
1583 MsnSoapPartnerScenario partner_scenario; | 1583 MsnSoapPartnerScenario partner_scenario; |
1584 MsnUser *user; | 1584 MsnUser *user; |
1585 | 1585 |
1586 g_return_if_fail(session != NULL); | 1586 g_return_if_fail(session != NULL); |
1587 g_return_if_fail(passport != NULL); | 1587 g_return_if_fail(passport != NULL); |
1594 } | 1594 } |
1595 msn_callback_state_set_list_id(state, list); | 1595 msn_callback_state_set_list_id(state, list); |
1596 msn_callback_state_set_who(state, passport); | 1596 msn_callback_state_set_who(state, passport); |
1597 | 1597 |
1598 user = msn_userlist_find_user(session->userlist, passport); | 1598 user = msn_userlist_find_user(session->userlist, passport); |
1599 if (user && user->networkid != MSN_NETWORK_PASSPORT) { | |
1600 type = "EmailMember"; | |
1601 federate = g_strdup_printf(MSN_MEMBER_FEDERATED_ANNOTATION_XML, | |
1602 user->networkid); | |
1603 } | |
1604 | 1599 |
1605 partner_scenario = (list == MSN_LIST_RL) ? MSN_PS_CONTACT_API : MSN_PS_BLOCK_UNBLOCK; | 1600 partner_scenario = (list == MSN_LIST_RL) ? MSN_PS_CONTACT_API : MSN_PS_BLOCK_UNBLOCK; |
1606 member = g_strdup_printf(MSN_MEMBER_PASSPORT_XML, | 1601 if (user && user->networkid != MSN_NETWORK_PASSPORT) |
1607 type, state->who, federate ? federate : ""); | 1602 member = g_strdup_printf(MSN_MEMBER_PASSPORT_XML, |
1603 "EmailMember", "Email", | |
1604 "Email", state->who, "Email"); | |
1605 else | |
1606 member = g_strdup_printf(MSN_MEMBER_PASSPORT_XML, | |
1607 "PassportMember", "Passport", | |
1608 "PassportName", state->who, "PassportName"); | |
1608 | 1609 |
1609 body = g_strdup_printf(MSN_CONTACT_ADD_TO_LIST_TEMPLATE, | 1610 body = g_strdup_printf(MSN_CONTACT_ADD_TO_LIST_TEMPLATE, |
1610 MsnSoapPartnerScenarioText[partner_scenario], | 1611 MsnSoapPartnerScenarioText[partner_scenario], |
1611 MsnMemberRole[list], member); | 1612 MsnMemberRole[list], member); |
1612 | 1613 |
1614 state->post_action = MSN_ADD_MEMBER_TO_LIST_SOAP_ACTION; | 1615 state->post_action = MSN_ADD_MEMBER_TO_LIST_SOAP_ACTION; |
1615 state->post_url = MSN_SHARE_POST_URL; | 1616 state->post_url = MSN_SHARE_POST_URL; |
1616 state->cb = msn_add_contact_to_list_read_cb; | 1617 state->cb = msn_add_contact_to_list_read_cb; |
1617 msn_contact_request(state); | 1618 msn_contact_request(state); |
1618 | 1619 |
1619 g_free(federate); | |
1620 g_free(member); | 1620 g_free(member); |
1621 g_free(body); | 1621 g_free(body); |
1622 } | 1622 } |
1623 | 1623 |
1624 #if 0 | 1624 #if 0 |