package client import ( "os" "forge.cadoles.com/arcad/arcast/internal/command/client/flag" "forge.cadoles.com/arcad/arcast/pkg/client" "github.com/pkg/errors" "github.com/urfave/cli/v2" "gitlab.com/wpetit/goweb/cli/format" ) func Cast() *cli.Command { return &cli.Command{ Name: "cast", ArgsUsage: "", Flags: flag.ComposeFlags( playerFlags..., ), Action: func(ctx *cli.Context) error { baseFlags := flag.GetBaseFlags(ctx) url := ctx.Args().First() if url == "" { return errors.New("you must specify an url to cast") } statuses := make([]wrappedStatus, 0) err := forEachPlayer(ctx, func(cl *client.Client, playerAddr string) error { status, err := cl.Cast(ctx.Context, playerAddr, url) if err != nil { return errors.Wrap(err, "could not cast") } statuses = append(statuses, wrappedStatus{ Status: status.Status, URL: status.URL, Title: status.Title, ID: status.ID, Address: playerAddr, }) return nil }) if err != nil { return errors.WithStack(err) } hints := wrappedStatusHints(baseFlags.OutputMode) if err := format.Write(baseFlags.Format, os.Stdout, hints, AsAnySlice(statuses...)...); err != nil { return errors.WithStack(err) } return nil }, } }