From bde6d9cc5b7e09b77e6789e6959c9706f24dfbd3 Mon Sep 17 00:00:00 2001 From: Jim Broadus Date: Thu, 11 Mar 2021 23:20:32 -0800 Subject: [PATCH] player: Add original request URL to playback request --- src/core/player.cpp | 14 +++++++------- src/engines/playbackrequest.h | 10 +++++++++- 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/src/core/player.cpp b/src/core/player.cpp index d8efd3f8e..11618659b 100644 --- a/src/core/player.cpp +++ b/src/core/player.cpp @@ -146,7 +146,7 @@ void Player::HandleLoadResult(const UrlHandler::LoadResult& result) { item->SetTemporaryMetadata(song); app_->playlist_manager()->active()->InformOfCurrentSongChange(); } - MediaPlaybackRequest req(result.media_url_); + MediaPlaybackRequest req(result.original_url_, result.media_url_); if (!result.auth_header_.isEmpty()) req.headers_["Authorization"] = result.auth_header_; engine_->Play(req, stream_change_type_, item->Metadata().has_cue(), @@ -643,25 +643,25 @@ void Player::TrackAboutToEnd() { // gap between songs. if (!has_next_row || !next_item) return; - QUrl url = next_item->Url(); + MediaPlaybackRequest req(next_item->Url()); // Get the actual track URL rather than the stream URL. - if (url_handlers_.contains(url.scheme())) { - UrlHandler::LoadResult result = url_handlers_[url.scheme()]->LoadNext(url); + UrlHandler* handler = url_handlers_.value(req.RequestUrl().scheme(), nullptr); + if (handler != nullptr) { + UrlHandler::LoadResult result = handler->LoadNext(req.RequestUrl()); switch (result.type_) { case UrlHandler::LoadResult::NoMoreTracks: return; case UrlHandler::LoadResult::WillLoadAsynchronously: - loading_async_ = url; + loading_async_ = req.RequestUrl(); return; case UrlHandler::LoadResult::TrackAvailable: - url = result.media_url_; + req.SetMediaUrl(result.media_url_); break; } } - MediaPlaybackRequest req(url); engine_->StartPreloading(req, next_item->Metadata().has_cue(), next_item->Metadata().beginning_nanosec(), next_item->Metadata().end_nanosec()); diff --git a/src/engines/playbackrequest.h b/src/engines/playbackrequest.h index 02812ffe9..466107baa 100644 --- a/src/engines/playbackrequest.h +++ b/src/engines/playbackrequest.h @@ -23,9 +23,17 @@ class MediaPlaybackRequest { public: - MediaPlaybackRequest(const QUrl& url) : url_(url) {} + // For local songs and raw streams, the request and media URLs are the same. + MediaPlaybackRequest(const QUrl& url) : request_url_(url), url_(url) {} + MediaPlaybackRequest(const QUrl& request_url, const QUrl& media_url) + : request_url_(request_url), url_(media_url) {} MediaPlaybackRequest() {} + const QUrl& RequestUrl() const { return request_url_; } + const QUrl& MediaUrl() const { return url_; } + void SetMediaUrl(const QUrl& url) { url_ = url; } + + QUrl request_url_; QUrl url_; typedef QMap HeaderList;