diff options
-rw-r--r-- | root_commands.c | 41 |
1 files changed, 24 insertions, 17 deletions
diff --git a/root_commands.c b/root_commands.c index 8770e707..68561a17 100644 --- a/root_commands.c +++ b/root_commands.c @@ -259,8 +259,9 @@ static void cmd_showset( irc_t *irc, set_t **head, char *key ) } typedef set_t** (*cmd_set_findhead)( irc_t*, char* ); +typedef int (*cmd_set_checkflags)( irc_t*, set_t *set ); -static int cmd_set_real( irc_t *irc, char **cmd, cmd_set_findhead findhead ) +static int cmd_set_real( irc_t *irc, char **cmd, cmd_set_findhead findhead, cmd_set_checkflags checkflags ) { char *set_full = NULL, *set_name = NULL, *tmp; set_t **head; @@ -307,20 +308,8 @@ static int cmd_set_real( irc_t *irc, char **cmd, cmd_set_findhead findhead ) set_t *s = set_find( head, set_name ); int st; - /* - FIXME: Make these work again. Probably a gross hack. - - if( a->ic && s && s->flags & ACC_SET_OFFLINE_ONLY ) - { - irc_usermsg( irc, "This setting can only be changed when the account is %s-line", "off" ); - return 0; - } - else if( !a->ic && s && s->flags & ACC_SET_ONLINE_ONLY ) - { - irc_usermsg( irc, "This setting can only be changed when the account is %s-line", "on" ); + if( checkflags && checkflags( irc, s ) == 0 ) return 0; - } - */ if( g_strncasecmp( cmd[1], "-del", 4 ) == 0 ) st = set_reset( head, set_name ); @@ -366,6 +355,24 @@ static set_t **cmd_account_set_findhead( irc_t *irc, char *id ) return NULL; } +static int cmd_account_set_checkflags( irc_t *irc, set_t *s ) +{ + account_t *a = s->data; + + if( a->ic && s && s->flags & ACC_SET_OFFLINE_ONLY ) + { + irc_usermsg( irc, "This setting can only be changed when the account is %s-line", "off" ); + return 0; + } + else if( !a->ic && s && s->flags & ACC_SET_ONLINE_ONLY ) + { + irc_usermsg( irc, "This setting can only be changed when the account is %s-line", "on" ); + return 0; + } + + return 1; +} + static void cmd_account( irc_t *irc, char **cmd ) { account_t *a; @@ -534,7 +541,7 @@ static void cmd_account( irc_t *irc, char **cmd ) { MIN_ARGS( 2 ); - cmd_set_real( irc, cmd + 1, cmd_account_set_findhead ); + cmd_set_real( irc, cmd + 1, cmd_account_set_findhead, cmd_account_set_checkflags ); } else { @@ -868,7 +875,7 @@ static void cmd_yesno( irc_t *irc, char **cmd ) static void cmd_set( irc_t *irc, char **cmd ) { - cmd_set_real( irc, cmd, NULL ); + cmd_set_real( irc, cmd, NULL, NULL ); } static void cmd_save( irc_t *irc, char **cmd ) @@ -1065,7 +1072,7 @@ static void cmd_chat( irc_t *irc, char **cmd ) } else if( g_strcasecmp( cmd[1], "set" ) == 0 ) { - cmd_set_real( irc, cmd + 1, cmd_chat_set_findhead ); + cmd_set_real( irc, cmd + 1, cmd_chat_set_findhead, NULL ); } else if( g_strcasecmp( cmd[1], "del" ) == 0 ) { |