diff --git a/lib/download.go b/lib/download.go index 10e4558..08d6084 100644 --- a/lib/download.go +++ b/lib/download.go @@ -2,8 +2,6 @@ package lib import ( "errors" - "fmt" - "strconv" ) const ( @@ -12,7 +10,15 @@ const ( ) type DownloadRequest struct { - Service AvailableServices + Service AvailableServices + Track string + Artist string + Album string + Artists string + ReleaseDate string + Cover string + OutputDir string + SpotifyID string } func (app *App) Download(url string, outputFolder string, serviceString string) error { @@ -24,70 +30,11 @@ func (app *App) Download(url string, outputFolder string, serviceString string) serviceString = DEFAULT_DOWNLOAD_SERVICE } - service, err := ParseAvailableServices(serviceString) - if err != nil { - return err - } - - url_type := GetUrlType(url) - - switch url_type { - case UrlTypeTrack: - metadata, err := GetMetadata[MetadataSong](app, url) - if err != nil { - return err - } - - track := metadata.Track - downloadRequest := DownloadRequest{ - Service: service, - TrackName: track.Name, - ArtistName: track.Artists, - AlbumName: track.AlbumName, - AlbumArtist: track.AlbumArtist, - ReleaseDate: track.ReleaseDate, - CoverURL: track.Images, - OutputDir: outputFolder, - SpotifyID: track.SpotifyID, - } - - _, err = app.DownloadTrack(downloadRequest) - return err - case UrlTypePlaylist: - metadata, err := GetMetadata[MetadataPlaylist](app, url) - if err != nil { - return err - } - - trackListSize := strconv.Itoa(len(metadata.TrackList)) - for idx, track := range metadata.TrackList { - fmt.Println("[" + strconv.Itoa(idx+1) + "/" + trackListSize + "] " + track.Name + " - " + track.Artists) - - downloadRequest := DownloadRequest{ - Service: service, - TrackName: track.Name, - ArtistName: track.Artists, - AlbumName: track.AlbumName, - AlbumArtist: track.AlbumArtist, - ReleaseDate: track.ReleaseDate, - CoverURL: track.Images, - OutputDir: outputFolder, - SpotifyID: track.SpotifyID, - PlaylistName: metadata.Info.Owner.Name, - } - - _, err = app.DownloadTrack(downloadRequest) - if err != nil { - fmt.Println("Unable to download " + track.Name + " - " + track.Artists) - } - } - - return nil - } + _ = GetUrlType(url) return errors.New("Invalid URL.") } -func (app *App) DownloadTrack(dr DownloadRequest) { - +func (app *App) DownloadTrack(dr DownloadRequest) (bool, error) { + return false, nil } diff --git a/lib/metadata.go b/lib/metadata.go index 43deb8a..d91ce0b 100644 --- a/lib/metadata.go +++ b/lib/metadata.go @@ -1,16 +1,10 @@ package lib import ( - "encoding/json" "errors" - "fmt" ) -type MetadataSong struct { - Track MetadataTrack `json:"track"` -} - -type MetadataTrack struct { +type Metadata struct { SpotifyID string `json:"spotify_id"` Artists string `json:"artists"` Name string `json:"name"` @@ -30,90 +24,10 @@ type MetadataTrack struct { IsExplicit bool `json:"is_explicit"` } -type MetadataPlaylist struct { - TrackList []MetadataTrack `json:"track_list"` - Info MetadataPlaylistInfo `json:"playlist_info"` -} - -type MetadataPlaylistInfo struct { - Owner MetadataPlaylistOwner `json:"owner"` - Tracks MetadataPlaylistTracks `json:"tracks"` - Cover string `json:"cover"` -} - -type MetadataPlaylistTracks struct { - Total int `json:"total"` -} - -type MetadataPlaylistOwner struct { - Name string `json:"name"` // Playlist name, this makes no sense - Owner string `json:"display_name"` // Playlist owner - Images string `json:"images"` -} - -func GetMetadata[T MetadataPlaylist | MetadataSong](app *App, url string) (T, error) { - var result T - - metadataRequest := app.SpotifyMetadataRequest{ - URL: url, - Delay: 0, - Timeout: 5, - } - - metadata, err := app.GetSpotifyMetadata(metadataRequest) - if err != nil { - return result, err - } - - err = json.Unmarshal([]byte(metadata), &result) - if err != nil { - return result, nil - } - - return result, nil +func (app *App) GetMetadata(url string) (Metadata, error) { + return Metadata{}, nil } func (app *App) PrintMetadata(url string) error { - switch GetUrlType(url) { - case UrlTypeTrack: - metadata, err := GetMetadata[MetadataSong](app, url) - if err != nil { - return err - } - - unformatted := `Name: %s -Artist: %s -Album: %s -Release date: %s -Images: %s` - msg := fmt.Sprintf(unformatted, - metadata.Track.Name, - metadata.Track.Artists, - metadata.Track.AlbumName, - metadata.Track.ReleaseDate, - metadata.Track.Images) - fmt.Println(msg) - - return nil - case UrlTypePlaylist: - metadata, err := GetMetadata[MetadataPlaylist](app, url) - if err != nil { - return err - } - - unformatted := `Name: %s -Owner: %s -Tracks: %d -Cover: %s` - msg := fmt.Sprintf(unformatted, - metadata.Info.Owner.Name, - metadata.Info.Owner.Owner, - metadata.Info.Tracks.Total, - metadata.Info.Cover) - fmt.Println(msg) - - return nil - } - return errors.New("Invalid URL.") }