Port to QStringLiteral operator

This commit is contained in:
Jonas Kvinge
2024-10-20 06:38:55 +02:00
parent 722035913e
commit ef9ef63f02
202 changed files with 2036 additions and 1889 deletions

View File

@@ -59,21 +59,21 @@ SubsonicBaseRequest::SubsonicBaseRequest(SubsonicService *service, QObject *pare
QUrl SubsonicBaseRequest::CreateUrl(const QUrl &server_url, const SubsonicSettingsPage::AuthMethod auth_method, const QString &username, const QString &password, const QString &ressource_name, const ParamList &params_provided) {
ParamList params = ParamList() << params_provided
<< Param(QStringLiteral("c"), QLatin1String(SubsonicService::kClientName))
<< Param(QStringLiteral("v"), QLatin1String(SubsonicService::kApiVersion))
<< Param(QStringLiteral("f"), QStringLiteral("json"))
<< Param(QStringLiteral("u"), username);
<< Param(u"c"_s, QLatin1String(SubsonicService::kClientName))
<< Param(u"v"_s, QLatin1String(SubsonicService::kApiVersion))
<< Param(u"f"_s, u"json"_s)
<< Param(u"u"_s, username);
if (auth_method == SubsonicSettingsPage::AuthMethod::Hex) {
params << Param(QStringLiteral("p"), QStringLiteral("enc:") + QString::fromUtf8(password.toUtf8().toHex()));
params << Param(u"p"_s, u"enc:"_s + QString::fromUtf8(password.toUtf8().toHex()));
}
else {
const QString salt = Utilities::CryptographicRandomString(20);
QCryptographicHash md5(QCryptographicHash::Md5);
md5.addData(password.toUtf8());
md5.addData(salt.toUtf8());
params << Param(QStringLiteral("s"), salt);
params << Param(QStringLiteral("t"), QString::fromUtf8(md5.result().toHex()));
params << Param(u"s"_s, salt);
params << Param(u"t"_s, QString::fromUtf8(md5.result().toHex()));
}
QUrlQuery url_query;
@@ -107,7 +107,7 @@ QNetworkReply *SubsonicBaseRequest::CreateGetRequest(const QString &ressource_na
req.setSslConfiguration(sslconfig);
}
req.setHeader(QNetworkRequest::ContentTypeHeader, QStringLiteral("application/x-www-form-urlencoded"));
req.setHeader(QNetworkRequest::ContentTypeHeader, u"application/x-www-form-urlencoded"_s);
req.setAttribute(QNetworkRequest::RedirectPolicyAttribute, QNetworkRequest::NoLessSafeRedirectPolicy);
req.setAttribute(QNetworkRequest::Http2AllowedAttribute, http2());
@@ -183,34 +183,34 @@ QJsonObject SubsonicBaseRequest::ExtractJsonObj(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();
}
if (!json_obj.contains("subsonic-response"_L1)) {
Error(QStringLiteral("Json reply is missing subsonic-response."), json_obj);
Error(u"Json reply is missing subsonic-response."_s, json_obj);
return QJsonObject();
}
QJsonValue json_response = json_obj["subsonic-response"_L1];
if (!json_response.isObject()) {
Error(QStringLiteral("Json response is not an object."), json_response);
Error(u"Json response is not an object."_s, json_response);
return QJsonObject();
}
json_obj = json_response.toObject();

View File

@@ -149,11 +149,11 @@ void SubsonicRequest::FlushAlbumsRequests() {
Request request = albums_requests_queue_.dequeue();
++albums_requests_active_;
ParamList params = ParamList() << Param(QStringLiteral("type"), QStringLiteral("alphabeticalByName"));
if (request.size > 0) params << Param(QStringLiteral("size"), QString::number(request.size));
if (request.offset > 0) params << Param(QStringLiteral("offset"), QString::number(request.offset));
ParamList params = ParamList() << Param(u"type"_s, u"alphabeticalByName"_s);
if (request.size > 0) params << Param(u"size"_s, QString::number(request.size));
if (request.offset > 0) params << Param(u"offset"_s, QString::number(request.offset));
QNetworkReply *reply = CreateGetRequest(QStringLiteral("getAlbumList2"), params);
QNetworkReply *reply = CreateGetRequest(u"getAlbumList2"_s, params);
replies_ << reply;
QObject::connect(reply, &QNetworkReply::finished, this, [this, reply, request]() { AlbumsReplyReceived(reply, request.offset, request.size); });
timeouts_->AddReply(reply);
@@ -189,7 +189,7 @@ void SubsonicRequest::AlbumsReplyReceived(QNetworkReply *reply, const int offset
if (json_obj.contains("error"_L1)) {
QJsonValue json_error = json_obj["error"_L1];
if (!json_error.isObject()) {
Error(QStringLiteral("Json error is not an object."), json_obj);
Error(u"Json error is not an object."_s, json_obj);
AlbumsFinishCheck(offset_requested, size_requested);
return;
}
@@ -201,14 +201,14 @@ void SubsonicRequest::AlbumsReplyReceived(QNetworkReply *reply, const int offset
AlbumsFinishCheck(offset_requested, size_requested);
}
else {
Error(QStringLiteral("Json error object is missing code or message."), json_obj);
Error(u"Json error object is missing code or message."_s, json_obj);
AlbumsFinishCheck(offset_requested, size_requested);
}
return;
}
if (!json_obj.contains("albumList"_L1) && !json_obj.contains("albumList2"_L1)) {
Error(QStringLiteral("Json reply is missing albumList."), json_obj);
Error(u"Json reply is missing albumList."_s, json_obj);
AlbumsFinishCheck(offset_requested, size_requested);
return;
}
@@ -217,7 +217,7 @@ void SubsonicRequest::AlbumsReplyReceived(QNetworkReply *reply, const int offset
else if (json_obj.contains("albumList2"_L1)) value_albumlist = json_obj["albumList2"_L1];
if (!value_albumlist.isObject()) {
Error(QStringLiteral("Json album list is not an object."), value_albumlist);
Error(u"Json album list is not an object."_s, value_albumlist);
AlbumsFinishCheck(offset_requested, size_requested);
}
json_obj = value_albumlist.toObject();
@@ -228,7 +228,7 @@ void SubsonicRequest::AlbumsReplyReceived(QNetworkReply *reply, const int offset
}
if (!json_obj.contains("album"_L1)) {
Error(QStringLiteral("Json album list does not contain album array."), json_obj);
Error(u"Json album list does not contain album array."_s, json_obj);
AlbumsFinishCheck(offset_requested, size_requested);
}
QJsonValue json_album = json_obj["album"_L1];
@@ -238,7 +238,7 @@ void SubsonicRequest::AlbumsReplyReceived(QNetworkReply *reply, const int offset
return;
}
if (!json_album.isArray()) {
Error(QStringLiteral("Json album is not an array."), json_album);
Error(u"Json album is not an array."_s, json_album);
AlbumsFinishCheck(offset_requested, size_requested);
}
const QJsonArray array_albums = json_album.toArray();
@@ -255,18 +255,18 @@ void SubsonicRequest::AlbumsReplyReceived(QNetworkReply *reply, const int offset
++albums_received;
if (!value_album.isObject()) {
Error(QStringLiteral("Invalid Json reply, album is not an object."));
Error(u"Invalid Json reply, album is not an object."_s);
continue;
}
QJsonObject obj_album = value_album.toObject();
if (!obj_album.contains("id"_L1) || !obj_album.contains("artist"_L1)) {
Error(QStringLiteral("Invalid Json reply, album object in array is missing ID or artist."), obj_album);
Error(u"Invalid Json reply, album object in array is missing ID or artist."_s, obj_album);
continue;
}
if (!obj_album.contains("album"_L1) && !obj_album.contains("name"_L1)) {
Error(QStringLiteral("Invalid Json reply, album object in array is missing album or name."), obj_album);
Error(u"Invalid Json reply, album object in array is missing album or name."_s, obj_album);
continue;
}
@@ -345,7 +345,7 @@ void SubsonicRequest::FlushAlbumSongsRequests() {
Request request = album_songs_requests_queue_.dequeue();
++album_songs_requests_active_;
QNetworkReply *reply = CreateGetRequest(QStringLiteral("getAlbum"), ParamList() << Param(QStringLiteral("id"), request.album_id));
QNetworkReply *reply = CreateGetRequest(u"getAlbum"_s, ParamList() << Param(u"id"_s, request.album_id));
replies_ << reply;
QObject::connect(reply, &QNetworkReply::finished, this, [this, reply, request]() { AlbumSongsReplyReceived(reply, request.artist_id, request.album_id, request.album_artist); });
timeouts_->AddReply(reply);
@@ -384,7 +384,7 @@ void SubsonicRequest::AlbumSongsReplyReceived(QNetworkReply *reply, const QStrin
if (json_obj.contains("error"_L1)) {
QJsonValue json_error = json_obj["error"_L1];
if (!json_error.isObject()) {
Error(QStringLiteral("Json error is not an object."), json_obj);
Error(u"Json error is not an object."_s, json_obj);
SongsFinishCheck();
return;
}
@@ -396,34 +396,34 @@ void SubsonicRequest::AlbumSongsReplyReceived(QNetworkReply *reply, const QStrin
SongsFinishCheck();
}
else {
Error(QStringLiteral("Json error object missing code or message."), json_obj);
Error(u"Json error object missing code or message."_s, json_obj);
SongsFinishCheck();
}
return;
}
if (!json_obj.contains("album"_L1)) {
Error(QStringLiteral("Json reply is missing albumList."), json_obj);
Error(u"Json reply is missing albumList."_s, json_obj);
SongsFinishCheck();
return;
}
QJsonValue value_album = json_obj["album"_L1];
if (!value_album.isObject()) {
Error(QStringLiteral("Json album is not an object."), value_album);
Error(u"Json album is not an object."_s, value_album);
SongsFinishCheck();
return;
}
QJsonObject obj_album = value_album.toObject();
if (!obj_album.contains("song"_L1)) {
Error(QStringLiteral("Json album object does not contain song array."), json_obj);
Error(u"Json album object does not contain song array."_s, json_obj);
SongsFinishCheck();
return;
}
QJsonValue json_song = obj_album["song"_L1];
if (!json_song.isArray()) {
Error(QStringLiteral("Json song is not an array."), obj_album);
Error(u"Json song is not an array."_s, obj_album);
SongsFinishCheck();
return;
}
@@ -440,7 +440,7 @@ void SubsonicRequest::AlbumSongsReplyReceived(QNetworkReply *reply, const QStrin
for (const QJsonValue &value_song : array_songs) {
if (!value_song.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_song = value_song.toObject();
@@ -500,7 +500,7 @@ QString SubsonicRequest::ParseSong(Song &song, const QJsonObject &json_obj, cons
!json_obj.contains("duration"_L1) ||
!json_obj.contains("type"_L1)
) {
Error(QStringLiteral("Invalid Json reply, song is missing one or more values."), json_obj);
Error(u"Invalid Json reply, song is missing one or more values."_s, json_obj);
return QString();
}
@@ -635,7 +635,7 @@ QString SubsonicRequest::ParseSong(Song &song, const QJsonObject &json_obj, cons
cover_url = cover_urls_[cover_id];
}
else {
cover_url = CreateUrl(server_url(), auth_method(), username(), password(), QStringLiteral("getCoverArt"), ParamList() << Param(QStringLiteral("id"), cover_id));
cover_url = CreateUrl(server_url(), auth_method(), username(), password(), u"getCoverArt"_s, ParamList() << Param(u"id"_s, cover_id));
cover_urls_.insert(cover_id, cover_url);
}
}
@@ -706,11 +706,11 @@ void SubsonicRequest::AddAlbumCoverRequest(const Song &song) {
QUrlQuery cover_url_query(cover_url);
if (!cover_url_query.hasQueryItem(QStringLiteral("id"))) {
if (!cover_url_query.hasQueryItem(u"id"_s)) {
return;
}
QString cover_id = cover_url_query.queryItemValue(QStringLiteral("id"));
QString cover_id = cover_url_query.queryItemValue(u"id"_s);
if (album_covers_requests_sent_.contains(cover_id)) {
album_covers_requests_sent_.insert(cover_id, song.song_id());

View File

@@ -77,11 +77,11 @@ void SubsonicScrobbleRequest::FlushScrobbleRequests() {
Request request = scrobble_requests_queue_.dequeue();
++scrobble_requests_active_;
ParamList params = ParamList() << Param(QStringLiteral("id"), request.song_id)
<< Param(QStringLiteral("submission"), QVariant(request.submission).toString())
<< Param(QStringLiteral("time"), QVariant(request.time_ms).toString());
ParamList params = ParamList() << Param(u"id"_s, request.song_id)
<< Param(u"submission"_s, QVariant(request.submission).toString())
<< Param(u"time"_s, QVariant(request.time_ms).toString());
QNetworkReply *reply = CreateGetRequest(QStringLiteral("scrobble"), params);
QNetworkReply *reply = CreateGetRequest(u"scrobble"_s, params);
replies_ << reply;
QObject::connect(reply, &QNetworkReply::finished, this, [this, reply]() { ScrobbleReplyReceived(reply); });
@@ -116,7 +116,7 @@ void SubsonicScrobbleRequest::ScrobbleReplyReceived(QNetworkReply *reply) {
if (json_obj.contains("error"_L1)) {
QJsonValue json_error = json_obj["error"_L1];
if (!json_error.isObject()) {
Error(QStringLiteral("Json error is not an object."), json_obj);
Error(u"Json error is not an object."_s, json_obj);
FinishCheck();
return;
}
@@ -128,7 +128,7 @@ void SubsonicScrobbleRequest::ScrobbleReplyReceived(QNetworkReply *reply) {
FinishCheck();
}
else {
Error(QStringLiteral("Json error object is missing code or message."), json_obj);
Error(u"Json error object is missing code or message."_s, json_obj);
FinishCheck();
return;
}

View File

@@ -52,7 +52,6 @@
#include "utilities/randutils.h"
#include "collection/collectionbackend.h"
#include "collection/collectionmodel.h"
#include "collection/collectionfilter.h"
#include "subsonicservice.h"
#include "subsonicurlhandler.h"
#include "subsonicrequest.h"
@@ -74,7 +73,7 @@ constexpr int kMaxRedirects = 3;
} // namespace
SubsonicService::SubsonicService(Application *app, QObject *parent)
: StreamingService(Song::Source::Subsonic, QStringLiteral("Subsonic"), QStringLiteral("subsonic"), QLatin1String(SubsonicSettingsPage::kSettingsGroup), SettingsDialog::Page::Subsonic, app, parent),
: StreamingService(Song::Source::Subsonic, u"Subsonic"_s, u"subsonic"_s, QLatin1String(SubsonicSettingsPage::kSettingsGroup), SettingsDialog::Page::Subsonic, app, parent),
app_(app),
url_handler_(new SubsonicUrlHandler(app, this)),
collection_backend_(nullptr),
@@ -153,21 +152,21 @@ void SubsonicService::SendPingWithCredentials(QUrl url, const QString &username,
using Param = QPair<QString, QString>;
using ParamList = QList<Param>;
ParamList params = ParamList() << Param(QStringLiteral("c"), QLatin1String(kClientName))
<< Param(QStringLiteral("v"), QLatin1String(kApiVersion))
<< Param(QStringLiteral("f"), QStringLiteral("json"))
<< Param(QStringLiteral("u"), username);
ParamList params = ParamList() << Param(u"c"_s, QLatin1String(kClientName))
<< Param(u"v"_s, QLatin1String(kApiVersion))
<< Param(u"f"_s, u"json"_s)
<< Param(u"u"_s, username);
if (auth_method == SubsonicSettingsPage::AuthMethod::Hex) {
params << Param(QStringLiteral("p"), QStringLiteral("enc:") + QString::fromLatin1(password.toUtf8().toHex()));
params << Param(u"p"_s, u"enc:"_s + QString::fromLatin1(password.toUtf8().toHex()));
}
else {
const QString salt = Utilities::CryptographicRandomString(20);
QCryptographicHash md5(QCryptographicHash::Md5);
md5.addData(password.toUtf8());
md5.addData(salt.toUtf8());
params << Param(QStringLiteral("s"), salt);
params << Param(QStringLiteral("t"), QString::fromLatin1(md5.result().toHex()));
params << Param(u"s"_s, salt);
params << Param(u"t"_s, QString::fromLatin1(md5.result().toHex()));
}
QUrlQuery url_query(url.query());
@@ -195,7 +194,7 @@ void SubsonicService::SendPingWithCredentials(QUrl url, const QString &username,
}
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);
req.setAttribute(QNetworkRequest::Http2AllowedAttribute, http2_);
errors_.clear();
@@ -292,33 +291,33 @@ void SubsonicService::HandlePingReply(QNetworkReply *reply, const QUrl &url, con
QJsonDocument json_doc = QJsonDocument::fromJson(data, &json_error);
if (json_error.error != QJsonParseError::NoError) {
PingError(QStringLiteral("Ping reply from server missing Json data."));
PingError(u"Ping reply from server missing Json data."_s);
return;
}
if (json_doc.isEmpty()) {
PingError(QStringLiteral("Ping reply from server has empty Json document."));
PingError(u"Ping reply from server has empty Json document."_s);
return;
}
if (!json_doc.isObject()) {
PingError(QStringLiteral("Ping reply from server has Json document that is not an object."), json_doc);
PingError(u"Ping 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()) {
PingError(QStringLiteral("Ping reply from server has empty Json object."), json_doc);
PingError(u"Ping reply from server has empty Json object."_s, json_doc);
return;
}
if (!json_obj.contains("subsonic-response"_L1)) {
PingError(QStringLiteral("Ping reply from server is missing subsonic-response"), json_obj);
PingError(u"Ping reply from server is missing subsonic-response"_s, json_obj);
return;
}
QJsonValue value_response = json_obj["subsonic-response"_L1];
if (!value_response.isObject()) {
PingError(QStringLiteral("Ping reply from server subsonic-response is not an object"), value_response);
PingError(u"Ping reply from server subsonic-response is not an object"_s, value_response);
return;
}
QJsonObject obj_response = value_response.toObject();
@@ -326,12 +325,12 @@ void SubsonicService::HandlePingReply(QNetworkReply *reply, const QUrl &url, con
if (obj_response.contains("error"_L1)) {
QJsonValue value_error = obj_response["error"_L1];
if (!value_error.isObject()) {
PingError(QStringLiteral("Authentication error reply from server is not an object"), value_error);
PingError(u"Authentication error reply from server is not an object"_s, value_error);
return;
}
QJsonObject obj_error = value_error.toObject();
if (!obj_error.contains("code"_L1) || !obj_error.contains("message"_L1)) {
PingError(QStringLiteral("Authentication error reply from server is missing status or message"), json_obj);
PingError(u"Authentication error reply from server is missing status or message"_s, json_obj);
return;
}
//int status = obj_error["code"].toInt();
@@ -342,7 +341,7 @@ void SubsonicService::HandlePingReply(QNetworkReply *reply, const QUrl &url, con
}
if (!obj_response.contains("status"_L1)) {
PingError(QStringLiteral("Ping reply from server is missing status"), obj_response);
PingError(u"Ping reply from server is missing status"_s, obj_response);
return;
}
@@ -360,22 +359,22 @@ void SubsonicService::HandlePingReply(QNetworkReply *reply, const QUrl &url, con
return;
}
PingError(QStringLiteral("Ping reply status from server is unknown"), json_obj);
PingError(u"Ping reply status from server is unknown"_s, json_obj);
}
void SubsonicService::CheckConfiguration() {
if (server_url_.isEmpty()) {
Q_EMIT TestComplete(false, QStringLiteral("Missing Subsonic server url."));
Q_EMIT TestComplete(false, u"Missing Subsonic server url."_s);
return;
}
if (username_.isEmpty()) {
Q_EMIT TestComplete(false, QStringLiteral("Missing Subsonic username."));
Q_EMIT TestComplete(false, u"Missing Subsonic username."_s);
return;
}
if (password_.isEmpty()) {
Q_EMIT TestComplete(false, QStringLiteral("Missing Subsonic password."));
Q_EMIT TestComplete(false, u"Missing Subsonic password."_s);
return;
}

View File

@@ -27,6 +27,8 @@
#include "subsonicbaserequest.h"
#include "subsonicurlhandler.h"
using namespace Qt::Literals::StringLiterals;
class Application;
SubsonicUrlHandler::SubsonicUrlHandler(Application *app, SubsonicService *service) : UrlHandler(service), service_(service) {
@@ -45,7 +47,7 @@ UrlHandler::LoadResult SubsonicUrlHandler::StartLoading(const QUrl &url) {
using Param = QPair<QString, QString>;
using ParamList = QList<Param>;
const QUrl stream_url = SubsonicBaseRequest::CreateUrl(server_url(), auth_method(), username(), password(), QStringLiteral("stream"), ParamList() << Param(QStringLiteral("id"), url.path()));
const QUrl stream_url = SubsonicBaseRequest::CreateUrl(server_url(), auth_method(), username(), password(), u"stream"_s, ParamList() << Param(u"id"_s, url.path()));
return LoadResult(url, LoadResult::Type::TrackAvailable, stream_url);