From cd561af516314a9f799b00ecd01c0464478beea1 Mon Sep 17 00:00:00 2001 From: Fabio Bas Date: Sat, 27 Mar 2021 23:17:14 +0100 Subject: [PATCH] radiobrowser url handler: emit metadata for radio stations --- .../radiobrowser/radiobrowserservice.cpp | 26 ++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/src/internet/radiobrowser/radiobrowserservice.cpp b/src/internet/radiobrowser/radiobrowserservice.cpp index ccfea99f8..6d7130377 100644 --- a/src/internet/radiobrowser/radiobrowserservice.cpp +++ b/src/internet/radiobrowser/radiobrowserservice.cpp @@ -71,6 +71,7 @@ QList BranchList = { RadioBrowserService::Type_Top100}}; QString SearchUrl = "%1/json/stations/byname/%2?limit=%3"; +QString StationDetailsUrl = "%1/json/stations/byuuid?uuids=%2"; QString PlayClickUrl = "%1/json/url/%2"; void ReadStation(const QJsonObject& item, RadioBrowserService::StreamList* ret, @@ -408,7 +409,7 @@ void RadioBrowserService::Search(int search_id, const QString& query, void RadioBrowserService::ResolveStationUrl(const QUrl& original_url) { QString determinedUrl = - PlayClickUrl.arg(main_server_url_, original_url.path()); + StationDetailsUrl.arg(main_server_url_, original_url.path()); QUrl url(determinedUrl); QNetworkReply* reply = network_->get(QNetworkRequest(url)); @@ -419,9 +420,28 @@ void RadioBrowserService::ResolveStationUrl(const QUrl& original_url) { reply->deleteLater(); QJsonDocument document = ParseJsonReply(reply); - QJsonObject item = document.object(); + StreamList list; + QJsonArray contents = document.array(); + QJsonValue item = contents.first(); + if (item.isUndefined()) return; + + Song ret; + ret.set_valid(true); + ret.set_title(item["name"].toString()); QUrl url(item["url"].toString()); - emit StationUrlResolved(original_url, url); + ret.set_url(url); + ret.set_art_automatic(item["favicon"].toString()); + + emit StreamMetadataFound(original_url, ret); + emit StationUrlResolved(original_url, ret.url()); + + // inform the server that we played the station + QString determinedUrl = + PlayClickUrl.arg(main_server_url_, original_url.path()); + QUrl playUrl(determinedUrl); + QNetworkReply* playReply = network_->get(QNetworkRequest(playUrl)); + connect(playReply, &QNetworkReply::finished, + [=] { playReply->deleteLater(); }); }); }