package cmd import ( "fmt" "strings" cmdutil "git.mlow.ca/mlow/lmcli/pkg/cmd/util" "git.mlow.ca/mlow/lmcli/pkg/lmcli" "git.mlow.ca/mlow/lmcli/pkg/lmcli/model" "github.com/spf13/cobra" ) func RemoveCmd(ctx *lmcli.Context) *cobra.Command { cmd := &cobra.Command{ Use: "rm ...", Short: "Remove conversations", Long: `Remove conversations by their short names.`, Args: func(cmd *cobra.Command, args []string) error { argCount := 1 if err := cobra.MinimumNArgs(argCount)(cmd, args); err != nil { return err } return nil }, RunE: func(cmd *cobra.Command, args []string) error { var toRemove []*model.Conversation for _, shortName := range args { conversation := cmdutil.LookupConversation(ctx, shortName) toRemove = append(toRemove, conversation) } var errors []error for _, c := range toRemove { err := ctx.Store.DeleteConversation(c) if err != nil { errors = append(errors, fmt.Errorf("Could not remove conversation %s: %v", c.ShortName.String, err)) } } if len(errors) > 0 { return fmt.Errorf("Could not remove some conversations: %v", errors) } return nil }, ValidArgsFunction: func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { compMode := cobra.ShellCompDirectiveNoFileComp var completions []string outer: for _, completion := range ctx.Store.ConversationShortNameCompletions(toComplete) { parts := strings.Split(completion, "\t") for _, arg := range args { if parts[0] == arg { continue outer } } completions = append(completions, completion) } return completions, compMode }, } return cmd }