package cmd import ( "fmt" "strings" "git.mlow.ca/mlow/lmcli/pkg/lmcli" "github.com/spf13/cobra" cmdutil "git.mlow.ca/mlow/lmcli/pkg/cmd/util" ) func RenameCmd(ctx *lmcli.Context) *cobra.Command { cmd := &cobra.Command{ Use: "rename [title]", Short: "Rename a conversation", Long: `Renames a conversation, either with the provided title or by generating a new name.`, 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 { shortName := args[0] conversation := cmdutil.LookupConversation(ctx, shortName) var err error var title string generate, _ := cmd.Flags().GetBool("generate") if generate { messages, err := ctx.Store.PathToLeaf(conversation.SelectedRoot) if err != nil { return fmt.Errorf("Could not retrieve conversation messages: %v", err) } title, err = cmdutil.GenerateTitle(ctx, messages) if err != nil { return fmt.Errorf("Could not generate conversation title: %v", err) } } else { if len(args) < 2 { return fmt.Errorf("Conversation title not provided.") } title = strings.Join(args[1:], " ") } conversation.Title = title err = ctx.Store.UpdateConversation(conversation) if err != nil { lmcli.Warn("Could not update conversation title: %v\n", err) } return nil }, ValidArgsFunction: func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { compMode := cobra.ShellCompDirectiveNoFileComp if len(args) != 0 { return nil, compMode } return ctx.Store.ConversationShortNameCompletions(toComplete), compMode }, } cmd.Flags().Bool("generate", false, "Generate a conversation title") return cmd }