fix: first compilable version

This commit is contained in:
2026-02-15 17:34:48 +01:00
parent 9cdaf9851c
commit 1ce9feb5e6
2 changed files with 15 additions and 154 deletions

View File

@@ -2,8 +2,6 @@ package lib
import ( import (
"errors" "errors"
"fmt"
"strconv"
) )
const ( const (
@@ -13,6 +11,14 @@ const (
type DownloadRequest struct { 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 { 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 serviceString = DEFAULT_DOWNLOAD_SERVICE
} }
service, err := ParseAvailableServices(serviceString) _ = GetUrlType(url)
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
}
return errors.New("Invalid URL.") return errors.New("Invalid URL.")
} }
func (app *App) DownloadTrack(dr DownloadRequest) { func (app *App) DownloadTrack(dr DownloadRequest) (bool, error) {
return false, nil
} }

View File

@@ -1,16 +1,10 @@
package lib package lib
import ( import (
"encoding/json"
"errors" "errors"
"fmt"
) )
type MetadataSong struct { type Metadata struct {
Track MetadataTrack `json:"track"`
}
type MetadataTrack struct {
SpotifyID string `json:"spotify_id"` SpotifyID string `json:"spotify_id"`
Artists string `json:"artists"` Artists string `json:"artists"`
Name string `json:"name"` Name string `json:"name"`
@@ -30,90 +24,10 @@ type MetadataTrack struct {
IsExplicit bool `json:"is_explicit"` IsExplicit bool `json:"is_explicit"`
} }
type MetadataPlaylist struct { func (app *App) GetMetadata(url string) (Metadata, error) {
TrackList []MetadataTrack `json:"track_list"` return Metadata{}, nil
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) PrintMetadata(url string) error { 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.") return errors.New("Invalid URL.")
} }