diff --git a/src/internet/internetplaylistitem.cpp b/src/internet/internetplaylistitem.cpp index 8455df11c..9c535eef3 100644 --- a/src/internet/internetplaylistitem.cpp +++ b/src/internet/internetplaylistitem.cpp @@ -38,8 +38,15 @@ InternetPlaylistItem::InternetPlaylistItem(const Song::Source source) : PlaylistItem(source) {} +InternetPlaylistItem::InternetPlaylistItem(const Song &metadata) + : PlaylistItem(metadata.source()), + source_(metadata.source()), + metadata_(metadata) { + InitMetadata(); +} + InternetPlaylistItem::InternetPlaylistItem(InternetService *service, const Song &metadata) - : PlaylistItem(Song::Source_Stream), + : PlaylistItem(metadata.source()), source_(service->source()), metadata_(metadata) { InitMetadata(); diff --git a/src/internet/internetplaylistitem.h b/src/internet/internetplaylistitem.h index c56991a83..10f5056da 100644 --- a/src/internet/internetplaylistitem.h +++ b/src/internet/internetplaylistitem.h @@ -36,6 +36,7 @@ class InternetPlaylistItem : public PlaylistItem { public: explicit InternetPlaylistItem(const Song::Source source); + explicit InternetPlaylistItem(const Song &metadata); explicit InternetPlaylistItem(InternetService *service, const Song &metadata); bool InitFromQuery(const SqlRow &query) override; diff --git a/src/playlist/playlistitem.cpp b/src/playlist/playlistitem.cpp index 5219a228e..ac33cbbc2 100644 --- a/src/playlist/playlistitem.cpp +++ b/src/playlist/playlistitem.cpp @@ -38,9 +38,7 @@ #include "internet/internetplaylistitem.h" -PlaylistItem::~PlaylistItem() {} - -PlaylistItem *PlaylistItem::NewFromSource(const Song::Source &source) { +PlaylistItem *PlaylistItem::NewFromSource(const Song::Source source) { switch (source) { case Song::Source_Collection: @@ -61,6 +59,29 @@ PlaylistItem *PlaylistItem::NewFromSource(const Song::Source &source) { } +PlaylistItem *PlaylistItem::NewFromSong(const Song &song) { + + switch (song.source()) { + case Song::Source_Collection: + return new CollectionPlaylistItem(song); + case Song::Source_Subsonic: + case Song::Source_Tidal: + case Song::Source_Qobuz: + case Song::Source_Stream: + return new InternetPlaylistItem(song); + case Song::Source_LocalFile: + case Song::Source_CDDA: + case Song::Source_Device: + case Song::Source_Unknown: + break; + } + + return new SongPlaylistItem(song); + +} + +PlaylistItem::~PlaylistItem() {} + void PlaylistItem::BindToQuery(QSqlQuery *query) const { query->bindValue(":type", source_); diff --git a/src/playlist/playlistitem.h b/src/playlist/playlistitem.h index 7db03484d..24663b8e4 100644 --- a/src/playlist/playlistitem.h +++ b/src/playlist/playlistitem.h @@ -48,7 +48,8 @@ class PlaylistItem : public std::enable_shared_from_this { explicit PlaylistItem(const Song::Source &source) : should_skip_(false), source_(source) {} virtual ~PlaylistItem(); - static PlaylistItem *NewFromSource(const Song::Source &source); + static PlaylistItem *NewFromSource(const Song::Source source); + static PlaylistItem *NewFromSong(const Song &song); enum Option { Default = 0x00,