diff --git a/lib/app.go b/lib/app.go index 8574bdf..ea98230 100644 --- a/lib/app.go +++ b/lib/app.go @@ -1,7 +1,8 @@ -package pkg +package lib type App struct { - } - +func NewApp() App { + return App{} +} diff --git a/lib/download.go b/lib/download.go index 9688424..b5aac7e 100644 --- a/lib/download.go +++ b/lib/download.go @@ -1,4 +1,4 @@ -package pkg +package lib import ( "errors" @@ -11,24 +11,37 @@ const ( DEFAULT_DOWNLOAD_OUTPUT_FOLDER = "." ) -func Download(app *App, url string, output_folder string, service string) error { - if output_folder == "" { - output_folder = DEFAULT_DOWNLOAD_OUTPUT_FOLDER +type AvailableServices int + +const ( + AvailableServicesTidal = iota +) + +func ParseAvailableServices(service string) (AvailableServices, error) { + switch service { + case "tidal": + return AvailableServicesTidal, nil + break + } + return AvailableServicesTidal, errors.New("Invalid service.") +} + +type DownloadRequest struct { + Service AvailableServices +} + +func (app *App) Download(url string, outputFolder string, serviceString string) error { + if outputFolder == "" { + outputFolder = DEFAULT_DOWNLOAD_OUTPUT_FOLDER } - if service == "" { - service = DEFAULT_DOWNLOAD_SERVICE + if serviceString == "" { + serviceString = DEFAULT_DOWNLOAD_SERVICE } - if service == "amazon" || service == "qobuz" { - isInstalled, err := app.CheckFFmpegInstalled() - if err != nil { - return err - } - - if !isInstalled { - return errors.New("FFmpeg is not installed.") - } + service, err := ParseAvailableServices(serviceString) + if err != nil { + return err } url_type := GetUrlType(url) @@ -41,7 +54,7 @@ func Download(app *App, url string, output_folder string, service string) error } track := metadata.Track - downloadRequest := app.DownloadRequest{ + downloadRequest := DownloadRequest{ Service: service, TrackName: track.Name, ArtistName: track.Artists, @@ -49,7 +62,7 @@ func Download(app *App, url string, output_folder string, service string) error AlbumArtist: track.AlbumArtist, ReleaseDate: track.ReleaseDate, CoverURL: track.Images, - OutputDir: output_folder, + OutputDir: outputFolder, SpotifyID: track.SpotifyID, } @@ -65,7 +78,7 @@ func Download(app *App, url string, output_folder string, service string) error for idx, track := range metadata.TrackList { fmt.Println("[" + strconv.Itoa(idx+1) + "/" + trackListSize + "] " + track.Name + " - " + track.Artists) - downloadRequest := app.DownloadRequest{ + downloadRequest := DownloadRequest{ Service: service, TrackName: track.Name, ArtistName: track.Artists, @@ -73,7 +86,7 @@ func Download(app *App, url string, output_folder string, service string) error AlbumArtist: track.AlbumArtist, ReleaseDate: track.ReleaseDate, CoverURL: track.Images, - OutputDir: output_folder, + OutputDir: outputFolder, SpotifyID: track.SpotifyID, PlaylistName: metadata.Info.Owner.Name, } @@ -89,3 +102,7 @@ func Download(app *App, url string, output_folder string, service string) error return errors.New("Invalid URL.") } + +func (app *App) DownloadTrack(dr DownloadRequest) { + +} diff --git a/lib/metadata.go b/lib/metadata.go index 725efc1..43deb8a 100644 --- a/lib/metadata.go +++ b/lib/metadata.go @@ -1,4 +1,4 @@ -package pkg +package lib import ( "encoding/json" @@ -73,7 +73,7 @@ func GetMetadata[T MetadataPlaylist | MetadataSong](app *App, url string) (T, er return result, nil } -func PrintMetadata(app *App, url string) error { +func (app *App) PrintMetadata(url string) error { switch GetUrlType(url) { case UrlTypeTrack: metadata, err := GetMetadata[MetadataSong](app, url) @@ -117,4 +117,3 @@ Cover: %s` return errors.New("Invalid URL.") } - diff --git a/lib/services.go b/lib/services.go new file mode 100644 index 0000000..55c21f8 --- /dev/null +++ b/lib/services.go @@ -0,0 +1 @@ +package lib diff --git a/lib/utils.go b/lib/utils.go index 9cce6f2..64c243b 100644 --- a/lib/utils.go +++ b/lib/utils.go @@ -1,4 +1,4 @@ -package pkg +package lib import ( "strings" diff --git a/main.go b/main.go index 5d5cae9..71acc13 100644 --- a/main.go +++ b/main.go @@ -10,7 +10,7 @@ import ( ) func main() { - var output_folder, service string + var outputFolder, service string app := lib.NewApp() @@ -29,7 +29,7 @@ func main() { Name: "output", Aliases: []string{"o"}, Usage: "set output folder", - Destination: &output_folder, + Destination: &outputFolder, }, &cli.StringFlag{ Name: "service", @@ -40,7 +40,7 @@ func main() { }, Action: func(ctx context.Context, cmd *cli.Command) error { song_url := cmd.Args().First() - err := pkg.Download(app, song_url, output_folder, service) + err := app.Download(song_url, outputFolder, service) return err }, }, @@ -50,7 +50,7 @@ func main() { Usage: "view song metadata", Action: func(ctx context.Context, cmd *cli.Command) error { url := cmd.Args().First() - return pkg.PrintMetadata(app, url) + return app.PrintMetadata(url) }, }, },