Mercurial > pidgin.yaz
comparison libpurple/protocols/msn/notification.c @ 20447:18ecdee88ed0
Add Pending list to recognized lists during contact list parsing
Don't try pushing Reverse or Pending lists to notification server
Improvements to detecting Yahoo users so Passports with @yahoo.com addresses
will work better. Fixes #1331
author | Stu Tomlinson <stu@nosnilmot.com> |
---|---|
date | Mon, 28 May 2007 16:12:25 +0000 |
parents | 9e585c2dbf07 |
children | 4403cecc7cd6 |
comparison
equal
deleted
inserted
replaced
20446:9e585c2dbf07 | 20447:18ecdee88ed0 |
---|---|
38 * Local Function Prototype | 38 * Local Function Prototype |
39 ****************************************************************************/ | 39 ****************************************************************************/ |
40 | 40 |
41 static void msn_notification_fqy_yahoo(MsnSession *session, const char *passport); | 41 static void msn_notification_fqy_yahoo(MsnSession *session, const char *passport); |
42 static void msn_notification_post_adl(MsnCmdProc *cmdproc, const char *payload, int payload_len); | 42 static void msn_notification_post_adl(MsnCmdProc *cmdproc, const char *payload, int payload_len); |
43 static void msn_add_contact_xml(xmlnode *mlNode, const char *passport, int list_op, MsnUserType type); | 43 static void msn_add_contact_xml(MsnSession *session, xmlnode *mlNode, const char *passport, int list_op, MsnUserType type); |
44 | 44 |
45 /************************************************************************** | 45 /************************************************************************** |
46 * Main | 46 * Main |
47 **************************************************************************/ | 47 **************************************************************************/ |
48 | 48 |
582 | 582 |
583 /************************************************************************** | 583 /************************************************************************** |
584 * Buddy Lists | 584 * Buddy Lists |
585 **************************************************************************/ | 585 **************************************************************************/ |
586 /* add contact to xmlnode */ | 586 /* add contact to xmlnode */ |
587 static void | 587 static void |
588 msn_add_contact_xml(xmlnode *mlNode,const char *passport,int list_op, MsnUserType type) | 588 msn_add_contact_xml(MsnSession *session, xmlnode *mlNode,const char *passport,int list_op, MsnUserType type) |
589 { | 589 { |
590 xmlnode *d_node,*c_node; | 590 xmlnode *d_node,*c_node; |
591 char **tokens; | 591 char **tokens; |
592 char *email,*domain; | 592 char *email,*domain; |
593 char *list_op_str,*type_str; | 593 char *list_op_str,*type_str; |
594 | 594 |
595 purple_debug_info("MaYuan","passport:%s\n",passport); | 595 purple_debug_info("MaYuan","passport:%s type: %d\n",passport, type); |
596 tokens = g_strsplit(passport, "@", 2); | 596 tokens = g_strsplit(passport, "@", 2); |
597 email = tokens[0]; | 597 email = tokens[0]; |
598 domain = tokens[1]; | 598 domain = tokens[1]; |
599 | 599 |
600 /*find a domain Node*/ | 600 /*find a domain Node*/ |
625 | 625 |
626 list_op_str = g_strdup_printf("%d",list_op); | 626 list_op_str = g_strdup_printf("%d",list_op); |
627 purple_debug_info("MaYuan","list_op:%d\n",list_op); | 627 purple_debug_info("MaYuan","list_op:%d\n",list_op); |
628 xmlnode_set_attrib(c_node,"l",list_op_str); | 628 xmlnode_set_attrib(c_node,"l",list_op_str); |
629 g_free(list_op_str); | 629 g_free(list_op_str); |
630 #if 0 | 630 |
631 type_str = g_strdup_printf("%d",type); | 631 if (type != MSN_USER_TYPE_UNKNOWN) { |
632 xmlnode_set_attrib(c_node,"t",type_str); | 632 type_str = g_strdup_printf("%d", type); |
633 #else | 633 } else { |
634 if(g_strrstr(domain,"yahoo") != NULL){ | 634 if (msn_user_is_yahoo(session->account, passport)) |
635 type_str = g_strdup_printf("%d", MSN_USER_TYPE_YAHOO); | 635 type_str = g_strdup_printf("%d", MSN_USER_TYPE_YAHOO); |
636 }else{ | 636 else |
637 /*passport*/ | 637 type_str = g_strdup_printf("%d", MSN_USER_TYPE_PASSPORT); |
638 type_str = g_strdup_printf("%d", MSN_USER_TYPE_PASSPORT); | |
639 } | 638 } |
640 /*mobile*/ | 639 /*mobile*/ |
641 //type_str = g_strdup_printf("4"); | 640 //type_str = g_strdup_printf("4"); |
642 xmlnode_set_attrib(c_node,"t",type_str); | 641 xmlnode_set_attrib(c_node,"t",type_str); |
643 g_free(type_str); | 642 g_free(type_str); |
644 #endif | 643 |
645 xmlnode_insert_child(d_node, c_node); | 644 xmlnode_insert_child(d_node, c_node); |
646 | 645 |
647 g_strfreev(tokens); | 646 g_strfreev(tokens); |
648 } | 647 } |
649 | 648 |
675 xmlnode_set_attrib(adl_node, "l", "1"); | 674 xmlnode_set_attrib(adl_node, "l", "1"); |
676 | 675 |
677 /*get the userlist*/ | 676 /*get the userlist*/ |
678 for (l = session->userlist->users; l != NULL; l = l->next){ | 677 for (l = session->userlist->users; l != NULL; l = l->next){ |
679 user = l->data; | 678 user = l->data; |
680 msn_add_contact_xml(adl_node, user->passport, | 679 |
680 /* skip RL & PL during initial dump */ | |
681 if (!(user->list_op & MSN_LIST_OP_MASK)) | |
682 continue; | |
683 | |
684 msn_add_contact_xml(session, adl_node, user->passport, | |
681 user->list_op & MSN_LIST_OP_MASK, user->type); | 685 user->list_op & MSN_LIST_OP_MASK, user->type); |
682 | 686 |
683 /* each ADL command may contain up to 150 contacts */ | 687 /* each ADL command may contain up to 150 contacts */ |
684 if (++adl_count % 150 == 0 || l->next == NULL) { | 688 if (++adl_count % 150 == 0 || l->next == NULL) { |
685 payload = xmlnode_to_str(adl_node,&payload_len); | 689 payload = xmlnode_to_str(adl_node,&payload_len); |
1861 cmdproc = notification->servconn->cmdproc; | 1865 cmdproc = notification->servconn->cmdproc; |
1862 | 1866 |
1863 adl_node = xmlnode_new("ml"); | 1867 adl_node = xmlnode_new("ml"); |
1864 adl_node->child = NULL; | 1868 adl_node->child = NULL; |
1865 | 1869 |
1866 msn_add_contact_xml(adl_node,who,1,MSN_USER_TYPE_PASSPORT); | 1870 msn_add_contact_xml(notification->session,adl_node,who,1,MSN_USER_TYPE_PASSPORT); |
1867 | 1871 |
1868 payload = xmlnode_to_str(adl_node,&payload_len); | 1872 payload = xmlnode_to_str(adl_node,&payload_len); |
1869 xmlnode_free(adl_node); | 1873 xmlnode_free(adl_node); |
1870 if (msn_user_is_yahoo(notification->session->account,who)) | 1874 if (msn_user_is_yahoo(notification->session->account,who)) |
1871 { | 1875 { |
1891 cmdproc = notification->servconn->cmdproc; | 1895 cmdproc = notification->servconn->cmdproc; |
1892 | 1896 |
1893 rml_node = xmlnode_new("ml"); | 1897 rml_node = xmlnode_new("ml"); |
1894 rml_node->child = NULL; | 1898 rml_node->child = NULL; |
1895 | 1899 |
1896 msn_add_contact_xml(rml_node,who,1,MSN_USER_TYPE_PASSPORT); | 1900 msn_add_contact_xml(notification->session,rml_node,who,1,MSN_USER_TYPE_PASSPORT); |
1897 | 1901 |
1898 payload = xmlnode_to_str(rml_node,&payload_len); | 1902 payload = xmlnode_to_str(rml_node,&payload_len); |
1899 xmlnode_free(rml_node); | 1903 xmlnode_free(rml_node); |
1900 | 1904 |
1901 purple_debug_info("MaYuan","RML{%s}\n",payload); | 1905 purple_debug_info("MaYuan","RML{%s}\n",payload); |