Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • protocols/nogaim.c

    rf6c963b rc9c7ca7  
    289289{
    290290        irc_t *irc = ic->irc;
    291         user_t *t, *u = irc->users;
     291        user_t *t, *u;
    292292        account_t *a;
    293293       
     
    306306        b_event_remove( ic->inpa );
    307307       
     308        u = irc->users;
    308309        while( u )
    309310        {
     
    428429{
    429430        user_t *u = user_findhandle( ic, handle );
    430         char *s, newnick[MAX_NICK_LENGTH+1];
    431431       
    432432        if( !u || !realname ) return;
     
    440440                if( ( ic->flags & OPT_LOGGED_IN ) && set_getbool( &ic->irc->set, "display_namechanges" ) )
    441441                        imcb_log( ic, "User `%s' changed name to `%s'", u->nick, u->realname );
    442                
    443                 if( !u->online && !nick_saved( ic->acc, handle ) )
    444                 {
    445                         /* Detect numeric handles: */
    446                         for( s = u->user; isdigit( *s ); s++ );
     442        }
     443}
     444
     445void imcb_remove_buddy( struct im_connection *ic, char *handle, char *group )
     446{
     447        user_t *u;
     448       
     449        if( ( u = user_findhandle( ic, handle ) ) )
     450                user_del( ic->irc, u->nick );
     451}
     452
     453/* Mainly meant for ICQ (and now also for Jabber conferences) to allow IM
     454   modules to suggest a nickname for a handle. */
     455void imcb_buddy_nick_hint( struct im_connection *ic, char *handle, char *nick )
     456{
     457        user_t *u = user_findhandle( ic, handle );
     458        char newnick[MAX_NICK_LENGTH+1], *orig_nick;
     459       
     460        if( u && !u->online && !nick_saved( ic->acc, handle ) )
     461        {
     462                /* Only do this if the person isn't online yet (which should
     463                   be the case if we just added it) and if the user hasn't
     464                   assigned a nickname to this buddy already. */
     465               
     466                strncpy( newnick, nick, MAX_NICK_LENGTH );
     467                newnick[MAX_NICK_LENGTH] = 0;
     468               
     469                /* Some processing to make sure this string is a valid IRC nickname. */
     470                nick_strip( newnick );
     471                if( set_getbool( &ic->irc->set, "lcnicks" ) )
     472                        nick_lc( newnick );
     473               
     474                if( strcmp( u->nick, newnick ) != 0 )
     475                {
     476                        /* Only do this if newnick is different from the current one.
     477                           If rejoining a channel, maybe we got this nick already
     478                           (and dedupe would only add an underscore. */
     479                        nick_dedupe( ic->acc, handle, newnick );
    447480                       
    448                         if( *s == 0 )
    449                         {
    450                                 /* If we reached the end of the string, it only contained numbers.
    451                                    Seems to be an ICQ# then, so hopefully realname contains
    452                                    something more useful. */
    453                                 strcpy( newnick, realname );
    454                                
    455                                 /* Some processing to make sure this string is a valid IRC nickname. */
    456                                 nick_strip( newnick );
    457                                 if( set_getbool( &ic->irc->set, "lcnicks" ) )
    458                                         nick_lc( newnick );
    459                                
    460                                 u->nick = g_strdup( newnick );
    461                         }
    462                 }
    463         }
    464 }
    465 
     481                        /* u->nick will be freed halfway the process, so it can't be
     482                           passed as an argument. */
     483                        orig_nick = g_strdup( u->nick );
     484                        user_rename( ic->irc, orig_nick, newnick );
     485                        g_free( orig_nick );
     486                }
     487        }
     488}
    466489
    467490/* prpl.c */
     
    554577                u->online = 0;
    555578               
    556                 /* Remove him/her from the conversations to prevent PART messages after he/she QUIT already */
    557                 for( c = ic->conversations; c; c = c->next )
     579                /* Remove him/her from the groupchats to prevent PART messages after he/she QUIT already */
     580                for( c = ic->groupchats; c; c = c->next )
    558581                        remove_chat_buddy_silent( c, (char*) handle );
    559582        }
     
    685708}
    686709
    687 void imcb_chat_removed( struct groupchat *c )
     710void imcb_chat_free( struct groupchat *c )
    688711{
    689712        struct im_connection *ic = c->ic;
    690         struct groupchat *l = NULL;
     713        struct groupchat *l;
    691714        GList *ir;
    692715       
     
    708731                }
    709732               
     733                /* Find the previous chat in the linked list. */
     734                for( l = ic->groupchats; l && l->next != c; l = l->next );
     735               
    710736                if( l )
    711737                        l->next = c->next;
    712738                else
    713                         ic->conversations = c->next;
     739                        ic->groupchats = c->next;
    714740               
    715741                for( ir = c->in_room; ir; ir = ir->next )
     
    749775        /* This one just creates the conversation structure, user won't see anything yet */
    750776       
    751         if( ic->conversations )
    752         {
    753                 for( c = ic->conversations; c->next; c = c->next );
     777        if( ic->groupchats )
     778        {
     779                for( c = ic->groupchats; c->next; c = c->next );
    754780                c = c->next = g_new0( struct groupchat, 1 );
    755781        }
    756782        else
    757                 ic->conversations = c = g_new0( struct groupchat, 1 );
     783                ic->groupchats = c = g_new0( struct groupchat, 1 );
    758784       
    759785        c->ic = ic;
     
    804830}
    805831
     832/* This function is one BIG hack... :-( EREWRITE */
    806833void imcb_chat_remove_buddy( struct groupchat *b, char *handle, char *reason )
    807834{
     
    815842        if( g_strcasecmp( handle, b->ic->acc->user ) == 0 )
    816843        {
     844                if( b->joined == 0 )
     845                        return;
     846               
    817847                u = user_find( b->ic->irc, b->ic->irc->nick );
    818848                b->joined = 0;
     
    824854        }
    825855       
    826         if( remove_chat_buddy_silent( b, handle ) )
    827                 if( ( b->joined || me ) && u )
    828                         irc_part( b->ic->irc, u, b->channel );
     856        if( me || ( remove_chat_buddy_silent( b, handle ) && b->joined && u ) )
     857                irc_part( b->ic->irc, u, b->channel );
    829858}
    830859
     
    852881
    853882/* Misc. BitlBee stuff which shouldn't really be here */
    854 
    855 struct groupchat *chat_by_channel( char *channel )
    856 {
    857         struct im_connection *ic;
    858         struct groupchat *c;
    859         GSList *l;
    860        
    861         /* This finds the connection which has a conversation which belongs to this channel */
    862         for( l = connections; l; l = l->next )
    863         {
    864                 ic = l->data;
    865                 for( c = ic->conversations; c && g_strcasecmp( c->channel, channel ) != 0; c = c->next );
    866                 if( c )
    867                         return c;
    868         }
    869        
    870         return NULL;
    871 }
    872883
    873884char *set_eval_away_devoice( set_t *set, char *value )
Note: See TracChangeset for help on using the changeset viewer.