From fd699447c5f534ced5dad006603a93aa3d61823a Mon Sep 17 00:00:00 2001 From: blacktop Date: Sun, 3 Sep 2023 20:57:10 -0600 Subject: [PATCH] fix: better UX around `--backup` --- cmd/default.go | 30 ++++++++++++++++++++++++------ cmd/load.go | 30 +++++++++++++++++++++++++----- internal/command/command.go | 4 ++-- 3 files changed, 51 insertions(+), 13 deletions(-) diff --git a/cmd/default.go b/cmd/default.go index 5fff0bc..1ec9423 100644 --- a/cmd/default.go +++ b/cmd/default.go @@ -46,8 +46,24 @@ var defaultCmd = &cobra.Command{ fmt.Println(command.PorgASCIIArt) - backup, _ := cmd.Flags().GetBool("backup") - yes, _ := cmd.Flags().GetBool("yes") + yesbackup, _ := cmd.Flags().GetBool("backup") + noBackup, _ := cmd.Flags().GetBool("no-backup") + yesDefault, _ := cmd.Flags().GetBool("yes") + + backup := false + if yesbackup { + backup = true + } else if noBackup { + backup = false + } else { + prompt := &survey.Confirm{ + Message: "Backup your current Launchpad/Dock settings?", + } + if err := survey.AskOne(prompt, &backup); err == terminal.InterruptErr { + log.Warn("Exiting...") + return nil + } + } conf := &command.Config{ Cmd: cmd.Use, @@ -61,22 +77,22 @@ var defaultCmd = &cobra.Command{ return err } - if backup { + if conf.Backup { log.Debug("Backing up current launchpad settings") if err := command.SaveConfig(conf); err != nil { return err } } - if !yes { + if !yesDefault { prompt := &survey.Confirm{ Message: "Organize launchpad with default config?", } - if err := survey.AskOne(prompt, &yes); err == terminal.InterruptErr { + if err := survey.AskOne(prompt, &yesDefault); err == terminal.InterruptErr { log.Warn("Exiting...") return nil } - if !yes { + if !yesDefault { return nil } } @@ -91,6 +107,8 @@ func init() { defaultCmd.Flags().BoolP("yes", "y", false, "Do not prompt user for confirmation") defaultCmd.Flags().BoolP("backup", "b", false, "Backup current launchpad settings") + defaultCmd.Flags().BoolP("no-backup", "n", false, "Do NOT backup current launchpad settings") + defaultCmd.MarkFlagsMutuallyExclusive("backup", "no-backup") defaultCmd.SetHelpFunc(func(c *cobra.Command, s []string) { rootCmd.PersistentFlags().MarkHidden("config") rootCmd.PersistentFlags().MarkHidden("icloud") diff --git a/cmd/load.go b/cmd/load.go index e6130b4..1f680f5 100644 --- a/cmd/load.go +++ b/cmd/load.go @@ -44,8 +44,26 @@ var loadCmd = &cobra.Command{ log.SetLevel(log.DebugLevel) } - backup, _ := cmd.Flags().GetBool("backup") - yes, _ := cmd.Flags().GetBool("yes") + fmt.Println(command.PorgASCIIArt) + + yesbackup, _ := cmd.Flags().GetBool("backup") + noBackup, _ := cmd.Flags().GetBool("no-backup") + yesLoad, _ := cmd.Flags().GetBool("yes") + + backup := false + if yesbackup { + backup = true + } else if noBackup { + backup = false + } else { + prompt := &survey.Confirm{ + Message: "Backup your current Launchpad/Dock settings?", + } + if err := survey.AskOne(prompt, &backup); err == terminal.InterruptErr { + log.Warn("Exiting...") + return nil + } + } conf := &command.Config{ Cmd: cmd.Use, @@ -66,15 +84,15 @@ var loadCmd = &cobra.Command{ } } - if !yes { + if !yesLoad { prompt := &survey.Confirm{ Message: fmt.Sprintf("Load launchpad config '%s'?", conf.File), } - if err := survey.AskOne(prompt, &yes); err == terminal.InterruptErr { + if err := survey.AskOne(prompt, &yesLoad); err == terminal.InterruptErr { log.Warn("Exiting...") return nil } - if !yes { + if !yesLoad { return nil } } @@ -88,5 +106,7 @@ func init() { rootCmd.AddCommand(loadCmd) loadCmd.Flags().BoolP("backup", "b", false, "Backup current launchpad settings") + loadCmd.Flags().BoolP("no-backup", "n", false, "Do NOT backup current launchpad settings") loadCmd.Flags().BoolP("yes", "y", false, "Do not prompt user for confirmation") + loadCmd.MarkFlagsMutuallyExclusive("backup", "no-backup") } diff --git a/internal/command/command.go b/internal/command/command.go index 420dd27..3556cad 100644 --- a/internal/command/command.go +++ b/internal/command/command.go @@ -442,9 +442,9 @@ func SaveConfig(c *Config) (err error) { } if c.Backup { - log.Infof(bold, "successfully backed up current settings!") + log.Infof(bold, "successfully backed up current settings to: "+c.File) } else { - log.Infof(bold, "successfully wrote: "+c.File) + log.Infof(bold, "successfully wrote settings to: "+c.File) } return nil