Changeset 94d5da9c for irc_channel.c


Ignore:
Timestamp:
2010-07-18T22:12:19Z (9 years ago)
Author:
Wilmer van der Gaast <wilmer@…>
Branches:
master
Children:
6d8cc05
Parents:
4f22a68
Message:

One of the last few things I wanted to get done in this branch: combining
show_offline and away_devoice and possibly other ideas into one setting
called show_users. Documentation will come soon. :-P

File:
1 edited

Legend:

Unmodified
Added
Removed
  • irc_channel.c

    r4f22a68 r94d5da9c  
    536536static char *set_eval_by_group( set_t *set, char *value );
    537537static char *set_eval_by_protocol( set_t *set, char *value );
     538static char *set_eval_show_users( set_t *set, char *value );
    538539
    539540static gboolean control_channel_init( irc_channel_t *ic )
     
    545546        set_add( &ic->set, "group", NULL, set_eval_by_group, ic );
    546547        set_add( &ic->set, "protocol", NULL, set_eval_by_protocol, ic );
     548        set_add( &ic->set, "show_users", "online+,away", set_eval_show_users, ic );
    547549       
    548550        ic->data = icc = g_new0( struct irc_control_channel, 1 );
    549551        icc->type = IRC_CC_TYPE_DEFAULT;
     552       
     553        /* Have to run the evaluator to initialize icc->modes. */
     554        set_setstr( &ic->set, "show_users", set_getstr( &ic->set, "show_users" ) );
    550555       
    551556        return TRUE;
     
    625630}
    626631
     632static char *set_eval_show_users( set_t *set, char *value )
     633{
     634        struct irc_channel *ic = set->data;
     635        struct irc_control_channel *icc = ic->data;
     636        char **parts = g_strsplit( value, ",", 0 ), **part;
     637        char modes[4];
     638       
     639        memset( modes, 0, 4 );
     640        for( part = parts; *part; part ++ )
     641        {
     642                char last, modechar = IRC_CHANNEL_USER_NONE;
     643               
     644                if( **part == '\0' )
     645                        goto fail;
     646               
     647                last = (*part)[strlen(*part+1)];
     648                if( last == '+' )
     649                        modechar = IRC_CHANNEL_USER_VOICE;
     650                else if( last == '%' )
     651                        modechar = IRC_CHANNEL_USER_HALFOP;
     652                else if( last == '@' )
     653                        modechar = IRC_CHANNEL_USER_OP;
     654               
     655                if( strncmp( *part, "offline", 7 ) == 0 )
     656                        modes[0] = modechar;
     657                else if( strncmp( *part, "away", 4 ) == 0 )
     658                        modes[1] = modechar;
     659                else if( strncmp( *part, "online", 6 ) == 0 )
     660                        modes[2] = modechar;
     661                else
     662                        goto fail;
     663        }
     664        memcpy( icc->modes, modes, 4 );
     665        bee_irc_channel_update( ic->irc, ic, NULL );
     666       
     667        g_strfreev( parts );
     668        return value;
     669       
     670fail:
     671        g_strfreev( parts );
     672        return SET_INVALID;     
     673}
     674
    627675static gboolean control_channel_free( irc_channel_t *ic )
    628676{
Note: See TracChangeset for help on using the changeset viewer.