Files
gosqldump/cmd/clear.go
2024-08-30 11:25:28 +12:00

58 lines
1.4 KiB
Go

package cmd
import (
"fmt"
"github.com/charmbracelet/lipgloss"
"github.com/samber/lo"
"github.com/spf13/cobra"
"hub.cybercinch.nz/guisea/go-template/internal/app"
"hub.cybercinch.nz/guisea/go-template/internal/color"
"hub.cybercinch.nz/guisea/go-template/internal/filesystem"
"hub.cybercinch.nz/guisea/go-template/internal/icon"
"hub.cybercinch.nz/guisea/go-template/internal/util"
"hub.cybercinch.nz/guisea/go-template/internal/where"
)
type clearTarget struct {
name string
clear func() error
}
// Specify what can be cleared
var clearTargets = []clearTarget{
{"cache", func() error {
return filesystem.Api().RemoveAll(where.Cache())
}},
{"logs", func() error {
return filesystem.Api().RemoveAll(where.Logs())
}},
}
func init() {
rootCmd.AddCommand(clearCmd)
for _, n := range clearTargets {
clearCmd.Flags().BoolP(n.name, string(n.name[0]), false, "clear "+n.name)
}
}
var clearCmd = &cobra.Command{
Use: "clear",
Short: "Clears sidelined files produced by the " + app.Name,
Run: func(cmd *cobra.Command, args []string) {
successStyle := lipgloss.NewStyle().Foreground(color.Green).Render
var didSomething bool
for _, n := range clearTargets {
if lo.Must(cmd.Flags().GetBool(n.name)) {
handleErr(n.clear())
fmt.Printf("%s %s cleared\n", successStyle(icon.Check), util.Capitalize(n.name))
didSomething = true
}
}
if !didSomething {
_ = cmd.Help()
}
},
}