diff --git a/src/internet/core/internetplaylistitem.cpp b/src/internet/core/internetplaylistitem.cpp index 400e6a5ff..08b62a94d 100644 --- a/src/internet/core/internetplaylistitem.cpp +++ b/src/internet/core/internetplaylistitem.cpp @@ -31,8 +31,10 @@ #include "library/sqlrow.h" #include "playlist/playlistbackend.h" +// Note that the "Radio" type is legacy and only supported for database +// backwards compatibility, so this uses "Internet" for all types. InternetPlaylistItem::InternetPlaylistItem(const QString& type) - : PlaylistItem(type), set_service_icon_(false) {} + : PlaylistItem("Internet"), set_service_icon_(false) {} InternetPlaylistItem::InternetPlaylistItem(InternetService* service, const Song& metadata) @@ -43,6 +45,12 @@ InternetPlaylistItem::InternetPlaylistItem(InternetService* service, InitMetadata(); } +bool InternetPlaylistItem::IsTypeSupported(const QString& type) { + if (type == "Radio") return true; + if (type == "Internet") return true; + return false; +} + bool InternetPlaylistItem::InitFromQuery(const SqlRow& query) { // The song tables gets joined first, plus one each for the song ROWIDs const int row = diff --git a/src/internet/core/internetplaylistitem.h b/src/internet/core/internetplaylistitem.h index 41cb77d09..320f2eece 100644 --- a/src/internet/core/internetplaylistitem.h +++ b/src/internet/core/internetplaylistitem.h @@ -34,6 +34,8 @@ class InternetPlaylistItem : public PlaylistItem { explicit InternetPlaylistItem(const QString& type); InternetPlaylistItem(InternetService* service, const Song& metadata); + static bool IsTypeSupported(const QString& type); + Options options() const; QList actions(); diff --git a/src/internet/jamendo/jamendoplaylistitem.cpp b/src/internet/jamendo/jamendoplaylistitem.cpp index f8a482594..bdc218317 100644 --- a/src/internet/jamendo/jamendoplaylistitem.cpp +++ b/src/internet/jamendo/jamendoplaylistitem.cpp @@ -25,6 +25,10 @@ JamendoPlaylistItem::JamendoPlaylistItem(const QString& type) JamendoPlaylistItem::JamendoPlaylistItem(const Song& song) : DbPlaylistItem("Jamendo", song) {} +bool JamendoPlaylistItem::IsTypeSupported(const QString& type) { + return type == "Jamendo"; +} + bool JamendoPlaylistItem::InitFromQuery(const SqlRow& query) { // Rows from the songs tables come first song_.InitFromQuery(query, true, (Song::kColumns.count() + 1) * 2); diff --git a/src/internet/jamendo/jamendoplaylistitem.h b/src/internet/jamendo/jamendoplaylistitem.h index 85eef5800..f793b7d20 100644 --- a/src/internet/jamendo/jamendoplaylistitem.h +++ b/src/internet/jamendo/jamendoplaylistitem.h @@ -27,6 +27,8 @@ class JamendoPlaylistItem : public DbPlaylistItem { explicit JamendoPlaylistItem(const QString& type); explicit JamendoPlaylistItem(const Song& song); + static bool IsTypeSupported(const QString& type); + bool InitFromQuery(const SqlRow& query); }; diff --git a/src/internet/magnatune/magnatuneplaylistitem.cpp b/src/internet/magnatune/magnatuneplaylistitem.cpp index ee1669173..03856cf46 100644 --- a/src/internet/magnatune/magnatuneplaylistitem.cpp +++ b/src/internet/magnatune/magnatuneplaylistitem.cpp @@ -26,6 +26,10 @@ MagnatunePlaylistItem::MagnatunePlaylistItem(const QString& type) MagnatunePlaylistItem::MagnatunePlaylistItem(const Song& song) : DbPlaylistItem("Magnatune", song) {} +bool MagnatunePlaylistItem::IsTypeSupported(const QString& type) { + return type == "Magnatune"; +} + bool MagnatunePlaylistItem::InitFromQuery(const SqlRow& query) { // Rows from the songs tables come first song_.InitFromQuery(query, true, Song::kColumns.count() + 1); diff --git a/src/internet/magnatune/magnatuneplaylistitem.h b/src/internet/magnatune/magnatuneplaylistitem.h index f41fb5465..8c31ff99e 100644 --- a/src/internet/magnatune/magnatuneplaylistitem.h +++ b/src/internet/magnatune/magnatuneplaylistitem.h @@ -27,6 +27,8 @@ class MagnatunePlaylistItem : public DbPlaylistItem { explicit MagnatunePlaylistItem(const QString& type); explicit MagnatunePlaylistItem(const Song& song); + static bool IsTypeSupported(const QString& type); + bool InitFromQuery(const SqlRow& query); }; diff --git a/src/library/libraryplaylistitem.cpp b/src/library/libraryplaylistitem.cpp index d30cb04fe..57eccf174 100644 --- a/src/library/libraryplaylistitem.cpp +++ b/src/library/libraryplaylistitem.cpp @@ -26,6 +26,10 @@ LibraryPlaylistItem::LibraryPlaylistItem(const QString& type) LibraryPlaylistItem::LibraryPlaylistItem(const Song& song) : DbPlaylistItem("Library", song) {} +bool LibraryPlaylistItem::IsTypeSupported(const QString& type) { + return type == "Library"; +} + void LibraryPlaylistItem::Reload() { TagReaderClient::Instance()->ReadFileBlocking(song_.url().toLocalFile(), &song_); diff --git a/src/library/libraryplaylistitem.h b/src/library/libraryplaylistitem.h index bbd15d2af..de9ca0008 100644 --- a/src/library/libraryplaylistitem.h +++ b/src/library/libraryplaylistitem.h @@ -26,6 +26,8 @@ class LibraryPlaylistItem : public DbPlaylistItem { LibraryPlaylistItem(const QString& type); LibraryPlaylistItem(const Song& song); + static bool IsTypeSupported(const QString& type); + bool InitFromQuery(const SqlRow& query); void Reload(); diff --git a/src/playlist/playlistitem.cpp b/src/playlist/playlistitem.cpp index 55c7cdb03..ad3289853 100644 --- a/src/playlist/playlistitem.cpp +++ b/src/playlist/playlistitem.cpp @@ -34,12 +34,16 @@ PlaylistItem::~PlaylistItem() {} PlaylistItem* PlaylistItem::NewFromType(const QString& type) { - if (type == "Library") return new LibraryPlaylistItem(type); - if (type == "Magnatune") return new MagnatunePlaylistItem(type); - if (type == "Jamendo") return new JamendoPlaylistItem(type); - if (type == "Stream" || type == "File") return new SongPlaylistItem(type); - if (type == "Internet" || type == "Radio") - return new InternetPlaylistItem("Internet"); + if (LibraryPlaylistItem::IsTypeSupported(type)) + return new LibraryPlaylistItem(type); + if (MagnatunePlaylistItem::IsTypeSupported(type)) + return new MagnatunePlaylistItem(type); + if (JamendoPlaylistItem::IsTypeSupported(type)) + return new JamendoPlaylistItem(type); + if (SongPlaylistItem::IsTypeSupported(type)) + return new SongPlaylistItem(type); + if (InternetPlaylistItem::IsTypeSupported(type)) + return new InternetPlaylistItem(type); qLog(Warning) << "Invalid PlaylistItem type:" << type; return nullptr; diff --git a/src/playlist/songplaylistitem.cpp b/src/playlist/songplaylistitem.cpp index 446147f1b..137326b15 100644 --- a/src/playlist/songplaylistitem.cpp +++ b/src/playlist/songplaylistitem.cpp @@ -30,6 +30,12 @@ SongPlaylistItem::SongPlaylistItem(const QString& type) : PlaylistItem(type) {} SongPlaylistItem::SongPlaylistItem(const Song& song) : PlaylistItem(song.is_stream() ? "Stream" : "File"), song_(song) {} +bool SongPlaylistItem::IsTypeSupported(const QString& type) { + if (type == "Stream") return true; + if (type == "File") return true; + return false; +} + bool SongPlaylistItem::InitFromQuery(const SqlRow& query) { song_.InitFromQuery(query, false, (Song::kColumns.count() + 1) * 3); diff --git a/src/playlist/songplaylistitem.h b/src/playlist/songplaylistitem.h index 36861c8f8..f2315a84c 100644 --- a/src/playlist/songplaylistitem.h +++ b/src/playlist/songplaylistitem.h @@ -26,6 +26,8 @@ class SongPlaylistItem : public PlaylistItem { SongPlaylistItem(const QString& type); SongPlaylistItem(const Song& song); + static bool IsTypeSupported(const QString& type); + // Restores a stream- or file-related playlist item using query row. // If it's a file related playlist item, this will restore it's CUE // attributes (if any) but won't parse the CUE!