Files
ripsort/cmd/ripsort.go

74 lines
1.7 KiB
Go

package cmd
import (
"log/slog"
"os"
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"`
}
func Run() {
var args args
p := arg.MustParse(&args)
if args.Verbose {
slog.SetLogLoggerLevel(slog.LevelDebug)
}
switch {
case args.Info != nil:
if err := ripsort.Scan(args.Info.File); err != nil {
os.Exit(1)
}
case args.Sort != nil:
if err := ripsort.Sort(args.Sort.Dst, args.Sort.Path); err != nil {
os.Exit(1)
}
case args.SyncPlaylists != nil:
if err := ripsort.SyncPlaylists(
args.SyncPlaylists.SpotifyClientID,
args.SyncPlaylists.SpotifyClientSecret,
args.SyncPlaylists.NavidromeURL,
args.SyncPlaylists.NavidromeUser,
args.SyncPlaylists.NavidromePass,
); err != nil {
os.Exit(1)
}
default:
p.Fail("Must specify command")
}
}