Changeset 772 in code for trunk/service.go


Ignore:
Timestamp:
Feb 7, 2022, 8:33:16 PM (3 years ago)
Author:
contact
Message:

service: make name arg optional for network commands

Makes commands less verbose.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/service.go

    r771 r772  
    209209                                },
    210210                                "update": {
    211                                         usage:  "<name> [-addr addr] [-name name] [-username username] [-pass pass] [-realname realname] [-nick nick] [-enabled enabled] [-connect-command command]...",
     211                                        usage:  "[name] [-addr addr] [-name name] [-username username] [-pass pass] [-realname realname] [-nick nick] [-enabled enabled] [-connect-command command]...",
    212212                                        desc:   "update a network",
    213213                                        handle: handleServiceNetworkUpdate,
    214214                                },
    215215                                "delete": {
    216                                         usage:  "<name>",
     216                                        usage:  "[name]",
    217217                                        desc:   "delete a network",
    218218                                        handle: handleServiceNetworkDelete,
    219219                                },
    220220                                "quote": {
    221                                         usage:  "<name> <command>",
     221                                        usage:  "[name] <command>",
    222222                                        desc:   "send a raw line to a network",
    223223                                        handle: handleServiceNetworkQuote,
     
    410410        *f.ptr = &v
    411411        return nil
     412}
     413
     414func getNetworkFromArg(dc *downstreamConn, params []string) (*network, []string, error) {
     415        name, params := popArg(params)
     416        if name == "" {
     417                if dc.network == nil {
     418                        return nil, params, fmt.Errorf("no network selected, a name argument is required")
     419                }
     420                return dc.network, params, nil
     421        } else {
     422                net := dc.user.getNetwork(name)
     423                if net == nil {
     424                        return nil, params, fmt.Errorf("unknown network %q", name)
     425                }
     426                return net, params, nil
     427        }
    412428}
    413429
     
    551567
    552568func handleServiceNetworkUpdate(ctx context.Context, dc *downstreamConn, params []string) error {
    553         if len(params) < 1 {
    554                 return fmt.Errorf("expected at least one argument")
     569        net, params, err := getNetworkFromArg(dc, params)
     570        if err != nil {
     571                return err
    555572        }
    556573
    557574        fs := newNetworkFlagSet()
    558         if err := fs.Parse(params[1:]); err != nil {
    559                 return err
    560         }
    561 
    562         net := dc.user.getNetwork(params[0])
    563         if net == nil {
    564                 return fmt.Errorf("unknown network %q", params[0])
     575        if err := fs.Parse(params); err != nil {
     576                return err
    565577        }
    566578
     
    580592
    581593func handleServiceNetworkDelete(ctx context.Context, dc *downstreamConn, params []string) error {
    582         if len(params) != 1 {
    583                 return fmt.Errorf("expected exactly one argument")
    584         }
    585 
    586         net := dc.user.getNetwork(params[0])
    587         if net == nil {
    588                 return fmt.Errorf("unknown network %q", params[0])
     594        net, params, err := getNetworkFromArg(dc, params)
     595        if err != nil {
     596                return err
    589597        }
    590598
     
    598606
    599607func handleServiceNetworkQuote(ctx context.Context, dc *downstreamConn, params []string) error {
    600         if len(params) != 2 {
    601                 return fmt.Errorf("expected exactly two arguments")
    602         }
    603 
    604         net := dc.user.getNetwork(params[0])
    605         if net == nil {
    606                 return fmt.Errorf("unknown network %q", params[0])
     608        if len(params) != 1 && len(params) != 2 {
     609                return fmt.Errorf("expected one or two arguments")
     610        }
     611
     612        raw := params[len(params)-1]
     613        params = params[:len(params)-1]
     614
     615        net, params, err := getNetworkFromArg(dc, params)
     616        if err != nil {
     617                return err
    607618        }
    608619
    609620        uc := net.conn
    610621        if uc == nil {
    611                 return fmt.Errorf("network %q is not currently connected", params[0])
    612         }
    613 
    614         m, err := irc.ParseMessage(params[1])
    615         if err != nil {
    616                 return fmt.Errorf("failed to parse command %q: %v", params[1], err)
     622                return fmt.Errorf("network %q is not currently connected", net.GetName())
     623        }
     624
     625        m, err := irc.ParseMessage(raw)
     626        if err != nil {
     627                return fmt.Errorf("failed to parse command %q: %v", raw, err)
    617628        }
    618629        uc.SendMessage(ctx, m)
Note: See TracChangeset for help on using the changeset viewer.