Add command suggestions
authorMikael Berthe <mikael@lilotux.net>
Wed, 05 Sep 2018 13:51:32 +0200
changeset 225 f90d1e6d4f15
parent 224 d33a2c4fdfbf
child 226 5df927fa87ca
Add command suggestions
cmd/suggestions.go
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/cmd/suggestions.go	Wed Sep 05 13:51:32 2018 +0200
@@ -0,0 +1,156 @@
+// Copyright © 2018 Mikael Berthe <mikael@lilotux.net>
+//
+// Licensed under the MIT license.
+// Please see the LICENSE file is this directory.
+
+package cmd
+
+import (
+	"os"
+
+	"github.com/pkg/errors"
+	"github.com/spf13/cobra"
+
+	"github.com/McKael/madon"
+)
+
+var suggestionsOpts struct {
+	accountID  int64
+	accountIDs string
+
+	//limit uint
+	keep uint
+	//all bool
+}
+
+//suggestionsCmd represents the suggestions command
+var suggestionsCmd = &cobra.Command{
+	Use:     "suggestions",
+	Aliases: []string{"suggestion"},
+	Short:   "Display and remove the follow suggestions",
+	RunE:    suggestionsGetRunE, // Defaults to list
+}
+
+func init() {
+	RootCmd.AddCommand(suggestionsCmd)
+
+	// Subcommands
+	suggestionsCmd.AddCommand(suggestionsSubcommands...)
+
+	//suggestionsGetSubcommand.Flags().UintVarP(&suggestionsOpts.limit, "limit", "l", 0, "Limit number of API results")
+	suggestionsGetSubcommand.Flags().UintVarP(&suggestionsOpts.keep, "keep", "k", 0, "Limit number of results")
+	//suggestionsGetSubcommand.Flags().BoolVar(&suggestionsOpts.all, "all", false, "Fetch all results")
+
+	suggestionsDeleteSubcommand.Flags().Int64VarP(&suggestionsOpts.accountID, "account-id", "a", 0, "Account ID number")
+	suggestionsDeleteSubcommand.Flags().StringVar(&suggestionsOpts.accountIDs, "account-ids", "", "Comma-separated list of account IDs")
+}
+
+var suggestionsSubcommands = []*cobra.Command{
+	suggestionsGetSubcommand,
+	suggestionsDeleteSubcommand,
+}
+
+var suggestionsGetSubcommand = &cobra.Command{
+	Use:     "list",
+	Short:   "Display the suggestions (default subcommand)",
+	Long:    `Display the list of account suggestions.`,
+	Aliases: []string{"ls", "get", "display", "show"},
+	RunE:    suggestionsGetRunE,
+}
+
+var suggestionsDeleteSubcommand = &cobra.Command{
+	Use:     "delete",
+	Short:   "Remove an account from the suggestion list",
+	Aliases: []string{"remove", "del", "rm"},
+	RunE:    suggestionsDeleteRunE,
+}
+
+func suggestionsGetRunE(cmd *cobra.Command, args []string) error {
+	opt := suggestionsOpts
+
+	/*
+		// Note: The API currently does not support pagination
+		// Set up LimitParams
+		var limOpts *madon.LimitParams
+		if opt.all || opt.limit > 0 {
+			limOpts = new(madon.LimitParams)
+			limOpts.All = opt.all
+		}
+		if opt.limit > 0 {
+			limOpts.Limit = int(opt.limit)
+		}
+	*/
+
+	// We need to be logged in
+	if err := madonInit(true); err != nil {
+		return err
+	}
+
+	var obj interface{}
+	var err error
+
+	var accountList []madon.Account
+	accountList, err = gClient.GetSuggestions(nil)
+
+	if opt.keep > 0 && len(accountList) > int(opt.keep) {
+		accountList = accountList[:opt.keep]
+	}
+
+	obj = accountList
+
+	if err != nil {
+		errPrint("Error: %s", err.Error())
+		os.Exit(1)
+	}
+	if obj == nil {
+		return nil
+	}
+
+	p, err := getPrinter()
+	if err != nil {
+		errPrint("Error: %v", err)
+		os.Exit(1)
+	}
+	return p.printObj(obj)
+}
+
+func suggestionsDeleteRunE(cmd *cobra.Command, args []string) error {
+	opt := suggestionsOpts
+	var ids []int64
+	var err error
+
+	if opt.accountID < 1 && len(opt.accountIDs) == 0 {
+		return errors.New("missing account IDs")
+	}
+	if opt.accountID > 0 && len(opt.accountIDs) > 0 {
+		return errors.New("incompatible options")
+	}
+
+	ids, err = splitIDs(opt.accountIDs)
+	if err != nil {
+		return errors.New("cannot parse account IDs")
+	}
+	if opt.accountID > 0 { // Allow --account-id
+		ids = []int64{opt.accountID}
+	}
+	if len(ids) < 1 {
+		return errors.New("missing account IDs")
+	}
+
+	// We need to be logged in
+	if err := madonInit(true); err != nil {
+		return err
+	}
+
+	for _, id := range ids {
+		if e := gClient.DeleteSuggestion(id); err != nil {
+			errPrint("Cannot remove account %d: %s", id, e)
+			err = e
+		}
+	}
+
+	if err != nil {
+		os.Exit(1)
+	}
+	return nil
+}