Changeset ff27648


Ignore:
Timestamp:
2010-08-15T00:05:49Z (9 years ago)
Author:
Wilmer van der Gaast <wilmer@…>
Branches:
master
Children:
5a7af1b
Parents:
d97f51b
Message:

Read group info.

Location:
protocols/msn
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • protocols/msn/msn.c

    rd97f51b rff27648  
    107107                msn_msgq_purge( ic, &md->msgq );
    108108               
    109                 while( md->groupcount > 0 )
    110                         g_free( md->grouplist[--md->groupcount] );
    111                 g_free( md->grouplist );
    112109                g_free( md->tokens[0] );
    113110                g_free( md->tokens[1] );
    114111                g_free( md->tokens[2] );
    115112                g_free( md->lock_key );
     113               
     114                while( md->groups )
     115                {
     116                        struct msn_group *mg = md->groups->data;
     117                        g_free( mg->id );
     118                        g_free( mg->name );
     119                        g_free( mg );
     120                        md->groups = g_slist_remove( md->groups, mg );
     121                }
    116122               
    117123                g_tree_destroy( md->domaintree );
  • protocols/msn/msn.h

    rd97f51b rff27648  
    9191        int sb_failures;
    9292        time_t first_sb_failure;
    93         GSList *filetransfers;
    9493       
    9594        const struct msn_away_state *away_state;
    96         int buddycount;
    97         int groupcount;
    98         char **grouplist;
     95        GSList *groups;
    9996        GTree *domaintree;
    10097};
     
    173170        char *cid;
    174171        msn_buddy_flags_t flags;
     172};
     173
     174struct msn_group
     175{
     176        char *name;
     177        char *id;
    175178};
    176179
     
    211214char *msn_p11_challenge( char *challenge );
    212215gint msn_domaintree_cmp( gconstpointer a_, gconstpointer b_ );
     216struct msn_group *msn_group_by_name( struct im_connection *ic, const char *name );
     217struct msn_group *msn_group_by_id( struct im_connection *ic, const char *id );
    213218
    214219/* tables.c */
  • protocols/msn/msn_util.c

    rd97f51b rff27648  
    566566        return ret;
    567567}
     568
     569struct msn_group *msn_group_by_name( struct im_connection *ic, const char *name )
     570{
     571        struct msn_data *md = ic->proto_data;
     572        GSList *l;
     573       
     574        for( l = md->groups; l; l = l->next )
     575        {
     576                struct msn_group *mg = l->data;
     577               
     578                if( g_strcasecmp( mg->name, name ) == 0 )
     579                        return mg;
     580        }
     581       
     582        return NULL;
     583}
     584
     585struct msn_group *msn_group_by_id( struct im_connection *ic, const char *id )
     586{
     587        struct msn_data *md = ic->proto_data;
     588        GSList *l;
     589       
     590        for( l = md->groups; l; l = l->next )
     591        {
     592                struct msn_group *mg = l->data;
     593               
     594                if( g_strcasecmp( mg->id, id ) == 0 )
     595                        return mg;
     596        }
     597       
     598        return NULL;
     599}
  • protocols/msn/soap.c

    rd97f51b rff27648  
    632632        char *id = NULL, *name = NULL;
    633633        struct msn_soap_req_data *soap_req = data;
     634        struct msn_data *md = soap_req->ic->proto_data;
    634635       
    635636        if( ( p = xt_find_path( node, "../groupId" ) ) )
     
    638639        if( ( p = xt_find_node( node->children, "name" ) ) )
    639640                name = p->text;
     641       
     642        if( id && name )
     643        {
     644                struct msn_group *mg = g_new0( struct msn_group, 1 );
     645                mg->id = g_strdup( id );
     646                mg->name = g_strdup( name );
     647                md->groups = g_slist_prepend( md->groups, mg );
     648        }
    640649       
    641650        printf( "%s %s\n", id, name );
     
    649658        struct msn_buddy_data *bd;
    650659        struct xt_node *p;
    651         char *id = NULL, *type = NULL, *handle = NULL, *display_name = NULL;
     660        char *id = NULL, *type = NULL, *handle = NULL,
     661             *display_name = NULL, *group_id = NULL;
    652662        struct msn_soap_req_data *soap_req = data;
    653663        struct im_connection *ic = soap_req->ic;
     664        struct msn_group *group;
    654665       
    655666        if( ( p = xt_find_path( node, "../contactId" ) ) )
     
    661672        if( ( p = xt_find_node( node->children, "displayName" ) ) )
    662673                display_name = p->text;
     674        if( ( p = xt_find_path( node, "groupIds/guid" ) ) )
     675                group_id = p->text;
    663676       
    664677        if( type && g_strcasecmp( type, "me" ) == 0 )
     
    685698        imcb_rename_buddy( ic, handle, display_name );
    686699       
     700        if( group_id && ( group = msn_group_by_id( ic, group_id ) ) )
     701                imcb_add_buddy( ic, handle, group->name );
     702       
    687703        printf( "%s %s %s %s\n", id, type, handle, display_name );
    688704       
Note: See TracChangeset for help on using the changeset viewer.