Reformat intergalacticfm service

This commit is contained in:
John Maguire 2016-04-06 15:45:25 +01:00
parent 9291f09b1b
commit 6693a870ad
7 changed files with 50 additions and 39 deletions

View File

@ -96,7 +96,8 @@ void RegisterMetaTypes() {
qRegisterMetaType<smart_playlists::GeneratorPtr>( qRegisterMetaType<smart_playlists::GeneratorPtr>(
"smart_playlists::GeneratorPtr"); "smart_playlists::GeneratorPtr");
qRegisterMetaType<SomaFMService::Stream>("SomaFMService::Stream"); qRegisterMetaType<SomaFMService::Stream>("SomaFMService::Stream");
qRegisterMetaType<IntergalacticFMService::Stream>("IntergalacticFMService::Stream"); qRegisterMetaType<IntergalacticFMService::Stream>(
"IntergalacticFMService::Stream");
qRegisterMetaType<SongList>("SongList"); qRegisterMetaType<SongList>("SongList");
qRegisterMetaType<Song>("Song"); qRegisterMetaType<Song>("Song");
qRegisterMetaTypeStreamOperators<DigitallyImportedClient::Channel>( qRegisterMetaTypeStreamOperators<DigitallyImportedClient::Channel>(

View File

@ -17,8 +17,8 @@
#include "intergalacticfmsearchprovider.h" #include "intergalacticfmsearchprovider.h"
IntergalacticFMSearchProvider::IntergalacticFMSearchProvider(IntergalacticFMServiceBase* service, IntergalacticFMSearchProvider::IntergalacticFMSearchProvider(
Application* app, QObject* parent) IntergalacticFMServiceBase* service, Application* app, QObject* parent)
: SimpleSearchProvider(app, parent), service_(service) { : SimpleSearchProvider(app, parent), service_(service) {
Init(service->name(), service->url_scheme(), service->icon(), Init(service->name(), service->url_scheme(), service->icon(),
CanGiveSuggestions); CanGiveSuggestions);

View File

@ -23,8 +23,8 @@
class IntergalacticFMSearchProvider : public SimpleSearchProvider { class IntergalacticFMSearchProvider : public SimpleSearchProvider {
public: public:
IntergalacticFMSearchProvider(IntergalacticFMServiceBase* service, Application* app, IntergalacticFMSearchProvider(IntergalacticFMServiceBase* service,
QObject* parent); Application* app, QObject* parent);
// SearchProvider // SearchProvider
InternetService* internet_service() override { return service_; } InternetService* internet_service() override { return service_; }

View File

@ -50,12 +50,10 @@ bool operator<(const IntergalacticFMServiceBase::Stream& a,
return a.title_.compare(b.title_, Qt::CaseInsensitive) < 0; return a.title_.compare(b.title_, Qt::CaseInsensitive) < 0;
} }
IntergalacticFMServiceBase::IntergalacticFMServiceBase(Application* app, InternetModel* parent, IntergalacticFMServiceBase::IntergalacticFMServiceBase(
const QString& name, Application* app, InternetModel* parent, const QString& name,
const QUrl& channel_list_url, const QUrl& channel_list_url, const QUrl& homepage_url,
const QUrl& homepage_url, const QUrl& donate_page_url, const QIcon& icon)
const QUrl& donate_page_url,
const QIcon& icon)
: InternetService(name, app, parent, parent), : InternetService(name, app, parent, parent),
url_scheme_(name.toLower().remove(' ')), url_scheme_(name.toLower().remove(' ')),
url_handler_(new IntergalacticFMUrlHandler(app, this, this)), url_handler_(new IntergalacticFMUrlHandler(app, this, this)),
@ -75,7 +73,9 @@ IntergalacticFMServiceBase::IntergalacticFMServiceBase(Application* app, Interne
new IntergalacticFMSearchProvider(this, app_, this)); new IntergalacticFMSearchProvider(this, app_, this));
} }
IntergalacticFMServiceBase::~IntergalacticFMServiceBase() { delete context_menu_; } IntergalacticFMServiceBase::~IntergalacticFMServiceBase() {
delete context_menu_;
}
QStandardItem* IntergalacticFMServiceBase::CreateRootItem() { QStandardItem* IntergalacticFMServiceBase::CreateRootItem() {
root_ = new QStandardItem(icon_, name_); root_ = new QStandardItem(icon_, name_);
@ -103,11 +103,11 @@ void IntergalacticFMServiceBase::ShowContextMenu(const QPoint& global_pos) {
this, SLOT(Homepage())); this, SLOT(Homepage()));
if (!donate_page_url_.isEmpty()) { if (!donate_page_url_.isEmpty()) {
context_menu_->addAction(IconLoader::Load("download", IconLoader::Base), context_menu_->addAction(IconLoader::Load("download", IconLoader::Base),
tr("Donate"), this, SLOT(Donate())); tr("Donate"), this, SLOT(Donate()));
} }
context_menu_->addAction(IconLoader::Load("view-refresh", IconLoader::Base), context_menu_->addAction(IconLoader::Load("view-refresh", IconLoader::Base),
tr("Refresh channels"), this, tr("Refresh channels"), this,
SLOT(ForceRefreshStreams())); SLOT(ForceRefreshStreams()));
} }
@ -124,7 +124,7 @@ void IntergalacticFMServiceBase::ForceRefreshStreams() {
} }
void IntergalacticFMServiceBase::RefreshStreamsFinished(QNetworkReply* reply, void IntergalacticFMServiceBase::RefreshStreamsFinished(QNetworkReply* reply,
int task_id) { int task_id) {
app_->task_manager()->SetTaskFinished(task_id); app_->task_manager()->SetTaskFinished(task_id);
reply->deleteLater(); reply->deleteLater();
@ -155,7 +155,8 @@ void IntergalacticFMServiceBase::RefreshStreamsFinished(QNetworkReply* reply,
emit StreamsChanged(); emit StreamsChanged();
} }
void IntergalacticFMServiceBase::ReadChannel(QXmlStreamReader& reader, StreamList* ret) { void IntergalacticFMServiceBase::ReadChannel(QXmlStreamReader& reader,
StreamList* ret) {
Stream stream; Stream stream;
bool found = false; bool found = false;
@ -179,8 +180,7 @@ void IntergalacticFMServiceBase::ReadChannel(QXmlStreamReader& reader, StreamLis
stream.url_ = url; stream.url_ = url;
found = true; found = true;
} else if (found == false && } else if (!found && reader.name() == "highestpls" &&
reader.name() == "highestpls" &&
reader.attributes().value("format") == "mp3") { reader.attributes().value("format") == "mp3") {
QUrl url(reader.readElementText()); QUrl url(reader.readElementText());
url.setScheme(url_handler_->scheme()); url.setScheme(url_handler_->scheme());
@ -211,7 +211,9 @@ Song IntergalacticFMServiceBase::Stream::ToSong(const QString& prefix) const {
return ret; return ret;
} }
void IntergalacticFMServiceBase::Homepage() { QDesktopServices::openUrl(homepage_url_); } void IntergalacticFMServiceBase::Homepage() {
QDesktopServices::openUrl(homepage_url_);
}
void IntergalacticFMServiceBase::Donate() { void IntergalacticFMServiceBase::Donate() {
QDesktopServices::openUrl(donate_page_url_); QDesktopServices::openUrl(donate_page_url_);
@ -241,9 +243,8 @@ void IntergalacticFMServiceBase::PopulateStreams() {
if (root_->hasChildren()) root_->removeRows(0, root_->rowCount()); if (root_->hasChildren()) root_->removeRows(0, root_->rowCount());
for (const Stream& stream : streams_) { for (const Stream& stream : streams_) {
QStandardItem* item = QStandardItem* item = new QStandardItem(
new QStandardItem(IconLoader::Load("icon_radio", IconLoader::Lastfm), IconLoader::Load("icon_radio", IconLoader::Lastfm), QString());
QString());
item->setText(stream.title_); item->setText(stream.title_);
item->setData(QVariant::fromValue(stream.ToSong(name_)), item->setData(QVariant::fromValue(stream.ToSong(name_)),
InternetModel::Role_SongMetadata); InternetModel::Role_SongMetadata);
@ -260,7 +261,8 @@ QDataStream& operator<<(QDataStream& out,
return out; return out;
} }
QDataStream& operator>>(QDataStream& in, IntergalacticFMServiceBase::Stream& stream) { QDataStream& operator>>(QDataStream& in,
IntergalacticFMServiceBase::Stream& stream) {
in >> stream.title_ >> stream.dj_ >> stream.url_; in >> stream.title_ >> stream.dj_ >> stream.url_;
return in; return in;
} }
@ -270,8 +272,10 @@ void IntergalacticFMServiceBase::ReloadSettings() {
streams_.Sort(); streams_.Sort();
} }
IntergalacticFMService::IntergalacticFMService(Application* app, InternetModel* parent) IntergalacticFMService::IntergalacticFMService(Application* app,
InternetModel* parent)
: IntergalacticFMServiceBase( : IntergalacticFMServiceBase(
app, parent, "Intergalactic FM", QUrl("https://intergalacticfm.com/channels.xml"), app, parent, "Intergalactic FM",
QUrl("http://intergalacticfm.com"), QUrl(), IconLoader::Load("intergalacticfm", QUrl("https://intergalacticfm.com/channels.xml"),
IconLoader::Provider)) {} QUrl("http://intergalacticfm.com"), QUrl(),
IconLoader::Load("intergalacticfm", IconLoader::Provider)) {}

View File

@ -36,9 +36,9 @@ class IntergalacticFMServiceBase : public InternetService {
public: public:
IntergalacticFMServiceBase(Application* app, InternetModel* parent, IntergalacticFMServiceBase(Application* app, InternetModel* parent,
const QString& name, const QUrl& channel_list_url, const QString& name, const QUrl& channel_list_url,
const QUrl& homepage_url, const QUrl& donate_page_url, const QUrl& homepage_url,
const QIcon& icon); const QUrl& donate_page_url, const QIcon& icon);
~IntergalacticFMServiceBase(); ~IntergalacticFMServiceBase();
enum ItemType { enum ItemType {
@ -71,7 +71,7 @@ class IntergalacticFMServiceBase : public InternetService {
bool IsStreamListStale() const { return streams_.IsStale(); } bool IsStreamListStale() const { return streams_.IsStale(); }
StreamList Streams(); StreamList Streams();
signals: signals:
void StreamsChanged(); void StreamsChanged();
private slots: private slots:
@ -109,8 +109,10 @@ class IntergalacticFMService : public IntergalacticFMServiceBase {
IntergalacticFMService(Application* app, InternetModel* parent); IntergalacticFMService(Application* app, InternetModel* parent);
}; };
QDataStream& operator<<(QDataStream& out, const IntergalacticFMService::Stream& stream); QDataStream& operator<<(QDataStream& out,
QDataStream& operator>>(QDataStream& in, IntergalacticFMService::Stream& stream); const IntergalacticFMService::Stream& stream);
QDataStream& operator>>(QDataStream& in,
IntergalacticFMService::Stream& stream);
Q_DECLARE_METATYPE(IntergalacticFMService::Stream) Q_DECLARE_METATYPE(IntergalacticFMService::Stream)
#endif // INTERNET_INTERGALACTICFM_INTERGALACTICFMSERVICE_H_ #endif // INTERNET_INTERGALACTICFM_INTERGALACTICFMSERVICE_H_

View File

@ -32,15 +32,18 @@
#include "core/taskmanager.h" #include "core/taskmanager.h"
#include "playlistparsers/playlistparser.h" #include "playlistparsers/playlistparser.h"
IntergalacticFMUrlHandler::IntergalacticFMUrlHandler(Application* app, IntergalacticFMServiceBase* service, IntergalacticFMUrlHandler::IntergalacticFMUrlHandler(
QObject* parent) Application* app, IntergalacticFMServiceBase* service, QObject* parent)
: UrlHandler(parent), app_(app), service_(service), task_id_(0) {} : UrlHandler(parent), app_(app), service_(service), task_id_(0) {}
QString IntergalacticFMUrlHandler::scheme() const { return service_->url_scheme(); } QString IntergalacticFMUrlHandler::scheme() const {
return service_->url_scheme();
}
QIcon IntergalacticFMUrlHandler::icon() const { return service_->icon(); } QIcon IntergalacticFMUrlHandler::icon() const { return service_->icon(); }
UrlHandler::LoadResult IntergalacticFMUrlHandler::StartLoading(const QUrl& url) { UrlHandler::LoadResult IntergalacticFMUrlHandler::StartLoading(
const QUrl& url) {
QUrl playlist_url = url; QUrl playlist_url = url;
playlist_url.setScheme("https"); playlist_url.setScheme("https");

View File

@ -29,8 +29,9 @@ class IntergalacticFMUrlHandler : public UrlHandler {
Q_OBJECT Q_OBJECT
public: public:
IntergalacticFMUrlHandler(Application* app, IntergalacticFMServiceBase* service, IntergalacticFMUrlHandler(Application* app,
QObject* parent); IntergalacticFMServiceBase* service,
QObject* parent);
QString scheme() const; QString scheme() const;
QIcon icon() const; QIcon icon() const;