Changeset e907683 for root_commands.c


Ignore:
Timestamp:
2010-06-26T23:39:31Z (9 years ago)
Author:
Wilmer van der Gaast <wilmer@…>
Branches:
master
Children:
84c3a72
Parents:
92c8d41
Message:

Changed account set (and other account commands) syntax. Instead of
"account set acc/key value" you now do "account acc set key value". So just
the regular set syntax with a "account acc" prefix. The slash has been a
source of confusion for long enough now.

For consistency, commands like "account on acc" should now also be
"account acc on" instead. Same for the new "channel" comand, of course.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • root_commands.c

    r92c8d41 re907683  
    241241typedef int (*cmd_set_checkflags)( irc_t*, set_t *set );
    242242
    243 static int cmd_set_real( irc_t *irc, char **cmd, cmd_set_findhead findhead, cmd_set_checkflags checkflags )
    244 {
    245         char *set_full = NULL, *set_name = NULL, *tmp;
    246         set_t **head;
     243static int cmd_set_real( irc_t *irc, char **cmd, set_t **head, cmd_set_checkflags checkflags )
     244{
     245        char *set_name = NULL, *value = NULL;
     246        gboolean del = FALSE;
    247247       
    248248        if( cmd[1] && g_strncasecmp( cmd[1], "-del", 4 ) == 0 )
    249249        {
    250250                MIN_ARGS( 2, 0 );
    251                 set_full = cmd[2];
    252         }
    253         else
    254                 set_full = cmd[1];
    255        
    256         if( findhead == NULL )
    257         {
    258                 set_name = set_full;
    259                
    260                 head = &irc->b->set;
    261         }
    262         else
    263         {
    264                 char *id;
    265                
    266                 if( ( tmp = strchr( set_full, '/' ) ) )
    267                 {
    268                         id = g_strndup( set_full, ( tmp - set_full ) );
    269                         set_name = tmp + 1;
    270                 }
    271                 else
    272                 {
    273                         id = g_strdup( set_full );
    274                 }
    275                
    276                 if( ( head = findhead( irc, id ) ) == NULL )
    277                 {
    278                         g_free( id );
    279                         irc_usermsg( irc, "Could not find setting." );
    280                         return 0;
    281                 }
    282                 g_free( id );
    283         }
    284        
    285         if( cmd[1] && cmd[2] && set_name )
     251                set_name = cmd[2];
     252                del = TRUE;
     253        }
     254        else
     255        {
     256                set_name = cmd[1];
     257                value = cmd[2];
     258        }
     259       
     260        if( set_name && ( value || del ) )
    286261        {
    287262                set_t *s = set_find( head, set_name );
     
    291266                        return 0;
    292267               
    293                 if( g_strncasecmp( cmd[1], "-del", 4 ) == 0 )
     268                if( del )
    294269                        st = set_reset( head, set_name );
    295270                else
    296                         st = set_setstr( head, set_name, cmd[2] );
     271                        st = set_setstr( head, set_name, value );
    297272               
    298273                if( set_getstr( head, set_name ) == NULL )
    299274                {
     275                        /* This happens when changing the passwd, for example.
     276                           Showing these msgs instead gives slightly clearer
     277                           feedback. */
    300278                        if( st )
    301279                                irc_usermsg( irc, "Setting changed successfully" );
     
    325303}
    326304
    327 static set_t **cmd_account_set_findhead( irc_t *irc, char *id )
    328 {
    329         account_t *a;
    330        
    331         if( ( a = account_get( irc->b, id ) ) )
    332                 return &a->set;
    333         else
    334                 return NULL;
    335 }
    336 
    337305static int cmd_account_set_checkflags( irc_t *irc, set_t *s )
    338306{
     
    386354               
    387355                irc_usermsg( irc, "Account successfully added" );
    388         }
    389         else if( g_strcasecmp( cmd[1], "del" ) == 0 )
    390         {
    391                 MIN_ARGS( 2 );
    392 
    393                 if( !( a = account_get( irc->b, cmd[2] ) ) )
    394                 {
    395                         irc_usermsg( irc, "Invalid account" );
    396                 }
    397                 else if( a->ic )
    398                 {
    399                         irc_usermsg( irc, "Account is still logged in, can't delete" );
    400                 }
    401                 else
    402                 {
    403                         account_del( irc->b, a );
    404                         irc_usermsg( irc, "Account deleted" );
    405                 }
     356               
     357                return;
    406358        }
    407359        else if( g_strcasecmp( cmd[1], "list" ) == 0 )
     
    430382                }
    431383                irc_usermsg( irc, "End of account list" );
     384               
     385                return;
     386        }
     387        else if( cmd[2] )
     388        {
     389                /* Try the following two only if cmd[2] == NULL */
    432390        }
    433391        else if( g_strcasecmp( cmd[1], "on" ) == 0 )
    434392        {
    435                 if( cmd[2] )
    436                 {
    437                         if( ( a = account_get( irc->b, cmd[2] ) ) )
    438                         {
    439                                 if( a->ic )
    440                                 {
    441                                         irc_usermsg( irc, "Account already online" );
    442                                         return;
    443                                 }
    444                                 else
    445                                 {
     393                if ( irc->b->accounts )
     394                {
     395                        irc_usermsg( irc, "Trying to get all accounts connected..." );
     396               
     397                        for( a = irc->b->accounts; a; a = a->next )
     398                                if( !a->ic && a->auto_connect )
    446399                                        account_on( irc->b, a );
    447                                 }
    448                         }
    449                         else
    450                         {
    451                                 irc_usermsg( irc, "Invalid account" );
    452                                 return;
    453                         }
    454                 }
    455                 else
    456                 {
    457                         if ( irc->b->accounts )
    458                         {
    459                                 irc_usermsg( irc, "Trying to get all accounts connected..." );
    460                        
    461                                 for( a = irc->b->accounts; a; a = a->next )
    462                                         if( !a->ic && a->auto_connect )
    463                                                 account_on( irc->b, a );
    464                         }
    465                         else
    466                         {
    467                                 irc_usermsg( irc, "No accounts known. Use `account add' to add one." );
    468                         }
    469                 }
     400                }
     401                else
     402                {
     403                        irc_usermsg( irc, "No accounts known. Use `account add' to add one." );
     404                }
     405               
     406                return;
    470407        }
    471408        else if( g_strcasecmp( cmd[1], "off" ) == 0 )
    472409        {
    473                 if( !cmd[2] )
    474                 {
    475                         irc_usermsg( irc, "Deactivating all active (re)connections..." );
    476                        
    477                         for( a = irc->b->accounts; a; a = a->next )
    478                         {
    479                                 if( a->ic )
    480                                         account_off( irc->b, a );
    481                                 else if( a->reconnect )
    482                                         cancel_auto_reconnect( a );
    483                         }
    484                 }
    485                 else if( ( a = account_get( irc->b, cmd[2] ) ) )
     410                irc_usermsg( irc, "Deactivating all active (re)connections..." );
     411               
     412                for( a = irc->b->accounts; a; a = a->next )
    486413                {
    487414                        if( a->ic )
    488                         {
    489415                                account_off( irc->b, a );
    490                         }
    491416                        else if( a->reconnect )
    492                         {
    493417                                cancel_auto_reconnect( a );
    494                                 irc_usermsg( irc, "Reconnect cancelled" );
    495                         }
    496                         else
    497                         {
    498                                 irc_usermsg( irc, "Account already offline" );
    499                                 return;
    500                         }
    501                 }
    502                 else
    503                 {
    504                         irc_usermsg( irc, "Invalid account" );
    505                         return;
    506                 }
    507         }
    508         else if( g_strcasecmp( cmd[1], "set" ) == 0 )
    509         {
    510                 MIN_ARGS( 2 );
    511                
    512                 cmd_set_real( irc, cmd + 1, cmd_account_set_findhead, cmd_account_set_checkflags );
    513         }
    514         else
    515         {
    516                 irc_usermsg( irc, "Unknown command: %s %s. Please use \x02help commands\x02 to get a list of available commands.", "account", cmd[1] );
    517         }
    518 }
    519 
    520 static set_t **cmd_channel_set_findhead( irc_t *irc, char *id )
     418                }
     419               
     420                return;
     421        }
     422       
     423        MIN_ARGS( 2 );
     424       
     425        /* At least right now, don't accept on/off/set/del as account IDs even
     426           if they're a proper match, since people not familiar with the new
     427           syntax yet may get a confusing/nasty surprise. */
     428        if( g_strcasecmp( cmd[1], "on" ) == 0 ||
     429            g_strcasecmp( cmd[1], "off" ) == 0 ||
     430            g_strcasecmp( cmd[1], "set" ) == 0 ||
     431            g_strcasecmp( cmd[1], "del" ) == 0 ||
     432            ( a = account_get( irc->b, cmd[1] ) ) == NULL )
     433        {
     434                irc_usermsg( irc, "Could not find account `%s'. Note that the syntax "
     435                             "of the account command changed, see \x02help account\x02.", cmd[1] );
     436               
     437                return;
     438        }
     439       
     440        if( g_strcasecmp( cmd[2], "del" ) == 0 )
     441        {
     442                if( a->ic )
     443                {
     444                        irc_usermsg( irc, "Account is still logged in, can't delete" );
     445                }
     446                else
     447                {
     448                        account_del( irc->b, a );
     449                        irc_usermsg( irc, "Account deleted" );
     450                }
     451        }
     452        else if( g_strcasecmp( cmd[2], "on" ) == 0 )
     453        {
     454                if( a->ic )
     455                        irc_usermsg( irc, "Account already online" );
     456                else
     457                        account_on( irc->b, a );
     458        }
     459        else if( g_strcasecmp( cmd[2], "off" ) == 0 )
     460        {
     461                if( a->ic )
     462                {
     463                        account_off( irc->b, a );
     464                }
     465                else if( a->reconnect )
     466                {
     467                        cancel_auto_reconnect( a );
     468                        irc_usermsg( irc, "Reconnect cancelled" );
     469                }
     470                else
     471                {
     472                        irc_usermsg( irc, "Account already offline" );
     473                }
     474        }
     475        else if( g_strcasecmp( cmd[2], "set" ) == 0 )
     476        {
     477                cmd_set_real( irc, cmd + 2, &a->set, cmd_account_set_checkflags );
     478        }
     479        else
     480        {
     481                irc_usermsg( irc, "Unknown command: %s [...] %s. Please use \x02help commands\x02 to get a list of available commands.", "account", cmd[2] );
     482        }
     483}
     484
     485static void cmd_channel( irc_t *irc, char **cmd )
    521486{
    522487        irc_channel_t *ic;
    523488       
    524         if( ( ic = irc_channel_get( irc, id ) ) )
    525                 return &ic->set;
    526         else
    527                 return NULL;
    528 }
    529 
    530 static void cmd_channel( irc_t *irc, char **cmd )
    531 {
    532         if( g_strcasecmp( cmd[1], "set" ) == 0 )
    533         {
    534                 MIN_ARGS( 2 );
    535                
    536                 cmd_set_real( irc, cmd + 1, cmd_channel_set_findhead, NULL );
    537         }
    538         else if( g_strcasecmp( cmd[1], "list" ) == 0 )
     489        if( g_strcasecmp( cmd[1], "list" ) == 0 )
    539490        {
    540491                GSList *l;
     
    555506                }
    556507                irc_usermsg( irc, "End of channel list" );
    557         }
    558         else if( g_strcasecmp( cmd[1], "del" ) == 0 )
    559         {
    560                 irc_channel_t *ic;
    561                
    562                 MIN_ARGS( 2 );
    563                
    564                 if( ( ic = irc_channel_get( irc, cmd[2] ) ) &&
    565                    !( ic->flags & IRC_CHANNEL_JOINED ) &&
     508               
     509                return;
     510        }
     511       
     512        MIN_ARGS( 2 );
     513       
     514        if( ( ic = irc_channel_get( irc, cmd[1] ) ) == NULL )
     515        {
     516                irc_usermsg( irc, "Could not find channel `%s'", cmd[1] );
     517                return;
     518        }
     519       
     520        if( g_strcasecmp( cmd[2], "set" ) == 0 )
     521        {
     522                cmd_set_real( irc, cmd + 2, &ic->set, NULL );
     523        }
     524        else if( g_strcasecmp( cmd[2], "del" ) == 0 )
     525        {
     526                if( !( ic->flags & IRC_CHANNEL_JOINED ) &&
    566527                    ic != ic->irc->default_channel )
    567528                {
     
    576537        else
    577538        {
    578                 irc_usermsg( irc, "Unknown command: %s %s. Please use \x02help commands\x02 to get a list of available commands.", "channel", cmd[1] );
     539                irc_usermsg( irc, "Unknown command: %s [...] %s. Please use \x02help commands\x02 to get a list of available commands.", "channel", cmd[1] );
    579540        }
    580541}
     
    912873static void cmd_set( irc_t *irc, char **cmd )
    913874{
    914         cmd_set_real( irc, cmd, NULL, NULL );
     875        cmd_set_real( irc, cmd, &irc->b->set, NULL );
    915876}
    916877
Note: See TracChangeset for help on using the changeset viewer.