From 4619a4c1ab3b17b13d4b2327ad477912917eaf36 Mon Sep 17 00:00:00 2001 From: ftiede Date: Wed, 23 May 2018 15:23:21 +0200 Subject: [PATCH] Work around Qt's QUrl parser. (#6059) Qt's QUrl parser does no longer accept pure numeric hostnames without trying to make a dotted IPv4 address of them. Thus current method of storing subsonic's numeric ids in the host part of a QUrl ("subsonic://") does no longer work. Instead a query is constructed omitting the host-part entirely and using "subsonic://?id=" to store and retrieve subsonic titles. --- src/internet/subsonic/subsonicservice.cpp | 5 ++++- src/internet/subsonic/subsonicurlhandler.cpp | 3 ++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/internet/subsonic/subsonicservice.cpp b/src/internet/subsonic/subsonicservice.cpp index cce04a32a..24ad4588e 100644 --- a/src/internet/subsonic/subsonicservice.cpp +++ b/src/internet/subsonic/subsonicservice.cpp @@ -541,7 +541,10 @@ void SubsonicLibraryScanner::OnGetAlbumFinished(QNetworkReply* reply) { qint64 length = reader.attributes().value("duration").toString().toInt(); length *= kNsecPerSec; song.set_length_nanosec(length); - QUrl url = QUrl(QString("subsonic://%1").arg(id)); + QUrl url = QUrl(QString("subsonic://")); + QUrlQuery song_query(url.query()); + song_query.addQueryItem("id", id); + url.setQuery(song_query); QUrl cover_url = service_->BuildRequestUrl("getCoverArt"); QUrlQuery cover_url_query(url.query()); cover_url_query.addQueryItem("id", id); diff --git a/src/internet/subsonic/subsonicurlhandler.cpp b/src/internet/subsonic/subsonicurlhandler.cpp index 91177cf90..f3a33faac 100644 --- a/src/internet/subsonic/subsonicurlhandler.cpp +++ b/src/internet/subsonic/subsonicurlhandler.cpp @@ -30,9 +30,10 @@ UrlHandler::LoadResult SubsonicUrlHandler::StartLoading(const QUrl& url) { if (service_->login_state() != SubsonicService::LoginState_Loggedin) return LoadResult(url); + QUrlQuery id(url.query()); QUrl newurl = service_->BuildRequestUrl("stream"); QUrlQuery url_query(newurl.query()); - url_query.addQueryItem("id", url.host()); + url_query.addQueryItem("id", id.queryItemValue("id")); newurl.setQuery(url_query); return LoadResult(url, LoadResult::TrackAvailable, newurl); }