fix: various bugs and general code improvements

This commit is contained in:
2026-02-28 16:18:50 +01:00
parent 2fea9a79df
commit fcae48753b
6 changed files with 68 additions and 47 deletions

View File

@@ -40,11 +40,20 @@ func (app *App) Download(url string, outputFile string, service string, quality
switch urlType {
case UrlTypeTrack:
outputFileRune := []rune(outputFile)
lastCharacter := string(outputFileRune[len(outputFileRune)-1:])
downloadInFolder := lastCharacter == "/"
metadata, err := app.GetTrackMetadata(url)
if err != nil {
return err
}
if err := app.DownloadTrack(url, outputFile, service, quality, downloadInFolder); err != nil {
isDir := IsPathDirectory(outputFile)
if outputFile == "" && !isDir {
outputFile, err = BuildFileName(metadata, "flac")
if err != nil {
return err
}
}
if err := app.DownloadTrack(url, outputFile, service, quality, isDir, metadata); err != nil {
return err
}
@@ -90,7 +99,7 @@ func (app *App) DownloadPlaylist(url string, outputFile string, service string,
fmt.Println("[" + strconv.Itoa(idx+1) + "/" + strconv.Itoa(trackListSize) + "] " + metadata.Data.TrackUnion.Name + " - " + artists)
if err := app.DownloadTrack(url, outputFile+"/", service, quality, true); err != nil {
if err := app.DownloadTrack(url, outputFile+"/", service, quality, true, metadata); err != nil {
return err
}
@@ -111,6 +120,11 @@ func (app *App) GetDownloadUrlOrFallback(askedService string, quality string, so
break
}
// This could have been implemented in a more clear way
if app.NoFallback {
servicesToTry = []string{servicesToTry[0]}
}
var downloadUrl string
var lastError error
for idx, service := range servicesToTry {
@@ -118,19 +132,19 @@ func (app *App) GetDownloadUrlOrFallback(askedService string, quality string, so
app.log("Falling back to " + service)
}
songId, err := app.GetIdFromSonglink(songlink)
if err != nil {
lastError = err
continue
}
switch service {
case "tidal":
if songlink.LinksByPlatform.Tidal == nil {
continue
}
tidalId, err := app.GetTidalIdFromSonglink(songlink)
if err != nil {
lastError = err
continue
}
downloadUrl, err = app.GetTidalDownloadUrl(tidalId, quality)
downloadUrl, err = app.GetTidalDownloadUrl(songId, quality)
if err != nil {
lastError = err
continue
@@ -147,7 +161,7 @@ func (app *App) GetDownloadUrlOrFallback(askedService string, quality string, so
return downloadUrl, nil
}
func (app *App) DownloadTrack(url string, outputFile string, service string, quality string, downloadInFolder bool) error {
func (app *App) DownloadTrack(url string, outputFile string, service string, quality string, downloadInFolder bool, metadata TrackMetadata) error {
songlink, err := app.ConvertSongUrl(url)
if err != nil {
return err
@@ -158,11 +172,6 @@ func (app *App) DownloadTrack(url string, outputFile string, service string, qua
return err
}
metadata, err := app.GetTrackMetadata(url)
if err != nil {
return err
}
extension, err := GetFormatFromQuality(quality)
if err != nil {
return err