68 lines
1.6 KiB
Go
68 lines
1.6 KiB
Go
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")
|
|
}
|
|
}
|