Qobuz: Fix authentication and add automatic credential fetching

Qobuz API now requires intent=stream parameter for stream URL requests,
and the app_secret must be extracted using the Spoofbuz decoding method
from bundle.js rather than plain-text values.

Changes:
- Add intent=stream parameter to stream URL requests
- Add QobuzCredentialFetcher class to extract credentials from web player
- Add "Fetch Credentials" button to Qobuz settings page
- Decode obfuscated app secrets using seed/timezone/info/extras method

This fixes "Invalid Request Signature" errors that prevented playback.
This commit is contained in:
Rob Stanfield
2025-12-17 18:18:14 -08:00
committed by Jonas Kvinge
parent 2cd9498469
commit 2bb0dbada2
8 changed files with 397 additions and 1 deletions

View File

@@ -115,6 +115,7 @@ void QobuzStreamURLRequest::GetStreamURL() {
const quint64 timestamp = static_cast<quint64>(QDateTime::currentSecsSinceEpoch());
ParamList params_to_sign = ParamList() << Param(u"format_id"_s, QString::number(service_->format()))
<< Param(u"intent"_s, u"stream"_s)
<< Param(u"track_id"_s, QString::number(song_id_));
std::sort(params_to_sign.begin(), params_to_sign.end());