diff --git a/flake.nix b/flake.nix index 681d1ff..e7176a4 100644 --- a/flake.nix +++ b/flake.nix @@ -55,6 +55,8 @@ go # Required for .deb build dpkg + + ffmpeg_7 ]; }; } @@ -67,6 +69,10 @@ src = ./.; vendorHash = "sha256-EpGgfiCqJjHEOphV2x8FmXeIFls7eq2NVxb/or4NLUo="; + dependencies = with pkgs; [ + ffmpeg_7 + ]; + nativeBuildInputs = with pkgs; [ installShellFiles ]; diff --git a/main.go b/main.go index e083ec6..f696874 100644 --- a/main.go +++ b/main.go @@ -11,7 +11,7 @@ import ( ) func main() { - var output_folder string + var output_folder, service string application := app.NewApp() @@ -32,10 +32,16 @@ func main() { Usage: "set output folder", Destination: &output_folder, }, + &cli.StringFlag{ + Name: "service", + Aliases: []string{"s"}, + Usage: "set service to tidal/amazon/qobuz (FFmpeg is required for amazon and qobuz)", + Destination: &service, + }, }, Action: func(ctx context.Context, cmd *cli.Command) error { song_url := cmd.Args().First() - err := pkg.Download(application, song_url, output_folder) + err := pkg.Download(application, song_url, output_folder, service) return err }, }, diff --git a/pkg/download.go b/pkg/download.go index 2115ecd..92a8d28 100644 --- a/pkg/download.go +++ b/pkg/download.go @@ -13,11 +13,26 @@ const ( DEFAULT_DOWNLOAD_OUTPUT_FOLDER = "." ) -func Download(application *app.App, url string, output_folder string) error { +func Download(application *app.App, url string, output_folder string, service string) error { if output_folder == "" { output_folder = DEFAULT_DOWNLOAD_OUTPUT_FOLDER } + if service == "" { + service = DEFAULT_DOWNLOAD_SERVICE + } + + if service == "amazon" || service == "qobuz" { + isInstalled, err := application.CheckFFmpegInstalled() + if err != nil { + return err + } + + if !isInstalled { + return errors.New("FFmpeg is not installed.") + } + } + url_type := GetUrlType(url) switch url_type { @@ -29,7 +44,7 @@ func Download(application *app.App, url string, output_folder string) error { track := metadata.Track downloadRequest := app.DownloadRequest{ - Service: DEFAULT_DOWNLOAD_SERVICE, + Service: service, TrackName: track.Name, ArtistName: track.Artists, AlbumName: track.AlbumName, @@ -53,7 +68,7 @@ func Download(application *app.App, url string, output_folder string) error { fmt.Println("[" + strconv.Itoa(idx+1) + "/" + trackListSize + "] " + track.Name + " - " + track.Artists) downloadRequest := app.DownloadRequest{ - Service: DEFAULT_DOWNLOAD_SERVICE, + Service: service, TrackName: track.Name, ArtistName: track.Artists, AlbumName: track.AlbumName, @@ -66,7 +81,7 @@ func Download(application *app.App, url string, output_folder string) error { } _, err = application.DownloadTrack(downloadRequest) - if err != nil { + if err != nil { fmt.Println("Unable to download " + track.Name + " - " + track.Artists) } }