diff options
| author | Wilmer van der Gaast <wilmer@gaast.net> | 2010-06-07 16:21:21 +0100 | 
|---|---|---|
| committer | Wilmer van der Gaast <wilmer@gaast.net> | 2010-06-07 16:21:21 +0100 | 
| commit | 0e8b3e855dfa370fe559729224b3bff1d4cf5b87 (patch) | |
| tree | b8764360a0ecced7d65655221102a232f4d42a28 | |
| parent | 56699f009a608ecff3a247a08b3d0105a5e17153 (diff) | |
Changing away_devoice will change current voice statuses in all channels.
| -rw-r--r-- | irc.c | 19 | ||||
| -rw-r--r-- | irc_im.c | 2 | ||||
| -rw-r--r-- | protocols/nogaim.c | 59 | 
3 files changed, 20 insertions, 60 deletions
| @@ -99,7 +99,7 @@ irc_t *irc_new( int fd )  	b->ui_data = irc;  	b->ui = &irc_ui_funcs; -	s = set_add( &b->set, "away_devoice", "true", NULL/*set_eval_away_devoice*/, irc ); +	s = set_add( &b->set, "away_devoice", "true", set_eval_away_devoice, irc );  	s = set_add( &b->set, "charset", "utf-8", set_eval_charset, irc );  	s = set_add( &b->set, "default_target", "root", NULL, irc );  	s = set_add( &b->set, "display_namechanges", "false", set_eval_bool, irc ); @@ -818,3 +818,20 @@ static char *set_eval_charset( set_t *set, char *value )  	return value;  } + +char *set_eval_away_devoice( set_t *set, char *value ) +{ +	irc_t *irc = set->data; +	 +	if( !is_bool( value ) ) +		return SET_INVALID; +	 +	/* The usual problem: The setting isn't actually changed at this +	   point and we need it to be, so do it by hand. */ +	g_free( set->value ); +	set->value = g_strdup( value ); +	 +	bee_irc_channel_update( irc, NULL, NULL ); +	 +	return value; +} @@ -168,6 +168,8 @@ void bee_irc_channel_update( irc_t *irc, irc_channel_t *ic, irc_user_t *iu )  		if( set_getbool( &irc->b->set, "away_devoice" ) )  			irc_channel_user_set_mode( ic, iu, ( iu->bu->flags & BEE_USER_AWAY ) ?  			                           0 : IRC_CHANNEL_USER_VOICE ); +		else +			irc_channel_user_set_mode( ic, iu, 0 );  	}  } diff --git a/protocols/nogaim.c b/protocols/nogaim.c index be85b8ba..499e4d1d 100644 --- a/protocols/nogaim.c +++ b/protocols/nogaim.c @@ -536,65 +536,6 @@ struct bee_user *imcb_buddy_by_handle( struct im_connection *ic, const char *han  	return bee_user_by_handle( ic->bee, ic, handle );  } - -/* Misc. BitlBee stuff which shouldn't really be here */ -#if 0 -char *set_eval_away_devoice( set_t *set, char *value ) -{ -	irc_t *irc = set->data; -	int st; -	 -	if( !is_bool( value ) ) -		return SET_INVALID; -	 -	st = bool2int( value ); -	 -	/* Horror.... */ -	 -	if( st != set_getbool( &irc->b->set, "away_devoice" ) ) -	{ -		char list[80] = ""; -		user_t *u = irc->users; -		int i = 0, count = 0; -		char pm; -		char v[80]; -		 -		if( st ) -			pm = '+'; -		else -			pm = '-'; -		 -		while( u ) -		{ -			if( u->ic && u->online && !u->away ) -			{ -				if( ( strlen( list ) + strlen( u->nick ) ) >= 79 ) -				{ -					for( i = 0; i < count; v[i++] = 'v' ); v[i] = 0; -					irc_write( irc, ":%s MODE %s %c%s%s", -					           irc->myhost, -		        			   irc->channel, pm, v, list ); -					 -					*list = 0; -					count = 0; -				} -				 -				sprintf( list + strlen( list ), " %s", u->nick ); -				count ++; -			} -			u = u->next; -		} -		 -		/* $v = 'v' x $i */ -		for( i = 0; i < count; v[i++] = 'v' ); v[i] = 0; -		irc_write( irc, ":%s MODE %s %c%s%s", irc->myhost, -		                                            irc->channel, pm, v, list ); -	} -	 -	return value; -} -#endif -  /* The plan is to not allow straight calls to prpl functions anymore, but do     them all from some wrappers. We'll start to define some down here: */ | 
