/* This file is part of Clementine. Copyright 2009-2011, David Sansome Copyright 2010, 2014, John Maguire Copyright 2011, Tyler Rhodes Copyright 2011, Arnaud Bienner Copyright 2014, Krzysztof Sobiecki Clementine is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Clementine is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Clementine. If not, see . */ #include "internet/core/internetplaylistitem.h" #include #include #include #include "core/settingsprovider.h" #include "internet/core/internetmodel.h" #include "internet/core/internetservice.h" #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("Internet"), set_service_icon_(false) {} InternetPlaylistItem::InternetPlaylistItem(InternetService* service, const Song& metadata) : PlaylistItem("Internet"), service_name_(service->name()), set_service_icon_(false), metadata_(metadata) { 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 = (Song::kColumns.count() + 1) * PlaylistBackend::kSongTableJoins; service_name_ = query.value(row + 1).toString(); metadata_.InitFromQuery(query, false, (Song::kColumns.count() + 1) * 3); InitMetadata(); return true; } InternetService* InternetPlaylistItem::service() const { InternetService* ret = InternetModel::ServiceByName(service_name_); if (ret && !set_service_icon_) { const_cast(this)->set_service_icon_ = true; QString icon = ret->Icon(); if (!icon.isEmpty()) { const_cast(this)->metadata_.set_art_manual(icon); } } return ret; } QVariant InternetPlaylistItem::DatabaseValue(DatabaseColumn column) const { switch (column) { case Column_InternetService: return service_name_; default: return PlaylistItem::DatabaseValue(column); } } void InternetPlaylistItem::InitMetadata() { if (metadata_.title().isEmpty()) metadata_.set_title(metadata_.url().toString()); metadata_.set_filetype(Song::Type_Stream); metadata_.set_valid(true); } Song InternetPlaylistItem::Metadata() const { if (!set_service_icon_) { // Get the icon if we don't have it already service(); } if (HasTemporaryMetadata()) return temp_metadata_; return metadata_; } QUrl InternetPlaylistItem::Url() const { return metadata_.url(); } PlaylistItem::Options InternetPlaylistItem::options() const { InternetService* s = service(); if (!s) return Default; return s->playlistitem_options(); } QList InternetPlaylistItem::actions() { InternetService* s = service(); if (!s) return QList(); return s->playlistitem_actions(metadata_); }