Make tidal token configurable

This commit is contained in:
Jonas Kvinge
2019-05-13 23:49:09 +02:00
parent f33609bbf8
commit 7cc9c75d15
6 changed files with 99 additions and 53 deletions

View File

@@ -118,14 +118,16 @@ void TidalService::ReloadSettings() {
QByteArray password = s.value("password").toByteArray();
if (password.isEmpty()) password_.clear();
else password_ = QString::fromUtf8(QByteArray::fromBase64(password));
quality_ = s.value("quality").toString();
token_ = s.value("token").toString();
if (token_.isEmpty()) token_ = QString::fromUtf8(QByteArray::fromBase64(kApiTokenB64));
quality_ = s.value("quality", "LOSSLESS").toString();
search_delay_ = s.value("searchdelay", 1500).toInt();
artistssearchlimit_ = s.value("artistssearchlimit", 5).toInt();
albumssearchlimit_ = s.value("albumssearchlimit", 100).toInt();
songssearchlimit_ = s.value("songssearchlimit", 100).toInt();
fetchalbums_ = s.value("fetchalbums", false).toBool();
coversize_ = s.value("coversize", "320x320").toString();
streamurl_ = s.value("streamurl", "http").toString();
streamurl_ = s.value("streamurl", "default").toString();
s.endGroup();
}
@@ -144,10 +146,10 @@ void TidalService::LoadSessionID() {
}
void TidalService::SendLogin() {
SendLogin(username_, password_);
SendLogin(username_, password_, token_);
}
void TidalService::SendLogin(const QString &username, const QString &password) {
void TidalService::SendLogin(const QString &username, const QString &password, const QString &token) {
if (search_id_ != 0) emit UpdateStatus(tr("Authenticating..."));
@@ -163,7 +165,7 @@ void TidalService::SendLogin(const QString &username, const QString &password) {
typedef QPair<QByteArray, QByteArray> EncodedArg;
typedef QList<EncodedArg> EncodedArgList;
ArgList args = ArgList() << Arg("token", QByteArray::fromBase64(kApiTokenB64))
ArgList args = ArgList() << Arg("token", token_)
<< Arg("username", username)
<< Arg("password", password)
<< Arg("clientVersion", "2.2.1--7");
@@ -180,7 +182,7 @@ void TidalService::SendLogin(const QString &username, const QString &password) {
QNetworkRequest req(url);
req.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded");
req.setRawHeader("X-Tidal-Token", QByteArray::fromBase64(kApiTokenB64));
req.setRawHeader("X-Tidal-Token", token_.toUtf8());
QNetworkReply *reply = network_->post(req, url_query.toString(QUrl::FullyEncoded).toUtf8());
NewClosure(reply, SIGNAL(finished()), this, SLOT(HandleAuthReply(QNetworkReply*)), reply);
@@ -1037,7 +1039,7 @@ void TidalService::StreamURLReceived(QNetworkReply *reply, const int song_id, co
filetype = Song::FileType_Stream;
}
if (new_url.scheme() != streamurl_) new_url.setScheme(streamurl_);
if (new_url.scheme() != streamurl_ && streamurl_.toLower() != "default") new_url.setScheme(streamurl_);
emit StreamURLFinished(original_url, new_url, filetype);

View File

@@ -62,6 +62,7 @@ class TidalService : public InternetService {
const bool login_sent() { return login_sent_; }
const bool authenticated() { return (!session_id_.isEmpty() && !country_code_.isEmpty()); }
QString token() { return token_; }
QString session_id() { return session_id_; }
QString country_code() { return country_code_; }
@@ -81,7 +82,7 @@ class TidalService : public InternetService {
public slots:
void ShowConfig();
void SendLogin(const QString &username, const QString &password);
void SendLogin(const QString &username, const QString &password, const QString &token);
private slots:
void SendLogin();
@@ -128,6 +129,7 @@ class TidalService : public InternetService {
QTimer *timer_search_delay_;
QTimer *timer_login_attempt_;
QString token_;
QString username_;
QString password_;
QString quality_;