Port to QStringLiteral operator
This commit is contained in:
@@ -50,7 +50,7 @@ TidalBaseRequest::TidalBaseRequest(TidalService *service, SharedPtr<NetworkAcces
|
||||
QNetworkReply *TidalBaseRequest::CreateRequest(const QString &ressource_name, const ParamList ¶ms_provided) {
|
||||
|
||||
const ParamList params = ParamList() << params_provided
|
||||
<< Param(QStringLiteral("countryCode"), country_code());
|
||||
<< Param(u"countryCode"_s, country_code());
|
||||
|
||||
QUrlQuery url_query;
|
||||
for (const Param ¶m : params) {
|
||||
@@ -61,7 +61,7 @@ QNetworkReply *TidalBaseRequest::CreateRequest(const QString &ressource_name, co
|
||||
url.setQuery(url_query);
|
||||
QNetworkRequest req(url);
|
||||
req.setAttribute(QNetworkRequest::RedirectPolicyAttribute, QNetworkRequest::NoLessSafeRedirectPolicy);
|
||||
req.setHeader(QNetworkRequest::ContentTypeHeader, QStringLiteral("application/x-www-form-urlencoded"));
|
||||
req.setHeader(QNetworkRequest::ContentTypeHeader, u"application/x-www-form-urlencoded"_s);
|
||||
if (oauth() && !access_token().isEmpty()) req.setRawHeader("authorization", "Bearer " + access_token().toUtf8());
|
||||
else if (!session_id().isEmpty()) req.setRawHeader("X-Tidal-SessionId", session_id().toUtf8());
|
||||
|
||||
@@ -153,23 +153,23 @@ QJsonObject TidalBaseRequest::ExtractJsonObj(const QByteArray &data) {
|
||||
QJsonDocument json_doc = QJsonDocument::fromJson(data, &json_error);
|
||||
|
||||
if (json_error.error != QJsonParseError::NoError) {
|
||||
Error(QStringLiteral("Reply from server missing Json data."), data);
|
||||
Error(u"Reply from server missing Json data."_s, data);
|
||||
return QJsonObject();
|
||||
}
|
||||
|
||||
if (json_doc.isEmpty()) {
|
||||
Error(QStringLiteral("Received empty Json document."), data);
|
||||
Error(u"Received empty Json document."_s, data);
|
||||
return QJsonObject();
|
||||
}
|
||||
|
||||
if (!json_doc.isObject()) {
|
||||
Error(QStringLiteral("Json document is not an object."), json_doc);
|
||||
Error(u"Json document is not an object."_s, json_doc);
|
||||
return QJsonObject();
|
||||
}
|
||||
|
||||
QJsonObject json_obj = json_doc.object();
|
||||
if (json_obj.isEmpty()) {
|
||||
Error(QStringLiteral("Received empty Json object."), json_doc);
|
||||
Error(u"Received empty Json object."_s, json_doc);
|
||||
return QJsonObject();
|
||||
}
|
||||
|
||||
@@ -188,7 +188,7 @@ QJsonValue TidalBaseRequest::ExtractItems(const QByteArray &data) {
|
||||
QJsonValue TidalBaseRequest::ExtractItems(const QJsonObject &json_obj) {
|
||||
|
||||
if (!json_obj.contains("items"_L1)) {
|
||||
Error(QStringLiteral("Json reply is missing items."), json_obj);
|
||||
Error(u"Json reply is missing items."_s, json_obj);
|
||||
return QJsonArray();
|
||||
}
|
||||
QJsonValue json_items = json_obj["items"_L1];
|
||||
|
||||
@@ -62,11 +62,11 @@ QString TidalFavoriteRequest::FavoriteText(const FavoriteType type) {
|
||||
|
||||
switch (type) {
|
||||
case FavoriteType::Artists:
|
||||
return QStringLiteral("artists");
|
||||
return u"artists"_s;
|
||||
case FavoriteType::Albums:
|
||||
return QStringLiteral("albums");
|
||||
return u"albums"_s;
|
||||
case FavoriteType::Songs:
|
||||
return QStringLiteral("tracks");
|
||||
return u"tracks"_s;
|
||||
}
|
||||
|
||||
return QString();
|
||||
@@ -77,11 +77,11 @@ QString TidalFavoriteRequest::FavoriteMethod(const FavoriteType type) {
|
||||
|
||||
switch (type) {
|
||||
case FavoriteType::Artists:
|
||||
return QStringLiteral("artistIds");
|
||||
return u"artistIds"_s;
|
||||
case FavoriteType::Albums:
|
||||
return QStringLiteral("albumIds");
|
||||
return u"albumIds"_s;
|
||||
case FavoriteType::Songs:
|
||||
return QStringLiteral("trackIds");
|
||||
return u"trackIds"_s;
|
||||
}
|
||||
|
||||
return QString();
|
||||
@@ -136,7 +136,7 @@ void TidalFavoriteRequest::AddFavorites(const FavoriteType type, const SongList
|
||||
|
||||
void TidalFavoriteRequest::AddFavoritesRequest(const FavoriteType type, const QStringList &id_list, const SongList &songs) {
|
||||
|
||||
const ParamList params = ParamList() << Param(QStringLiteral("countryCode"), country_code())
|
||||
const ParamList params = ParamList() << Param(u"countryCode"_s, country_code())
|
||||
<< Param(FavoriteMethod(type), id_list.join(u','));
|
||||
|
||||
QUrlQuery url_query;
|
||||
@@ -147,7 +147,7 @@ void TidalFavoriteRequest::AddFavoritesRequest(const FavoriteType type, const QS
|
||||
QUrl url(QLatin1String(TidalService::kApiUrl) + QLatin1Char('/') + "users/"_L1 + QString::number(service_->user_id()) + "/favorites/"_L1 + FavoriteText(type));
|
||||
QNetworkRequest req(url);
|
||||
req.setAttribute(QNetworkRequest::RedirectPolicyAttribute, QNetworkRequest::NoLessSafeRedirectPolicy);
|
||||
req.setHeader(QNetworkRequest::ContentTypeHeader, QStringLiteral("application/x-www-form-urlencoded"));
|
||||
req.setHeader(QNetworkRequest::ContentTypeHeader, u"application/x-www-form-urlencoded"_s);
|
||||
if (oauth() && !access_token().isEmpty()) req.setRawHeader("authorization", "Bearer " + access_token().toUtf8());
|
||||
else if (!session_id().isEmpty()) req.setRawHeader("X-Tidal-SessionId", session_id().toUtf8());
|
||||
QByteArray query = url_query.toString(QUrl::FullyEncoded).toUtf8();
|
||||
@@ -246,7 +246,7 @@ void TidalFavoriteRequest::RemoveFavorites(const FavoriteType type, const SongLi
|
||||
|
||||
void TidalFavoriteRequest::RemoveFavoritesRequest(const FavoriteType type, const QString &id, const SongList &songs) {
|
||||
|
||||
const ParamList params = ParamList() << Param(QStringLiteral("countryCode"), country_code());
|
||||
const ParamList params = ParamList() << Param(u"countryCode"_s, country_code());
|
||||
|
||||
QUrlQuery url_query;
|
||||
for (const Param ¶m : params) {
|
||||
@@ -257,7 +257,7 @@ void TidalFavoriteRequest::RemoveFavoritesRequest(const FavoriteType type, const
|
||||
url.setQuery(url_query);
|
||||
QNetworkRequest req(url);
|
||||
req.setAttribute(QNetworkRequest::RedirectPolicyAttribute, QNetworkRequest::NoLessSafeRedirectPolicy);
|
||||
req.setHeader(QNetworkRequest::ContentTypeHeader, QStringLiteral("application/x-www-form-urlencoded"));
|
||||
req.setHeader(QNetworkRequest::ContentTypeHeader, u"application/x-www-form-urlencoded"_s);
|
||||
if (oauth() && !access_token().isEmpty()) req.setRawHeader("authorization", "Bearer " + access_token().toUtf8());
|
||||
else if (!session_id().isEmpty()) req.setRawHeader("X-Tidal-SessionId", session_id().toUtf8());
|
||||
QNetworkReply *reply = network_->deleteResource(req);
|
||||
|
||||
@@ -171,7 +171,7 @@ void TidalRequest::Process() {
|
||||
SongsSearch();
|
||||
break;
|
||||
default:
|
||||
Error(QStringLiteral("Invalid query type."));
|
||||
Error(u"Invalid query type."_s);
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -254,15 +254,15 @@ void TidalRequest::FlushArtistsRequests() {
|
||||
Request request = artists_requests_queue_.dequeue();
|
||||
|
||||
ParamList parameters;
|
||||
if (query_type_ == Type::SearchArtists) parameters << Param(QStringLiteral("query"), search_text_);
|
||||
if (request.limit > 0) parameters << Param(QStringLiteral("limit"), QString::number(request.limit));
|
||||
if (request.offset > 0) parameters << Param(QStringLiteral("offset"), QString::number(request.offset));
|
||||
if (query_type_ == Type::SearchArtists) parameters << Param(u"query"_s, search_text_);
|
||||
if (request.limit > 0) parameters << Param(u"limit"_s, QString::number(request.limit));
|
||||
if (request.offset > 0) parameters << Param(u"offset"_s, QString::number(request.offset));
|
||||
QNetworkReply *reply = nullptr;
|
||||
if (query_type_ == Type::FavouriteArtists) {
|
||||
reply = CreateRequest(QStringLiteral("users/%1/favorites/artists").arg(service_->user_id()), parameters);
|
||||
}
|
||||
if (query_type_ == Type::SearchArtists) {
|
||||
reply = CreateRequest(QStringLiteral("search/artists"), parameters);
|
||||
reply = CreateRequest(u"search/artists"_s, parameters);
|
||||
}
|
||||
if (!reply) continue;
|
||||
replies_ << reply;
|
||||
@@ -302,15 +302,15 @@ void TidalRequest::FlushAlbumsRequests() {
|
||||
Request request = albums_requests_queue_.dequeue();
|
||||
|
||||
ParamList parameters;
|
||||
if (query_type_ == Type::SearchAlbums) parameters << Param(QStringLiteral("query"), search_text_);
|
||||
if (request.limit > 0) parameters << Param(QStringLiteral("limit"), QString::number(request.limit));
|
||||
if (request.offset > 0) parameters << Param(QStringLiteral("offset"), QString::number(request.offset));
|
||||
if (query_type_ == Type::SearchAlbums) parameters << Param(u"query"_s, search_text_);
|
||||
if (request.limit > 0) parameters << Param(u"limit"_s, QString::number(request.limit));
|
||||
if (request.offset > 0) parameters << Param(u"offset"_s, QString::number(request.offset));
|
||||
QNetworkReply *reply = nullptr;
|
||||
if (query_type_ == Type::FavouriteAlbums) {
|
||||
reply = CreateRequest(QStringLiteral("users/%1/favorites/albums").arg(service_->user_id()), parameters);
|
||||
}
|
||||
if (query_type_ == Type::SearchAlbums) {
|
||||
reply = CreateRequest(QStringLiteral("search/albums"), parameters);
|
||||
reply = CreateRequest(u"search/albums"_s, parameters);
|
||||
}
|
||||
if (!reply) continue;
|
||||
replies_ << reply;
|
||||
@@ -350,15 +350,15 @@ void TidalRequest::FlushSongsRequests() {
|
||||
Request request = songs_requests_queue_.dequeue();
|
||||
|
||||
ParamList parameters;
|
||||
if (query_type_ == Type::SearchSongs) parameters << Param(QStringLiteral("query"), search_text_);
|
||||
if (request.limit > 0) parameters << Param(QStringLiteral("limit"), QString::number(request.limit));
|
||||
if (request.offset > 0) parameters << Param(QStringLiteral("offset"), QString::number(request.offset));
|
||||
if (query_type_ == Type::SearchSongs) parameters << Param(u"query"_s, search_text_);
|
||||
if (request.limit > 0) parameters << Param(u"limit"_s, QString::number(request.limit));
|
||||
if (request.offset > 0) parameters << Param(u"offset"_s, QString::number(request.offset));
|
||||
QNetworkReply *reply = nullptr;
|
||||
if (query_type_ == Type::FavouriteSongs) {
|
||||
reply = CreateRequest(QStringLiteral("users/%1/favorites/tracks").arg(service_->user_id()), parameters);
|
||||
}
|
||||
if (query_type_ == Type::SearchSongs) {
|
||||
reply = CreateRequest(QStringLiteral("search/tracks"), parameters);
|
||||
reply = CreateRequest(u"search/tracks"_s, parameters);
|
||||
}
|
||||
if (!reply) continue;
|
||||
replies_ << reply;
|
||||
@@ -441,7 +441,7 @@ void TidalRequest::ArtistsReplyReceived(QNetworkReply *reply, const int limit_re
|
||||
!json_obj.contains("offset"_L1) ||
|
||||
!json_obj.contains("totalNumberOfItems"_L1) ||
|
||||
!json_obj.contains("items"_L1)) {
|
||||
Error(QStringLiteral("Json object missing values."), json_obj);
|
||||
Error(u"Json object missing values."_s, json_obj);
|
||||
ArtistsFinishCheck();
|
||||
return;
|
||||
}
|
||||
@@ -486,7 +486,7 @@ void TidalRequest::ArtistsReplyReceived(QNetworkReply *reply, const int limit_re
|
||||
++artists_received;
|
||||
|
||||
if (!value_item.isObject()) {
|
||||
Error(QStringLiteral("Invalid Json reply, item in array is not a object."));
|
||||
Error(u"Invalid Json reply, item in array is not a object."_s);
|
||||
continue;
|
||||
}
|
||||
QJsonObject obj_item = value_item.toObject();
|
||||
@@ -494,14 +494,14 @@ void TidalRequest::ArtistsReplyReceived(QNetworkReply *reply, const int limit_re
|
||||
if (obj_item.contains("item"_L1)) {
|
||||
QJsonValue json_item = obj_item["item"_L1];
|
||||
if (!json_item.isObject()) {
|
||||
Error(QStringLiteral("Invalid Json reply, item in array is not a object."), json_item);
|
||||
Error(u"Invalid Json reply, item in array is not a object."_s, json_item);
|
||||
continue;
|
||||
}
|
||||
obj_item = json_item.toObject();
|
||||
}
|
||||
|
||||
if (!obj_item.contains("id"_L1) || !obj_item.contains("name"_L1)) {
|
||||
Error(QStringLiteral("Invalid Json reply, item missing id or album."), obj_item);
|
||||
Error(u"Invalid Json reply, item missing id or album."_s, obj_item);
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -590,7 +590,7 @@ void TidalRequest::FlushArtistAlbumsRequests() {
|
||||
const ArtistAlbumsRequest request = artist_albums_requests_queue_.dequeue();
|
||||
|
||||
ParamList parameters;
|
||||
if (request.offset > 0) parameters << Param(QStringLiteral("offset"), QString::number(request.offset));
|
||||
if (request.offset > 0) parameters << Param(u"offset"_s, QString::number(request.offset));
|
||||
QNetworkReply *reply = CreateRequest(QStringLiteral("artists/%1/albums").arg(request.artist.artist_id), parameters);
|
||||
QObject::connect(reply, &QNetworkReply::finished, this, [this, reply, request]() { ArtistAlbumsReplyReceived(reply, request.artist, request.offset); });
|
||||
replies_ << reply;
|
||||
@@ -636,7 +636,7 @@ void TidalRequest::AlbumsReceived(QNetworkReply *reply, const Artist &artist_req
|
||||
!json_obj.contains("offset"_L1) ||
|
||||
!json_obj.contains("totalNumberOfItems"_L1) ||
|
||||
!json_obj.contains("items"_L1)) {
|
||||
Error(QStringLiteral("Json object missing values."), json_obj);
|
||||
Error(u"Json object missing values."_s, json_obj);
|
||||
AlbumsFinishCheck(artist_requested);
|
||||
return;
|
||||
}
|
||||
@@ -668,7 +668,7 @@ void TidalRequest::AlbumsReceived(QNetworkReply *reply, const Artist &artist_req
|
||||
++albums_received;
|
||||
|
||||
if (!value_item.isObject()) {
|
||||
Error(QStringLiteral("Invalid Json reply, item in array is not a object."));
|
||||
Error(u"Invalid Json reply, item in array is not a object."_s);
|
||||
continue;
|
||||
}
|
||||
QJsonObject obj_item = value_item.toObject();
|
||||
@@ -676,7 +676,7 @@ void TidalRequest::AlbumsReceived(QNetworkReply *reply, const Artist &artist_req
|
||||
if (obj_item.contains("item"_L1)) {
|
||||
QJsonValue json_item = obj_item["item"_L1];
|
||||
if (!json_item.isObject()) {
|
||||
Error(QStringLiteral("Invalid Json reply, item in array is not a object."), json_item);
|
||||
Error(u"Invalid Json reply, item in array is not a object."_s, json_item);
|
||||
continue;
|
||||
}
|
||||
obj_item = json_item.toObject();
|
||||
@@ -685,7 +685,7 @@ void TidalRequest::AlbumsReceived(QNetworkReply *reply, const Artist &artist_req
|
||||
Album album;
|
||||
if (obj_item.contains("type"_L1)) { // This was an albums request or search
|
||||
if (!obj_item.contains("id"_L1) || !obj_item.contains("title"_L1)) {
|
||||
Error(QStringLiteral("Invalid Json reply, item is missing ID or title."), obj_item);
|
||||
Error(u"Invalid Json reply, item is missing ID or title."_s, obj_item);
|
||||
continue;
|
||||
}
|
||||
if (obj_item["id"_L1].isString()) {
|
||||
@@ -705,12 +705,12 @@ void TidalRequest::AlbumsReceived(QNetworkReply *reply, const Artist &artist_req
|
||||
else if (obj_item.contains("album"_L1)) { // This was a tracks request or search
|
||||
QJsonValue value_album = obj_item["album"_L1];
|
||||
if (!value_album.isObject()) {
|
||||
Error(QStringLiteral("Invalid Json reply, item album is not a object."), value_album);
|
||||
Error(u"Invalid Json reply, item album is not a object."_s, value_album);
|
||||
continue;
|
||||
}
|
||||
QJsonObject obj_album = value_album.toObject();
|
||||
if (!obj_album.contains("id"_L1) || !obj_album.contains("title"_L1)) {
|
||||
Error(QStringLiteral("Invalid Json reply, item album is missing ID or title."), obj_album);
|
||||
Error(u"Invalid Json reply, item album is missing ID or title."_s, obj_album);
|
||||
continue;
|
||||
}
|
||||
if (obj_album["id"_L1].isString()) {
|
||||
@@ -728,24 +728,24 @@ void TidalRequest::AlbumsReceived(QNetworkReply *reply, const Artist &artist_req
|
||||
}
|
||||
}
|
||||
else {
|
||||
Error(QStringLiteral("Invalid Json reply, item missing type or album."), obj_item);
|
||||
Error(u"Invalid Json reply, item missing type or album."_s, obj_item);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (album_songs_requests_pending_.contains(album.album_id)) continue;
|
||||
|
||||
if (!obj_item.contains("artist"_L1) || !obj_item.contains("title"_L1) || !obj_item.contains("audioQuality"_L1)) {
|
||||
Error(QStringLiteral("Invalid Json reply, item missing artist, title or audioQuality."), obj_item);
|
||||
Error(u"Invalid Json reply, item missing artist, title or audioQuality."_s, obj_item);
|
||||
continue;
|
||||
}
|
||||
QJsonValue value_artist = obj_item["artist"_L1];
|
||||
if (!value_artist.isObject()) {
|
||||
Error(QStringLiteral("Invalid Json reply, item artist is not a object."), value_artist);
|
||||
Error(u"Invalid Json reply, item artist is not a object."_s, value_artist);
|
||||
continue;
|
||||
}
|
||||
QJsonObject obj_artist = value_artist.toObject();
|
||||
if (!obj_artist.contains("id"_L1) || !obj_artist.contains("name"_L1)) {
|
||||
Error(QStringLiteral("Invalid Json reply, item artist missing id or name."), obj_artist);
|
||||
Error(u"Invalid Json reply, item artist missing id or name."_s, obj_artist);
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -865,7 +865,7 @@ void TidalRequest::FlushAlbumSongsRequests() {
|
||||
|
||||
AlbumSongsRequest request = album_songs_requests_queue_.dequeue();
|
||||
ParamList parameters;
|
||||
if (request.offset > 0) parameters << Param(QStringLiteral("offset"), QString::number(request.offset));
|
||||
if (request.offset > 0) parameters << Param(u"offset"_s, QString::number(request.offset));
|
||||
QNetworkReply *reply = CreateRequest(QStringLiteral("albums/%1/tracks").arg(request.album.album_id), parameters);
|
||||
replies_ << reply;
|
||||
QObject::connect(reply, &QNetworkReply::finished, this, [this, reply, request]() { AlbumSongsReplyReceived(reply, request.artist, request.album, request.offset); });
|
||||
@@ -913,7 +913,7 @@ void TidalRequest::SongsReceived(QNetworkReply *reply, const Artist &artist, con
|
||||
!json_obj.contains("offset"_L1) ||
|
||||
!json_obj.contains("totalNumberOfItems"_L1) ||
|
||||
!json_obj.contains("items"_L1)) {
|
||||
Error(QStringLiteral("Json object missing values."), json_obj);
|
||||
Error(u"Json object missing values."_s, json_obj);
|
||||
SongsFinishCheck(artist, album, limit_requested, offset_requested);
|
||||
return;
|
||||
}
|
||||
@@ -947,7 +947,7 @@ void TidalRequest::SongsReceived(QNetworkReply *reply, const Artist &artist, con
|
||||
for (const QJsonValue &value_item : array_items) {
|
||||
|
||||
if (!value_item.isObject()) {
|
||||
Error(QStringLiteral("Invalid Json reply, track is not a object."));
|
||||
Error(u"Invalid Json reply, track is not a object."_s);
|
||||
continue;
|
||||
}
|
||||
QJsonObject obj_item = value_item.toObject();
|
||||
@@ -955,7 +955,7 @@ void TidalRequest::SongsReceived(QNetworkReply *reply, const Artist &artist, con
|
||||
if (obj_item.contains("item"_L1)) {
|
||||
QJsonValue item = obj_item["item"_L1];
|
||||
if (!item.isObject()) {
|
||||
Error(QStringLiteral("Invalid Json reply, item is not a object."), item);
|
||||
Error(u"Invalid Json reply, item is not a object."_s, item);
|
||||
continue;
|
||||
}
|
||||
obj_item = item.toObject();
|
||||
@@ -1037,7 +1037,7 @@ void TidalRequest::ParseSong(Song &song, const QJsonObject &json_obj, const Arti
|
||||
!json_obj.contains("volumeNumber"_L1) ||
|
||||
!json_obj.contains("copyright"_L1)
|
||||
) {
|
||||
Error(QStringLiteral("Invalid Json reply, track is missing one or more values."), json_obj);
|
||||
Error(u"Invalid Json reply, track is missing one or more values."_s, json_obj);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -1063,12 +1063,12 @@ void TidalRequest::ParseSong(Song &song, const QJsonObject &json_obj, const Arti
|
||||
QString copyright = json_obj["copyright"_L1].toString();
|
||||
|
||||
if (!value_artist.isObject()) {
|
||||
Error(QStringLiteral("Invalid Json reply, track artist is not a object."), value_artist);
|
||||
Error(u"Invalid Json reply, track artist is not a object."_s, value_artist);
|
||||
return;
|
||||
}
|
||||
QJsonObject obj_artist = value_artist.toObject();
|
||||
if (!obj_artist.contains("id"_L1) || !obj_artist.contains("name"_L1)) {
|
||||
Error(QStringLiteral("Invalid Json reply, track artist is missing id or name."), obj_artist);
|
||||
Error(u"Invalid Json reply, track artist is missing id or name."_s, obj_artist);
|
||||
return;
|
||||
}
|
||||
QString artist_id;
|
||||
@@ -1081,12 +1081,12 @@ void TidalRequest::ParseSong(Song &song, const QJsonObject &json_obj, const Arti
|
||||
QString artist = obj_artist["name"_L1].toString();
|
||||
|
||||
if (!value_album.isObject()) {
|
||||
Error(QStringLiteral("Invalid Json reply, track album is not a object."), value_album);
|
||||
Error(u"Invalid Json reply, track album is not a object."_s, value_album);
|
||||
return;
|
||||
}
|
||||
QJsonObject obj_album = value_album.toObject();
|
||||
if (!obj_album.contains("id"_L1) || !obj_album.contains("title"_L1)) {
|
||||
Error(QStringLiteral("Invalid Json reply, track album is missing ID or title."), obj_album);
|
||||
Error(u"Invalid Json reply, track album is missing ID or title."_s, obj_album);
|
||||
return;
|
||||
}
|
||||
QString album_id;
|
||||
@@ -1097,7 +1097,7 @@ void TidalRequest::ParseSong(Song &song, const QJsonObject &json_obj, const Arti
|
||||
album_id = QString::number(obj_album["id"_L1].toInt());
|
||||
}
|
||||
if (!album.album_id.isEmpty() && album.album_id != album_id) {
|
||||
Error(QStringLiteral("Invalid Json reply, track album id is wrong."), obj_album);
|
||||
Error(u"Invalid Json reply, track album id is wrong."_s, obj_album);
|
||||
return;
|
||||
}
|
||||
QString album_title = obj_album["title"_L1].toString();
|
||||
@@ -1123,7 +1123,7 @@ void TidalRequest::ParseSong(Song &song, const QJsonObject &json_obj, const Arti
|
||||
duration = q_duration.toLongLong() * kNsecPerSec;
|
||||
}
|
||||
else {
|
||||
Error(QStringLiteral("Invalid duration for song."), json_duration);
|
||||
Error(u"Invalid duration for song."_s, json_duration);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@@ -55,7 +55,6 @@
|
||||
#include "streaming/streamingsearchview.h"
|
||||
#include "collection/collectionbackend.h"
|
||||
#include "collection/collectionmodel.h"
|
||||
#include "collection/collectionfilter.h"
|
||||
#include "tidalservice.h"
|
||||
#include "tidalurlhandler.h"
|
||||
#include "tidalbaserequest.h"
|
||||
@@ -91,7 +90,7 @@ constexpr char kSongsTable[] = "tidal_songs";
|
||||
} // namespace
|
||||
|
||||
TidalService::TidalService(Application *app, QObject *parent)
|
||||
: StreamingService(Song::Source::Tidal, QStringLiteral("Tidal"), QStringLiteral("tidal"), QLatin1String(TidalSettingsPage::kSettingsGroup), SettingsDialog::Page::Tidal, app, parent),
|
||||
: StreamingService(Song::Source::Tidal, u"Tidal"_s, u"tidal"_s, QLatin1String(TidalSettingsPage::kSettingsGroup), SettingsDialog::Page::Tidal, app, parent),
|
||||
app_(app),
|
||||
network_(app->network()),
|
||||
url_handler_(new TidalUrlHandler(app, this)),
|
||||
@@ -234,7 +233,7 @@ void TidalService::LoadSession() {
|
||||
Settings s;
|
||||
s.beginGroup(TidalSettingsPage::kSettingsGroup);
|
||||
user_id_ = s.value("user_id").toInt();
|
||||
country_code_ = s.value("country_code", QStringLiteral("US")).toString();
|
||||
country_code_ = s.value("country_code", u"US"_s).toString();
|
||||
access_token_ = s.value("access_token").toString();
|
||||
refresh_token_ = s.value("refresh_token").toString();
|
||||
session_id_ = s.value("session_id").toString();
|
||||
@@ -270,13 +269,13 @@ void TidalService::ReloadSettings() {
|
||||
if (password.isEmpty()) password_.clear();
|
||||
else password_ = QString::fromUtf8(QByteArray::fromBase64(password));
|
||||
|
||||
quality_ = s.value("quality", QStringLiteral("LOSSLESS")).toString();
|
||||
quality_ = s.value("quality", u"LOSSLESS"_s).toString();
|
||||
quint64 search_delay = s.value("searchdelay", 1500).toInt();
|
||||
artistssearchlimit_ = s.value("artistssearchlimit", 4).toInt();
|
||||
albumssearchlimit_ = s.value("albumssearchlimit", 10).toInt();
|
||||
songssearchlimit_ = s.value("songssearchlimit", 10).toInt();
|
||||
fetchalbums_ = s.value("fetchalbums", false).toBool();
|
||||
coversize_ = s.value("coversize", QStringLiteral("640x640")).toString();
|
||||
coversize_ = s.value("coversize", u"640x640"_s).toString();
|
||||
download_album_covers_ = s.value("downloadalbumcovers", true).toBool();
|
||||
stream_url_method_ = static_cast<TidalSettingsPage::StreamUrlMethod>(s.value("streamurl", static_cast<int>(TidalSettingsPage::StreamUrlMethod::StreamUrl)).toInt());
|
||||
album_explicit_ = s.value("album_explicit").toBool();
|
||||
@@ -297,12 +296,12 @@ void TidalService::StartAuthorization(const QString &client_id) {
|
||||
code_challenge_.chop(1);
|
||||
}
|
||||
|
||||
const ParamList params = ParamList() << Param(QStringLiteral("response_type"), QStringLiteral("code"))
|
||||
<< Param(QStringLiteral("code_challenge"), code_challenge_)
|
||||
<< Param(QStringLiteral("code_challenge_method"), QStringLiteral("S256"))
|
||||
<< Param(QStringLiteral("redirect_uri"), QLatin1String(kOAuthRedirectUrl))
|
||||
<< Param(QStringLiteral("client_id"), client_id_)
|
||||
<< Param(QStringLiteral("scope"), QStringLiteral("r_usr w_usr"));
|
||||
const ParamList params = ParamList() << Param(u"response_type"_s, u"code"_s)
|
||||
<< Param(u"code_challenge"_s, code_challenge_)
|
||||
<< Param(u"code_challenge_method"_s, u"S256"_s)
|
||||
<< Param(u"redirect_uri"_s, QLatin1String(kOAuthRedirectUrl))
|
||||
<< Param(u"client_id"_s, client_id_)
|
||||
<< Param(u"scope"_s, u"r_usr w_usr"_s);
|
||||
|
||||
QUrlQuery url_query;
|
||||
for (const Param ¶m : params) {
|
||||
@@ -321,13 +320,13 @@ void TidalService::AuthorizationUrlReceived(const QUrl &url) {
|
||||
|
||||
QUrlQuery url_query(url);
|
||||
|
||||
if (url_query.hasQueryItem(QStringLiteral("token_type")) && url_query.hasQueryItem(QStringLiteral("expires_in")) && url_query.hasQueryItem(QStringLiteral("access_token"))) {
|
||||
if (url_query.hasQueryItem(u"token_type"_s) && url_query.hasQueryItem(u"expires_in"_s) && url_query.hasQueryItem(u"access_token"_s)) {
|
||||
|
||||
access_token_ = url_query.queryItemValue(QStringLiteral("access_token"));
|
||||
if (url_query.hasQueryItem(QStringLiteral("refresh_token"))) {
|
||||
refresh_token_ = url_query.queryItemValue(QStringLiteral("refresh_token"));
|
||||
access_token_ = url_query.queryItemValue(u"access_token"_s);
|
||||
if (url_query.hasQueryItem(u"refresh_token"_s)) {
|
||||
refresh_token_ = url_query.queryItemValue(u"refresh_token"_s);
|
||||
}
|
||||
expires_in_ = url_query.queryItemValue(QStringLiteral("expires_in")).toInt();
|
||||
expires_in_ = url_query.queryItemValue(u"expires_in"_s).toInt();
|
||||
login_time_ = QDateTime::currentSecsSinceEpoch();
|
||||
session_id_.clear();
|
||||
|
||||
@@ -344,9 +343,9 @@ void TidalService::AuthorizationUrlReceived(const QUrl &url) {
|
||||
Q_EMIT LoginSuccess();
|
||||
}
|
||||
|
||||
else if (url_query.hasQueryItem(QStringLiteral("code")) && url_query.hasQueryItem(QStringLiteral("state"))) {
|
||||
else if (url_query.hasQueryItem(u"code"_s) && url_query.hasQueryItem(u"state"_s)) {
|
||||
|
||||
QString code = url_query.queryItemValue(QStringLiteral("code"));
|
||||
QString code = url_query.queryItemValue(u"code"_s);
|
||||
|
||||
RequestAccessToken(code);
|
||||
|
||||
@@ -363,18 +362,18 @@ void TidalService::RequestAccessToken(const QString &code) {
|
||||
|
||||
timer_refresh_login_->stop();
|
||||
|
||||
ParamList params = ParamList() << Param(QStringLiteral("client_id"), client_id_);
|
||||
ParamList params = ParamList() << Param(u"client_id"_s, client_id_);
|
||||
|
||||
if (!code.isEmpty()) {
|
||||
params << Param(QStringLiteral("grant_type"), QStringLiteral("authorization_code"));
|
||||
params << Param(QStringLiteral("code"), code);
|
||||
params << Param(QStringLiteral("code_verifier"), code_verifier_);
|
||||
params << Param(QStringLiteral("redirect_uri"), QLatin1String(kOAuthRedirectUrl));
|
||||
params << Param(QStringLiteral("scope"), QStringLiteral("r_usr w_usr"));
|
||||
params << Param(u"grant_type"_s, u"authorization_code"_s);
|
||||
params << Param(u"code"_s, code);
|
||||
params << Param(u"code_verifier"_s, code_verifier_);
|
||||
params << Param(u"redirect_uri"_s, QLatin1String(kOAuthRedirectUrl));
|
||||
params << Param(u"scope"_s, u"r_usr w_usr"_s);
|
||||
}
|
||||
else if (!refresh_token_.isEmpty() && enabled_ && oauth_) {
|
||||
params << Param(QStringLiteral("grant_type"), QStringLiteral("refresh_token"));
|
||||
params << Param(QStringLiteral("refresh_token"), refresh_token_);
|
||||
params << Param(u"grant_type"_s, u"refresh_token"_s);
|
||||
params << Param(u"refresh_token"_s, refresh_token_);
|
||||
}
|
||||
else {
|
||||
return;
|
||||
@@ -451,28 +450,28 @@ void TidalService::AccessTokenRequestFinished(QNetworkReply *reply) {
|
||||
QJsonDocument json_doc = QJsonDocument::fromJson(data, &json_error);
|
||||
|
||||
if (json_error.error != QJsonParseError::NoError) {
|
||||
LoginError(QStringLiteral("Authentication reply from server missing Json data."));
|
||||
LoginError(u"Authentication reply from server missing Json data."_s);
|
||||
return;
|
||||
}
|
||||
|
||||
if (json_doc.isEmpty()) {
|
||||
LoginError(QStringLiteral("Authentication reply from server has empty Json document."));
|
||||
LoginError(u"Authentication reply from server has empty Json document."_s);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!json_doc.isObject()) {
|
||||
LoginError(QStringLiteral("Authentication reply from server has Json document that is not an object."), json_doc);
|
||||
LoginError(u"Authentication reply from server has Json document that is not an object."_s, json_doc);
|
||||
return;
|
||||
}
|
||||
|
||||
QJsonObject json_obj = json_doc.object();
|
||||
if (json_obj.isEmpty()) {
|
||||
LoginError(QStringLiteral("Authentication reply from server has empty Json object."), json_doc);
|
||||
LoginError(u"Authentication reply from server has empty Json object."_s, json_doc);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!json_obj.contains("access_token"_L1) || !json_obj.contains("expires_in"_L1)) {
|
||||
LoginError(QStringLiteral("Authentication reply from server is missing access_token or expires_in"), json_obj);
|
||||
LoginError(u"Authentication reply from server is missing access_token or expires_in"_s, json_obj);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -527,10 +526,10 @@ void TidalService::SendLoginWithCredentials(const QString &api_token, const QStr
|
||||
timer_login_attempt_->start();
|
||||
timer_refresh_login_->stop();
|
||||
|
||||
const ParamList params = ParamList() << Param(QStringLiteral("token"), (api_token.isEmpty() ? api_token_ : api_token))
|
||||
<< Param(QStringLiteral("username"), username)
|
||||
<< Param(QStringLiteral("password"), password)
|
||||
<< Param(QStringLiteral("clientVersion"), QStringLiteral("2.2.1--7"));
|
||||
const ParamList params = ParamList() << Param(u"token"_s, (api_token.isEmpty() ? api_token_ : api_token))
|
||||
<< Param(u"username"_s, username)
|
||||
<< Param(u"password"_s, password)
|
||||
<< Param(u"clientVersion"_s, u"2.2.1--7"_s);
|
||||
|
||||
QUrlQuery url_query;
|
||||
for (const Param ¶m : params) {
|
||||
@@ -540,7 +539,7 @@ void TidalService::SendLoginWithCredentials(const QString &api_token, const QStr
|
||||
QUrl url(QString::fromLatin1(kAuthUrl));
|
||||
QNetworkRequest req(url);
|
||||
|
||||
req.setHeader(QNetworkRequest::ContentTypeHeader, QStringLiteral("application/x-www-form-urlencoded"));
|
||||
req.setHeader(QNetworkRequest::ContentTypeHeader, u"application/x-www-form-urlencoded"_s);
|
||||
req.setRawHeader("X-Tidal-Token", (api_token.isEmpty() ? api_token_.toUtf8() : api_token.toUtf8()));
|
||||
|
||||
QByteArray query = url_query.toString(QUrl::FullyEncoded).toUtf8();
|
||||
@@ -604,28 +603,28 @@ void TidalService::HandleAuthReply(QNetworkReply *reply) {
|
||||
QJsonDocument json_doc = QJsonDocument::fromJson(data, &json_error);
|
||||
|
||||
if (json_error.error != QJsonParseError::NoError) {
|
||||
LoginError(QStringLiteral("Authentication reply from server missing Json data."));
|
||||
LoginError(u"Authentication reply from server missing Json data."_s);
|
||||
return;
|
||||
}
|
||||
|
||||
if (json_doc.isEmpty()) {
|
||||
LoginError(QStringLiteral("Authentication reply from server has empty Json document."));
|
||||
LoginError(u"Authentication reply from server has empty Json document."_s);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!json_doc.isObject()) {
|
||||
LoginError(QStringLiteral("Authentication reply from server has Json document that is not an object."), json_doc);
|
||||
LoginError(u"Authentication reply from server has Json document that is not an object."_s, json_doc);
|
||||
return;
|
||||
}
|
||||
|
||||
QJsonObject json_obj = json_doc.object();
|
||||
if (json_obj.isEmpty()) {
|
||||
LoginError(QStringLiteral("Authentication reply from server has empty Json object."), json_doc);
|
||||
LoginError(u"Authentication reply from server has empty Json object."_s, json_doc);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!json_obj.contains("userId"_L1) || !json_obj.contains("sessionId"_L1) || !json_obj.contains("countryCode"_L1)) {
|
||||
LoginError(QStringLiteral("Authentication reply from server is missing userId, sessionId or countryCode"), json_obj);
|
||||
LoginError(u"Authentication reply from server is missing userId, sessionId or countryCode"_s, json_obj);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@@ -123,22 +123,22 @@ void TidalStreamURLRequest::GetStreamURL() {
|
||||
|
||||
switch (stream_url_method()) {
|
||||
case TidalSettingsPage::StreamUrlMethod::StreamUrl:
|
||||
params << Param(QStringLiteral("soundQuality"), quality());
|
||||
params << Param(u"soundQuality"_s, quality());
|
||||
reply_ = CreateRequest(QStringLiteral("tracks/%1/streamUrl").arg(song_id_), params);
|
||||
QObject::connect(reply_, &QNetworkReply::finished, this, &TidalStreamURLRequest::StreamURLReceived);
|
||||
break;
|
||||
case TidalSettingsPage::StreamUrlMethod::UrlPostPaywall:
|
||||
params << Param(QStringLiteral("audioquality"), quality());
|
||||
params << Param(QStringLiteral("playbackmode"), QStringLiteral("STREAM"));
|
||||
params << Param(QStringLiteral("assetpresentation"), QStringLiteral("FULL"));
|
||||
params << Param(QStringLiteral("urlusagemode"), QStringLiteral("STREAM"));
|
||||
params << Param(u"audioquality"_s, quality());
|
||||
params << Param(u"playbackmode"_s, u"STREAM"_s);
|
||||
params << Param(u"assetpresentation"_s, u"FULL"_s);
|
||||
params << Param(u"urlusagemode"_s, u"STREAM"_s);
|
||||
reply_ = CreateRequest(QStringLiteral("tracks/%1/urlpostpaywall").arg(song_id_), params);
|
||||
QObject::connect(reply_, &QNetworkReply::finished, this, &TidalStreamURLRequest::StreamURLReceived);
|
||||
break;
|
||||
case TidalSettingsPage::StreamUrlMethod::PlaybackInfoPostPaywall:
|
||||
params << Param(QStringLiteral("audioquality"), quality());
|
||||
params << Param(QStringLiteral("playbackmode"), QStringLiteral("STREAM"));
|
||||
params << Param(QStringLiteral("assetpresentation"), QStringLiteral("FULL"));
|
||||
params << Param(u"audioquality"_s, quality());
|
||||
params << Param(u"playbackmode"_s, u"STREAM"_s);
|
||||
params << Param(u"assetpresentation"_s, u"FULL"_s);
|
||||
reply_ = CreateRequest(QStringLiteral("tracks/%1/playbackinfopostpaywall").arg(song_id_), params);
|
||||
QObject::connect(reply_, &QNetworkReply::finished, this, &TidalStreamURLRequest::StreamURLReceived);
|
||||
break;
|
||||
@@ -172,7 +172,7 @@ void TidalStreamURLRequest::StreamURLReceived() {
|
||||
}
|
||||
|
||||
if (!json_obj.contains("trackId"_L1)) {
|
||||
Error(QStringLiteral("Invalid Json reply, stream missing trackId."), json_obj);
|
||||
Error(u"Invalid Json reply, stream missing trackId."_s, json_obj);
|
||||
Q_EMIT StreamURLFailure(id_, media_url_, errors_.constFirst());
|
||||
return;
|
||||
}
|
||||
@@ -204,7 +204,7 @@ void TidalStreamURLRequest::StreamURLReceived() {
|
||||
QXmlStreamReader xml_reader(data_manifest);
|
||||
if (xml_reader.readNextStartElement()) {
|
||||
QUrl url;
|
||||
url.setScheme(QStringLiteral("data"));
|
||||
url.setScheme(u"data"_s);
|
||||
url.setPath(QStringLiteral("application/dash+xml;base64,%1").arg(manifest));
|
||||
urls << url;
|
||||
}
|
||||
@@ -228,7 +228,7 @@ void TidalStreamURLRequest::StreamURLReceived() {
|
||||
}
|
||||
|
||||
if (!json_obj.contains("mimeType"_L1)) {
|
||||
Error(QStringLiteral("Invalid Json reply, stream url reply manifest is missing mimeType."), json_obj);
|
||||
Error(u"Invalid Json reply, stream url reply manifest is missing mimeType."_s, json_obj);
|
||||
Q_EMIT StreamURLFailure(id_, media_url_, errors_.constFirst());
|
||||
return;
|
||||
}
|
||||
@@ -251,7 +251,7 @@ void TidalStreamURLRequest::StreamURLReceived() {
|
||||
if (json_obj.contains("urls"_L1)) {
|
||||
QJsonValue json_urls = json_obj["urls"_L1];
|
||||
if (!json_urls.isArray()) {
|
||||
Error(QStringLiteral("Invalid Json reply, urls is not an array."), json_urls);
|
||||
Error(u"Invalid Json reply, urls is not an array."_s, json_urls);
|
||||
Q_EMIT StreamURLFailure(id_, media_url_, errors_.constFirst());
|
||||
return;
|
||||
}
|
||||
@@ -291,7 +291,7 @@ void TidalStreamURLRequest::StreamURLReceived() {
|
||||
}
|
||||
|
||||
if (urls.isEmpty()) {
|
||||
Error(QStringLiteral("Missing stream urls."), json_obj);
|
||||
Error(u"Missing stream urls."_s, json_obj);
|
||||
Q_EMIT StreamURLFailure(id_, media_url_, errors_.constFirst());
|
||||
return;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user