package cmd import ( "log/slog" ripsort "git.kapelle.org/niklas/ripsort/internal" "github.com/alexflint/go-arg" ) type InfoCmd struct { File string `arg:"positional,required"` } type SortCmd struct { Dst string `arg:"positional,required"` Path string `arg:"positional,required"` } type SyncPlaylists struct { SpotifyArgs NavidromeArgs } type SpotifyArgs struct { SpotifyClientID string `arg:"--spotify-client-id,env:SPOTIFY_CLIENT_ID,required"` SpotifyClientSecret string `arg:"--spotify-client-secret,env:SPOTIFY_CLIENT_SECRET,required"` } type NavidromeArgs struct { NavidromeURL string `arg:"--navidrome-url,env:ND_URL,required"` NavidromeUser string `arg:"--navidrome-user,env:ND_USER,required"` NavidromePass string `arg:"--navidrome-pass,env:ND_PASS,required"` } type args struct { Info *InfoCmd `arg:"subcommand:info"` Sort *SortCmd `arg:"subcommand:sort"` SyncPlaylists *SyncPlaylists `arg:"subcommand:sync-playlist"` Verbose bool `arg:"-v" default:"false"` DryRun bool `arg:"--dry-run" default:"false"` } func Run() { var args args p := arg.MustParse(&args) if args.Verbose { slog.SetLogLoggerLevel(slog.LevelDebug) } switch { case args.Info != nil: ripsort.Scan(args.Info.File) case args.Sort != nil: ripsort.Sort(args.Sort.Dst, args.Sort.Path) case args.SyncPlaylists != nil: ripsort.SyncPlaylists( args.SyncPlaylists.SpotifyClientID, args.SyncPlaylists.SpotifyClientSecret, args.SyncPlaylists.NavidromeURL, args.SyncPlaylists.NavidromeUser, args.SyncPlaylists.NavidromePass, ) default: p.Fail("Must specify command") } }