From 87e276de3d2c0a13f9d43d4f93b6d0480e066a29 Mon Sep 17 00:00:00 2001 From: acute_interpreter_panic <223899499+acute-interpreter-panic@users.noreply.github.com> Date: Fri, 10 Oct 2025 14:07:03 +0200 Subject: [PATCH] very slim skelleton for downloading --- internal/plugin/interface.go | 73 ++++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) diff --git a/internal/plugin/interface.go b/internal/plugin/interface.go index f5effd7..9546c43 100644 --- a/internal/plugin/interface.go +++ b/internal/plugin/interface.go @@ -189,3 +189,76 @@ func Search(search string, config SearchConfig) ([]data.MusicObject, error) { return res, nil } + +type downloadState struct { + artist *data.Artist + album *data.Album + song *data.Song +} + +var variousArtist = data.Artist{ + Name: "VariousArtist", +}.Compile().(data.Artist) + +var variousAlbum = data.Album{ + Name: "VariousAlbum", +}.Compile().(data.Album) + +func downloadSong(song data.Song, state downloadState) {} + +func Download(musicObject data.MusicObject, statesInput ...downloadState) { + state := downloadState{} + if len(statesInput) > 0 { + state = statesInput[0] + } + + musicObject = musicObject.Compile() + + if song, ok := musicObject.(data.Song); ok { + state.song = &song + + if state.artist == nil { + if len(song.Artists) > 0 { + state.artist = &song.Artists[0] + } else { + state.artist = &variousArtist + } + } + + if state.album == nil { + if song.Album.Name != "" { + state.album = &song.Album + } else { + state.album = &variousAlbum + } + } + downloadSong(song, state) + return + } + + if album, ok := musicObject.(data.Album); ok { + state.album = &album + + if state.artist == nil { + if len(album.Artists) > 0 { + state.artist = &album.Artists[0] + } else { + state.artist = &variousArtist + } + } + + for _, song := range album.Songs { + Download(song, state) + } + return + } + + if artist, ok := musicObject.(data.Artist); ok { + state.artist = &artist + + for _, album := range artist.Albums { + Download(album, state) + } + return + } +}