Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • protocols/msn/msn_util.c

    re3413cc r70ac477  
    5151}
    5252
    53 int msn_buddy_list_add( struct im_connection *ic, char *list, char *who, char *realname_ )
     53int msn_buddy_list_add( struct im_connection *ic, const char *list, const char *who, const char *realname_, const char *group )
    5454{
    5555        struct msn_data *md = ic->proto_data;
    56         char buf[1024], *realname;
     56        char buf[1024], *realname, groupid[8];
     57       
     58        *groupid = '\0';
     59        if( group )
     60        {
     61                int i;
     62                for( i = 0; i < md->groupcount; i ++ )
     63                        if( g_strcasecmp( md->grouplist[i], group ) == 0 )
     64                        {
     65                                g_snprintf( groupid, sizeof( groupid ), " %d", i );
     66                                break;
     67                        }
     68               
     69                if( *groupid == '\0' )
     70                {
     71                        /* Have to create this group, it doesn't exist yet. */
     72                        struct msn_groupadd *ga;
     73                        GSList *l;
     74                       
     75                        for( l = md->grpq; l; l = l->next )
     76                        {
     77                                ga = l->data;
     78                                if( g_strcasecmp( ga->group, group ) == 0 )
     79                                        break;
     80                        }
     81                       
     82                        ga = g_new0( struct msn_groupadd, 1 );
     83                        ga->who = g_strdup( who );
     84                        ga->group = g_strdup( group );
     85                        md->grpq = g_slist_prepend( md->grpq, ga );
     86                       
     87                        if( l == NULL )
     88                        {
     89                                char *groupname = msn_http_encode( group );
     90                                g_snprintf( buf, sizeof( buf ), "ADG %d %s %d\r\n", ++md->trId, groupname, 0 );
     91                                g_free( groupname );
     92                                return msn_write( ic, buf, strlen( buf ) );
     93                        }
     94                        else
     95                        {
     96                                /* This can happen if the user's doing lots of adds to a
     97                                   new group at once; we're still waiting for the server
     98                                   to confirm group creation. */
     99                                return 1;
     100                        }
     101                }
     102        }
    57103       
    58104        realname = msn_http_encode( realname_ );
    59        
    60         g_snprintf( buf, sizeof( buf ), "ADD %d %s %s %s\r\n", ++md->trId, list, who, realname );
    61         if( msn_write( ic, buf, strlen( buf ) ) )
    62         {
    63                 g_free( realname );
    64                
    65                 return( 1 );
    66         }
    67        
     105        g_snprintf( buf, sizeof( buf ), "ADD %d %s %s %s%s\r\n", ++md->trId, list, who, realname, groupid );
    68106        g_free( realname );
    69107       
    70         return( 0 );
     108        return msn_write( ic, buf, strlen( buf ) );
    71109}
    72110
     
    94132        struct msn_buddy_ask_data *bla = data;
    95133       
    96         msn_buddy_list_add( bla->ic, "AL", bla->handle, bla->realname );
    97        
    98         if( imcb_find_buddy( bla->ic, bla->handle ) == NULL )
    99                 imcb_ask_add( bla->ic, bla->handle, NULL );
     134        msn_buddy_list_add( bla->ic, "AL", bla->handle, bla->realname, NULL );
     135       
     136        imcb_ask_add( bla->ic, bla->handle, NULL );
    100137       
    101138        g_free( bla->handle );
     
    108145        struct msn_buddy_ask_data *bla = data;
    109146       
    110         msn_buddy_list_add( bla->ic, "BL", bla->handle, bla->realname );
     147        msn_buddy_list_add( bla->ic, "BL", bla->handle, bla->realname, NULL );
    111148       
    112149        g_free( bla->handle );
Note: See TracChangeset for help on using the changeset viewer.