From 66758348420cac7b641532123dd16a91af595d92 Mon Sep 17 00:00:00 2001 From: Mathis Maquenne <124215603+mathismqn@users.noreply.github.com> Date: Sat, 26 Apr 2025 00:49:56 +0200 Subject: [PATCH] refactor: change default output directory --- cmd/download.go | 31 +++++++++++++++++++++++++------ internal/deezer/album.go | 1 - internal/deezer/playlist.go | 1 - internal/utils/dir.go | 21 +++++++++++++++++++++ 4 files changed, 46 insertions(+), 8 deletions(-) create mode 100644 internal/utils/dir.go diff --git a/cmd/download.go b/cmd/download.go index 8fd68c7..bbc1053 100644 --- a/cmd/download.go +++ b/cmd/download.go @@ -10,6 +10,7 @@ import ( "github.com/mathismqn/godeez/internal/config" "github.com/mathismqn/godeez/internal/deezer" "github.com/mathismqn/godeez/internal/tags" + "github.com/mathismqn/godeez/internal/utils" "github.com/spf13/cobra" ) @@ -23,11 +24,31 @@ var downloadCmd = &cobra.Command{ func init() { RootCmd.AddCommand(downloadCmd) - downloadCmd.PersistentFlags().StringVarP(&outputDir, "output", "o", "", "output directory (default is current directory)") + downloadCmd.PersistentFlags().StringVarP(&outputDir, "output", "o", "", "output directory (default is $HOME/Music/GoDeez)") downloadCmd.PersistentFlags().StringVarP(&quality, "quality", "q", "", "download quality [mp3_128, mp3_320, flac, best] (default is best)") } func validateInput() { + if outputDir == "" { + homeDir, err := os.UserHomeDir() + if err != nil { + fmt.Fprintf(os.Stderr, "Error: could not get home directory: %v\n", err) + os.Exit(1) + } + + musicDir := path.Join(homeDir, "Music") + if err := utils.EnsureDir(musicDir); err != nil { + fmt.Fprintf(os.Stderr, "Error: could not create music directory: %v\n", err) + os.Exit(1) + } + + outputDir = path.Join(musicDir, "GoDeez") + if err := utils.EnsureDir(outputDir); err != nil { + fmt.Fprintf(os.Stderr, "Error: could not create GoDeez directory: %v\n", err) + os.Exit(1) + } + } + if quality == "" { quality = "best" } @@ -91,11 +112,9 @@ func downloadContent(contentType string, args []string) { fmt.Printf("\r[%d/%d] Getting data for %s %s... DONE\n", i+1, nArgs, contentType, id) output := resource.GetOutputPath(outputDir) - if _, err := os.Stat(output); os.IsNotExist(err) { - if err := os.MkdirAll(output, 0755); err != nil { - fmt.Fprintf(os.Stderr, "Error: could not create output directory: %v\n", err) - continue - } + if err := utils.EnsureDir(output); err != nil { + fmt.Fprintf(os.Stderr, "Error: could not create output directory: %v\n", err) + continue } title := resource.GetTitle() diff --git a/internal/deezer/album.go b/internal/deezer/album.go index 88c7f14..b167418 100644 --- a/internal/deezer/album.go +++ b/internal/deezer/album.go @@ -40,7 +40,6 @@ func (a *Album) GetOutputPath(outputDir string) string { base := fmt.Sprintf("%s - %s", a.Results.Data.Artist, a.Results.Data.Title) base, _ = filenamify.Filenamify(base, filenamify.Options{}) outputPath := path.Join(outputDir, base) - outputPath, _ = filenamify.Filenamify(outputPath, filenamify.Options{}) return outputPath } diff --git a/internal/deezer/playlist.go b/internal/deezer/playlist.go index e1dd344..14677e3 100644 --- a/internal/deezer/playlist.go +++ b/internal/deezer/playlist.go @@ -35,7 +35,6 @@ func (p *Playlist) GetSongs() []*Song { func (p *Playlist) GetOutputPath(outputDir string) string { p.Results.Data.Title, _ = filenamify.Filenamify(p.Results.Data.Title, filenamify.Options{}) outputPath := path.Join(outputDir, p.Results.Data.Title) - outputPath, _ = filenamify.Filenamify(outputPath, filenamify.Options{}) return outputPath } diff --git a/internal/utils/dir.go b/internal/utils/dir.go new file mode 100644 index 0000000..7b1fdcb --- /dev/null +++ b/internal/utils/dir.go @@ -0,0 +1,21 @@ +package utils + +import ( + "fmt" + "os" +) + +func EnsureDir(path string) error { + info, err := os.Stat(path) + if os.IsNotExist(err) { + return os.MkdirAll(path, 0755) + } + if err != nil { + return err + } + if !info.IsDir() { + return fmt.Errorf("file already exists at %s", path) + } + + return nil +}