aboutsummaryrefslogtreecommitdiffstats
path: root/irc.c
diff options
context:
space:
mode:
authorWilmer van der Gaast <wilmer@gaast.net>2010-07-19 00:50:27 +0100
committerWilmer van der Gaast <wilmer@gaast.net>2010-07-19 00:50:27 +0100
commit6d8cc053c4b247ad721a0760b13cd383d758c2c5 (patch)
treed51e026a88583e877787dc22f5231e028e335a7e /irc.c
parent94d5da9cc78a89b6292d53c7784a3076500d67e2 (diff)
Adding easy migration from old show_offline/away_devoice settings, and
documentation.
Diffstat (limited to 'irc.c')
-rw-r--r--irc.c34
1 files changed, 24 insertions, 10 deletions
diff --git a/irc.c b/irc.c
index 2093fa5b..1d2b729c 100644
--- a/irc.c
+++ b/irc.c
@@ -32,6 +32,7 @@ GSList *irc_connection_list;
static gboolean irc_userping( gpointer _irc, gint fd, b_input_condition cond );
static char *set_eval_charset( set_t *set, char *value );
static char *set_eval_password( set_t *set, char *value );
+static char *set_eval_bw_compat( set_t *set, char *value );
irc_t *irc_new( int fd )
{
@@ -100,7 +101,7 @@ irc_t *irc_new( int fd )
b->ui = &irc_ui_funcs;
s = set_add( &b->set, "allow_takeover", "true", set_eval_bool, irc );
- s = set_add( &b->set, "away_devoice", "true", set_eval_away_devoice, irc );
+ s = set_add( &b->set, "away_devoice", "true", set_eval_bw_compat, irc );
s = set_add( &b->set, "away_reply_timeout", "3600", set_eval_int, irc );
s = set_add( &b->set, "charset", "utf-8", set_eval_charset, irc );
s = set_add( &b->set, "default_target", "root", NULL, irc );
@@ -120,6 +121,7 @@ irc_t *irc_new( int fd )
s = set_add( &b->set, "private", "true", set_eval_bool, irc );
s = set_add( &b->set, "query_order", "lifo", NULL, irc );
s = set_add( &b->set, "root_nick", ROOT_NICK, set_eval_root_nick, irc );
+ s = set_add( &b->set, "show_offline", "false", set_eval_bw_compat, irc );
s = set_add( &b->set, "simulate_netsplit", "true", set_eval_bool, irc );
s = set_add( &b->set, "timezone", "local", set_eval_timezone, irc );
s = set_add( &b->set, "to_char", ": ", set_eval_to_char, irc );
@@ -900,19 +902,31 @@ static char *set_eval_charset( set_t *set, char *value )
return value;
}
-char *set_eval_away_devoice( set_t *set, char *value )
+/* Mostly meant for upgrades. If one of these is set to the non-default,
+ set show_users of all channels to something with the same effect. */
+static char *set_eval_bw_compat( set_t *set, char *value )
{
irc_t *irc = set->data;
+ char *val;
+ GSList *l;
- if( !is_bool( value ) )
- return SET_INVALID;
+ irc_usermsg( irc, "Setting `%s' is obsolete, use the `show_users' "
+ "channel setting instead.", set->key );
- /* 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 );
+ if( strcmp( set->key, "away_devoice" ) == 0 && !bool2int( value ) )
+ val = "online,away";
+ else if( strcmp( set->key, "show_offline" ) == 0 && bool2int( value ) )
+ val = "online@,away+,offline";
+ else
+ return SET_INVALID;
- bee_irc_channel_update( irc, NULL, NULL );
+ for( l = irc->channels; l; l = l->next )
+ {
+ irc_channel_t *ic = l->data;
+ /* No need to check channel type, if the setting doesn't exist it
+ will just be ignored. */
+ set_setstr( &ic->set, "show_users", val );
+ }
- return value;
+ return SET_INVALID;
}