mirror of
https://github.com/packwiz/packwiz.git
synced 2025-04-19 13:06:30 +02:00
* added list command filter by side * changed error logging for --side flags * removed len checks on side flags * removed comments previous commit made useless
86 lines
1.8 KiB
Go
86 lines
1.8 KiB
Go
package cmd
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"sort"
|
|
"strings"
|
|
|
|
"github.com/packwiz/packwiz/core"
|
|
"github.com/spf13/cobra"
|
|
"github.com/spf13/viper"
|
|
)
|
|
|
|
// listCmd represents the list command
|
|
var listCmd = &cobra.Command{
|
|
Use: "list",
|
|
Short: "List all the mods in the modpack",
|
|
Args: cobra.NoArgs,
|
|
Run: func(cmd *cobra.Command, args []string) {
|
|
|
|
// Load pack
|
|
pack, err := core.LoadPack()
|
|
if err != nil {
|
|
fmt.Println(err)
|
|
os.Exit(1)
|
|
}
|
|
|
|
// Load index
|
|
index, err := pack.LoadIndex()
|
|
if err != nil {
|
|
fmt.Println(err)
|
|
os.Exit(1)
|
|
}
|
|
|
|
// Load mods
|
|
mods, err := index.LoadAllMods()
|
|
if err != nil {
|
|
fmt.Println(err)
|
|
os.Exit(1)
|
|
}
|
|
|
|
// Filter mods by side
|
|
if viper.IsSet("list.side") {
|
|
side := viper.GetString("list.side")
|
|
if side != core.UniversalSide && side != core.ServerSide && side != core.ClientSide {
|
|
fmt.Printf("Invalid side %q, must be one of client, server, or both (default)\n", side)
|
|
os.Exit(1)
|
|
}
|
|
|
|
i := 0
|
|
for _, mod := range mods {
|
|
if mod.Side == side || mod.Side == core.EmptySide || mod.Side == core.UniversalSide || side == core.UniversalSide {
|
|
mods[i] = mod
|
|
i++
|
|
}
|
|
}
|
|
mods = mods[:i]
|
|
}
|
|
|
|
sort.Slice(mods, func(i, j int) bool {
|
|
return strings.ToLower(mods[i].Name) < strings.ToLower(mods[j].Name)
|
|
})
|
|
|
|
// Print mods
|
|
if viper.GetBool("list.version") {
|
|
for _, mod := range mods {
|
|
fmt.Printf("%s (%s)\n", mod.Name, mod.FileName)
|
|
}
|
|
} else {
|
|
for _, mod := range mods {
|
|
fmt.Println(mod.Name)
|
|
}
|
|
}
|
|
},
|
|
}
|
|
|
|
func init() {
|
|
rootCmd.AddCommand(listCmd)
|
|
|
|
listCmd.Flags().BoolP("version", "v", false, "Print name and version")
|
|
_ = viper.BindPFlag("list.version", listCmd.Flags().Lookup("version"))
|
|
listCmd.Flags().StringP("side", "s", "", "Filter mods by side (e.g., client or server)")
|
|
_ = viper.BindPFlag("list.side", listCmd.Flags().Lookup("side"))
|
|
|
|
}
|