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