diff --git a/src/gui/accountstate.cpp b/src/gui/accountstate.cpp index 458f68cf84374..72ad6466c479e 100644 --- a/src/gui/accountstate.cpp +++ b/src/gui/accountstate.cpp @@ -30,6 +30,8 @@ #include +using namespace Qt::StringLiterals; + namespace OCC { Q_LOGGING_CATEGORY(lcAccountState, "nextcloud.gui.account.state", QtInfoMsg) @@ -629,8 +631,8 @@ void AccountState::slotNavigationAppsFetched(const QJsonDocument &reply, int sta for (const QJsonValue &value : navLinks) { auto navLink = value.toObject(); - auto *app = new AccountApp(navLink.value("name").toString(), QUrl(navLink.value("href").toString()), - navLink.value("id").toString(), QUrl(navLink.value("icon").toString())); + auto *app = new AccountApp(navLink.value("name"_L1).toString(), QUrl(navLink.value("href"_L1).toString()), + navLink.value("id"_L1).toString(), QUrl(navLink.value("icon"_L1).toString())); _apps << app; } diff --git a/src/gui/folderstatusmodel.cpp b/src/gui/folderstatusmodel.cpp index f6e341a58d082..42a27bf6e6d2f 100644 --- a/src/gui/folderstatusmodel.cpp +++ b/src/gui/folderstatusmodel.cpp @@ -16,6 +16,8 @@ #include #include +using namespace Qt::StringLiterals; + Q_DECLARE_METATYPE(QPersistentModelIndex) namespace OCC { @@ -742,8 +744,8 @@ void FolderStatusModel::slotUpdateDirectories(const QStringList &list) newInfo._folder = parentInfo->_folder; newInfo._pathIdx = parentInfo->_pathIdx; newInfo._pathIdx << newSubs.size(); - newInfo._isExternal = permissionMap.value(removeTrailingSlash(path)).toString().contains("M"); - newInfo._isEncrypted = encryptionMap.value(removeTrailingSlash(path)).toString() == QStringLiteral("1"); + newInfo._isExternal = permissionMap.value(removeTrailingSlash(path)).toString().contains("M"_L1); + newInfo._isEncrypted = encryptionMap.value(removeTrailingSlash(path)).toString() == "1"_L1; newInfo._path = relativePath; newInfo._isNonDecryptable = newInfo.isEncrypted() diff --git a/src/gui/macOS/fileprovidereditlocallyjob.cpp b/src/gui/macOS/fileprovidereditlocallyjob.cpp index 50f4749e27fac..5ae84bc3c209d 100644 --- a/src/gui/macOS/fileprovidereditlocallyjob.cpp +++ b/src/gui/macOS/fileprovidereditlocallyjob.cpp @@ -11,6 +11,8 @@ #include "networkjobs.h" #include "systray.h" +using namespace Qt::StringLiterals; + namespace OCC::Mac { Q_LOGGING_CATEGORY(lcFileProviderEditLocallyJob, "nextcloud.gui.fileprovidereditlocally", QtInfoMsg) @@ -34,7 +36,7 @@ void FileProviderEditLocallyJob::start() return; } - const auto relPathSplit = _relPath.split(QLatin1Char('/')); + const auto relPathSplit = _relPath.split(u'/'); if (relPathSplit.isEmpty()) { showError(tr("Could not find a file for local editing. " "Make sure its path is valid and it is synced locally."), _relPath); @@ -74,7 +76,7 @@ void FileProviderEditLocallyJob::idGetError(const QNetworkReply * const reply) void FileProviderEditLocallyJob::idGetFinished(const QVariantMap &data) { - const auto ocId = data.value("id").toString(); + const auto ocId = data.value("id"_L1).toString(); if (ocId.isEmpty()) { qCWarning(lcFileProviderEditLocallyJob) << "Could not get file ocId."; showError(tr("Could not get file identifier."), tr("The file identifier is empty.")); diff --git a/src/gui/owncloudsetupwizard.cpp b/src/gui/owncloudsetupwizard.cpp index 44d51f7a96df8..9326713d4ccc7 100644 --- a/src/gui/owncloudsetupwizard.cpp +++ b/src/gui/owncloudsetupwizard.cpp @@ -37,6 +37,8 @@ #include #include +using namespace Qt::StringLiterals; + namespace OCC { OwncloudSetupWizard::OwncloudSetupWizard(QObject *parent) @@ -378,9 +380,9 @@ void OwncloudSetupWizard::slotConnectToOCUrl(const QString &url) sender()->deleteLater(); - const auto objData = json.object().value("ocs").toObject().value("data").toObject(); - const auto userId = objData.value("id").toString(""); - const auto displayName = objData.value("display-name").toString(""); + const auto objData = json.object().value("ocs"_L1).toObject().value("data"_L1).toObject(); + const auto userId = objData.value("id"_L1).toString(QString()); + const auto displayName = objData.value("display-name"_L1).toString(QString()); _ocWizard->account()->setDavUser(userId); _ocWizard->account()->setDavDisplayName(displayName); @@ -442,7 +444,7 @@ void OwncloudSetupWizard::slotAuthError() // strip the expected path QString path = redirectUrl.path(); - static QString expectedPath = "/" + _ocWizard->account()->davPath(); + static QString expectedPath = u'/' + _ocWizard->account()->davPath(); if (path.endsWith(expectedPath)) { path.chop(expectedPath.size()); redirectUrl.setPath(path); @@ -488,7 +490,7 @@ void OwncloudSetupWizard::slotAuthError() bool OwncloudSetupWizard::checkDowngradeAdvised(QNetworkReply *reply) { - if (reply->url().scheme() != QLatin1String("https")) { + if (reply->url().scheme() != "https"_L1) { return false; } @@ -503,7 +505,7 @@ bool OwncloudSetupWizard::checkDowngradeAdvised(QNetworkReply *reply) } // Adhere to HSTS, even though we do not parse it properly - if (reply->hasRawHeader("Strict-Transport-Security")) { + if (reply->hasRawHeader("Strict-Transport-Security"_L1)) { return false; } return true; diff --git a/src/gui/sharemanager.cpp b/src/gui/sharemanager.cpp index 3caee2fc56213..8f7314d96e828 100644 --- a/src/gui/sharemanager.cpp +++ b/src/gui/sharemanager.cpp @@ -17,6 +17,8 @@ #include #include +using namespace Qt::StringLiterals; + Q_LOGGING_CATEGORY(lcUserGroupShare, "nextcloud.gui.usergroupshare", QtInfoMsg) namespace OCC { @@ -294,14 +296,14 @@ OcsShareJob *LinkShare::createShareJob(const LinkShareSlot slotFunction) { void LinkShare::slotExpireDateSet(const QJsonDocument &reply, const QVariant &value) { - auto data = reply.object().value("ocs").toObject().value("data").toObject(); + auto data = reply.object().value("ocs"_L1).toObject().value("data"_L1).toObject(); /* * If the reply provides a data back (more REST style) * they use this date. */ - if (data.value("expiration").isString()) { - _expireDate = QDate::fromString(data.value("expiration").toString(), "yyyy-MM-dd 00:00:00"); + if (data.value("expiration"_L1).isString()) { + _expireDate = QDate::fromString(data.value("expiration"_L1).toString(), "yyyy-MM-dd 00:00:00"); } else { _expireDate = value.toDate(); } @@ -391,14 +393,14 @@ void UserGroupShare::setExpireDate(const QDate &date) void UserGroupShare::slotExpireDateSet(const QJsonDocument &reply, const QVariant &value) { - auto data = reply.object().value("ocs").toObject().value("data").toObject(); + auto data = reply.object().value("ocs"_L1).toObject().value("data"_L1).toObject(); /* * If the reply provides a data back (more REST style) * they use this date. */ - if (data.value("expiration").isString()) { - _expireDate = QDate::fromString(data.value("expiration").toString(), "yyyy-MM-dd 00:00:00"); + if (data.value("expiration"_L1).isString()) { + _expireDate = QDate::fromString(data.value("expiration"_L1).toString(), "yyyy-MM-dd 00:00:00"); } else { _expireDate = value.toDate(); } @@ -466,12 +468,12 @@ void ShareManager::createShare(const QString &path, // Find existing share permissions (if this was shared with us) Share::Permissions existingPermissions = SharePermissionAll; const auto &replyObject = reply.object(); - const auto &ocsObject = replyObject["ocs"].toObject(); - const auto &dataArray = ocsObject["data"].toArray(); + const auto &ocsObject = replyObject["ocs"_L1].toObject(); + const auto &dataArray = ocsObject["data"_L1].toArray(); for (const auto &element : dataArray) { auto map = element.toObject(); - if (map["file_target"] == path) - existingPermissions = Share::Permissions(map["permissions"].toInt()); + if (map["file_target"_L1] == path) + existingPermissions = Share::Permissions(map["permissions"_L1].toInt()); } // Limit the permissions we request for a share to the ones the item @@ -510,7 +512,7 @@ void ShareManager::createE2EeShareJob(const QString &fullRemotePath, return; } - Q_ASSERT(folder->remotePath() == QStringLiteral("/") || + Q_ASSERT(folder->remotePath() == "/"_L1 || Utility::noLeadingSlashPath(fullRemotePath).startsWith(Utility::noLeadingSlashPath(Utility::noTrailingSlashPath(folder->remotePath())))); const auto createE2eeShareJob = new UpdateE2eeFolderUsersMetadataJob(_account, @@ -530,7 +532,7 @@ void ShareManager::createE2EeShareJob(const QString &fullRemotePath, void ShareManager::slotShareCreated(const QJsonDocument &reply) { //Parse share - auto data = reply.object().value("ocs").toObject().value("data").toObject(); + auto data = reply.object().value("ocs"_L1).toObject().value("data"_L1).toObject(); SharePtr share(parseShare(data)); emit shareCreated(share); @@ -557,7 +559,7 @@ void ShareManager::fetchSharedWithMe(const QString &path) const QList ShareManager::parseShares(const QJsonDocument &reply) const { qDebug() << reply; - const auto tmpShares = reply.object().value("ocs").toObject().value("data").toArray(); + const auto tmpShares = reply.object().value("ocs"_L1).toObject().value("data"_L1).toArray(); const QString versionString = _account->serverVersion(); qCDebug(lcSharing) << versionString << "Fetched" << tmpShares.count() << "shares"; @@ -566,7 +568,7 @@ const QList ShareManager::parseShares(const QJsonDocument &reply) cons for (const auto &share : tmpShares) { auto data = share.toObject(); - auto shareType = data.value("share_type").toInt(); + auto shareType = data.value("share_type"_L1).toInt(); SharePtr newShare; @@ -599,29 +601,29 @@ void ShareManager::slotSharedWithMeFetched(const QJsonDocument &reply) QSharedPointer ShareManager::parseUserGroupShare(const QJsonObject &data) const { - ShareePtr sharee(new Sharee(data.value("share_with").toString(), - data.value("share_with_displayname").toString(), - static_cast(data.value("share_type").toInt()))); + ShareePtr sharee(new Sharee(data.value("share_with"_L1).toString(), + data.value("share_with_displayname"_L1).toString(), + static_cast(data.value("share_type"_L1).toInt()))); QDate expireDate; - if (data.value("expiration").isString()) { - expireDate = QDate::fromString(data.value("expiration").toString(), "yyyy-MM-dd 00:00:00"); + if (data.value("expiration"_L1).isString()) { + expireDate = QDate::fromString(data.value("expiration"_L1).toString(), "yyyy-MM-dd 00:00:00"); } QString note; - if (data.value("note").isString()) { - note = data.value("note").toString(); + if (data.value("note"_L1).isString()) { + note = data.value("note"_L1).toString(); } return QSharedPointer(new UserGroupShare(_account, - data.value("id").toVariant().toString(), // "id" used to be an integer, support both - data.value("uid_owner").toVariant().toString(), - data.value("uid_file_owner").toVariant().toString(), - data.value("displayname_owner").toVariant().toString(), - data.value("path").toString(), - static_cast(data.value("share_type").toInt()), - !data.value("password").toString().isEmpty(), - static_cast(data.value("permissions").toInt()), + data.value("id"_L1).toVariant().toString(), // "id" used to be an integer, support both + data.value("uid_owner"_L1).toVariant().toString(), + data.value("uid_file_owner"_L1).toVariant().toString(), + data.value("displayname_owner"_L1).toVariant().toString(), + data.value("path"_L1).toString(), + static_cast(data.value("share_type"_L1).toInt()), + !data.value("password"_L1).toString().isEmpty(), + static_cast(data.value("permissions"_L1).toInt()), sharee, expireDate, note)); @@ -632,60 +634,60 @@ QSharedPointer ShareManager::parseLinkShare(const QJsonObject &data) QUrl url; // From ownCloud server 8.2 the url field is always set for public shares - if (data.contains("url")) { - url = QUrl(data.value("url").toString()); + if (data.contains("url"_L1)) { + url = QUrl(data.value("url"_L1).toString()); } else if (_account->serverVersionInt() >= Account::makeServerVersion(8, 0, 0)) { // From ownCloud server version 8 on, a different share link scheme is used. - url = QUrl(Utility::concatUrlPath(_account->url(), QLatin1String("index.php/s/") + data.value("token").toString())).toString(); + url = QUrl(Utility::concatUrlPath(_account->url(), QLatin1String("index.php/s/") + data.value("token"_L1).toString())).toString(); } else { QUrlQuery queryArgs; - queryArgs.addQueryItem(QLatin1String("service"), QLatin1String("files")); - queryArgs.addQueryItem(QLatin1String("t"), data.value("token").toString()); - url = QUrl(Utility::concatUrlPath(_account->url(), QLatin1String("public.php"), queryArgs).toString()); + queryArgs.addQueryItem(u"service"_s, u"files"_s); + queryArgs.addQueryItem(u"t"_s, data.value("token"_L1).toString()); + url = QUrl(Utility::concatUrlPath(_account->url(), u"public.php"_s, queryArgs).toString()); } QDate expireDate; - if (data.value("expiration").isString()) { - expireDate = QDate::fromString(data.value("expiration").toString(), "yyyy-MM-dd 00:00:00"); + if (data.value("expiration"_L1).isString()) { + expireDate = QDate::fromString(data.value("expiration"_L1).toString(), "yyyy-MM-dd 00:00:00"); } QString note; - if (data.value("note").isString()) { - note = data.value("note").toString(); + if (data.value("note"_L1).isString()) { + note = data.value("note"_L1).toString(); } return QSharedPointer(new LinkShare(_account, - data.value("id").toVariant().toString(), // "id" used to be an integer, support both - data.value("uid_owner").toString(), - data.value("uid_file_owner").toString(), - data.value("displayname_owner").toString(), - data.value("path").toString(), - data.value("name").toString(), - data.value("token").toString(), - (Share::Permissions)data.value("permissions").toInt(), - data.value("share_with").isString(), // has password? + data.value("id"_L1).toVariant().toString(), // "id" used to be an integer, support both + data.value("uid_owner"_L1).toString(), + data.value("uid_file_owner"_L1).toString(), + data.value("displayname_owner"_L1).toString(), + data.value("path"_L1).toString(), + data.value("name"_L1).toString(), + data.value("token"_L1).toString(), + (Share::Permissions)data.value("permissions"_L1).toInt(), + data.value("share_with"_L1).isString(), // has password? url, expireDate, note, - data.value("label").toString(), - data.value("hide_download").toInt() == 1)); + data.value("label"_L1).toString(), + data.value("hide_download"_L1).toInt() == 1)); } SharePtr ShareManager::parseShare(const QJsonObject &data) const { - ShareePtr sharee(new Sharee(data.value("share_with").toString(), - data.value("share_with_displayname").toString(), - (Sharee::Type)data.value("share_type").toInt())); + ShareePtr sharee(new Sharee(data.value("share_with"_L1).toString(), + data.value("share_with_displayname"_L1).toString(), + (Sharee::Type)data.value("share_type"_L1).toInt())); return SharePtr(new Share(_account, - data.value("id").toVariant().toString(), // "id" used to be an integer, support both - data.value("uid_owner").toVariant().toString(), - data.value("uid_file_owner").toVariant().toString(), - data.value("displayname_owner").toVariant().toString(), - data.value("path").toString(), - (Share::ShareType)data.value("share_type").toInt(), - !data.value("password").toString().isEmpty(), - (Share::Permissions)data.value("permissions").toInt(), + data.value("id"_L1).toVariant().toString(), // "id" used to be an integer, support both + data.value("uid_owner"_L1).toVariant().toString(), + data.value("uid_file_owner"_L1).toVariant().toString(), + data.value("displayname_owner"_L1).toVariant().toString(), + data.value("path"_L1).toString(), + (Share::ShareType)data.value("share_type"_L1).toInt(), + !data.value("password"_L1).toString().isEmpty(), + (Share::Permissions)data.value("permissions"_L1).toInt(), sharee)); } diff --git a/src/gui/socketapi/socketapi.cpp b/src/gui/socketapi/socketapi.cpp index 68b717498f960..78cbf4706e3c3 100644 --- a/src/gui/socketapi/socketapi.cpp +++ b/src/gui/socketapi/socketapi.cpp @@ -78,6 +78,8 @@ // The second number should be changed when there are new features. #define MIRALL_SOCKET_API_VERSION "1.1" +using namespace Qt::StringLiterals; + namespace { constexpr auto encryptJobPropertyFolder = "folder"; constexpr auto encryptJobPropertyPath = "path"; @@ -394,7 +396,7 @@ void SocketApi::slotReadSocket() }(); const auto argument = QString{argPos != -1 ? line.mid(argPos + 1) : QString()}; - if (command.startsWith("ASYNC_")) { + if (command.startsWith("ASYNC_"_L1)) { const auto arguments = argument.split('|'); if (arguments.size() != 2) { listener->sendError(QStringLiteral("argument count is wrong")); @@ -729,8 +731,8 @@ void SocketApi::command_EDIT(const QString &localFile, SocketListener *listener) job->setVerb(JsonApiJob::Verb::Post); QObject::connect(job, &JsonApiJob::jsonReceived, [](const QJsonDocument &json){ - auto data = json.object().value("ocs").toObject().value("data").toObject(); - auto url = QUrl(data.value("url").toString()); + auto data = json.object().value("ocs"_L1).toObject().value("data"_L1).toObject(); + auto url = QUrl(data.value("url"_L1).toString()); if(!url.isEmpty()) Utility::openBrowser(url); diff --git a/src/gui/tray/activitydata.cpp b/src/gui/tray/activitydata.cpp index e4dc4232648a7..dfdc39b91ced5 100644 --- a/src/gui/tray/activitydata.cpp +++ b/src/gui/tray/activitydata.cpp @@ -9,6 +9,8 @@ #include "activitydata.h" #include "folderman.h" +using namespace Qt::StringLiterals; + namespace { QUrl stringToUrl(const QUrl &accountUrl, const QString &link) { auto url = QUrl::fromUserInput(link); @@ -60,36 +62,36 @@ Activity::Identifier Activity::ident() const ActivityLink ActivityLink::createFomJsonObject(const QJsonObject &obj) { ActivityLink activityLink; - activityLink._label = QUrl::fromPercentEncoding(obj.value(QStringLiteral("label")).toString().toUtf8()); - activityLink._link = obj.value(QStringLiteral("link")).toString(); - activityLink._verb = obj.value(QStringLiteral("type")).toString().toUtf8(); - activityLink._primary = obj.value(QStringLiteral("primary")).toBool(); + activityLink._label = QUrl::fromPercentEncoding(obj.value("label"_L1).toString().toUtf8()); + activityLink._link = obj.value("link"_L1).toString(); + activityLink._verb = obj.value("type"_L1).toString().toUtf8(); + activityLink._primary = obj.value("primary"_L1).toBool(); return activityLink; } OCC::Activity Activity::fromActivityJson(const QJsonObject &json, const AccountPtr account) { - const auto activityUser = json.value(QStringLiteral("user")).toString(); + const auto activityUser = json.value("user"_L1).toString(); Activity activity; activity._type = Activity::ActivityType; - activity._objectType = json.value(QStringLiteral("object_type")).toString(); - activity._objectId = json.value(QStringLiteral("object_id")).toInt(); - activity._objectName = json.value(QStringLiteral("object_name")).toString(); - activity._id = json.value(QStringLiteral("activity_id")).toInteger(); - activity._fileAction = json.value(QStringLiteral("type")).toString(); + activity._objectType = json.value("object_type"_L1).toString(); + activity._objectId = json.value("object_id"_L1).toInt(); + activity._objectName = json.value("object_name"_L1).toString(); + activity._id = json.value("activity_id"_L1).toInteger(); + activity._fileAction = json.value("type"_L1).toString(); activity._accName = account->displayName(); - activity._subject = json.value(QStringLiteral("subject")).toString(); - activity._message = json.value(QStringLiteral("message")).toString(); - activity._file = json.value(QStringLiteral("object_name")).toString(); - activity._link = stringToUrl(account->url(), json.value(QStringLiteral("link")).toString()); - activity._dateTime = QDateTime::fromString(json.value(QStringLiteral("datetime")).toString(), Qt::ISODate); - activity._icon = json.value(QStringLiteral("icon")).toString(); - activity._isCurrentUserFileActivity = activity._objectType == QStringLiteral("files") && activityUser == account->davUser(); + activity._subject = json.value("subject"_L1).toString(); + activity._message = json.value("message"_L1).toString(); + activity._file = json.value("object_name"_L1).toString(); + activity._link = stringToUrl(account->url(), json.value("link"_L1).toString()); + activity._dateTime = QDateTime::fromString(json.value("datetime"_L1).toString(), Qt::ISODate); + activity._icon = json.value("icon"_L1).toString(); + activity._isCurrentUserFileActivity = activity._objectType == "files"_L1 && activityUser == account->davUser(); activity._isMultiObjectActivity = json.value("objects").toObject().count() > 1; - auto richSubjectData = json.value(QStringLiteral("subject_rich")).toArray(); + auto richSubjectData = json.value("subject_rich"_L1).toArray(); if(richSubjectData.size() > 1) { activity._subjectRich = richSubjectData[0].toString(); @@ -100,16 +102,16 @@ OCC::Activity Activity::fromActivityJson(const QJsonObject &json, const AccountP for (auto i = parameters.begin(); i != parameters.end(); ++i) { const auto parameterJsonObject = i.value().toObject(); - const auto richParamLink = stringToUrl(account->url(), parameterJsonObject.value(QStringLiteral("link")).toString()); + const auto richParamLink = stringToUrl(account->url(), parameterJsonObject.value("link"_L1).toString()); activity._subjectRichParameters[i.key()] = QVariant::fromValue(Activity::RichSubjectParameter{ - parameterJsonObject.value(QStringLiteral("type")).toString(), - parameterJsonObject.value(QStringLiteral("id")).toString(), - parameterJsonObject.value(QStringLiteral("name")).toString(), - parameterJsonObject.contains(QStringLiteral("path")) ? parameterJsonObject.value(QStringLiteral("path")).toString() : QString(), + parameterJsonObject.value("type"_L1).toString(), + parameterJsonObject.value("id"_L1).toString(), + parameterJsonObject.value("name"_L1).toString(), + parameterJsonObject.contains("path"_L1) ? parameterJsonObject.value("path"_L1).toString() : QString(), richParamLink, }); - if (activity._objectType == QStringLiteral("calendar") && activity._link.isEmpty()) { + if (activity._objectType == "calendar"_L1 && activity._link.isEmpty()) { activity._link = richParamLink; } } @@ -128,43 +130,43 @@ OCC::Activity Activity::fromActivityJson(const QJsonObject &json, const AccountP activity._subjectDisplay = displayString; } - const auto previewsData = json.value(QStringLiteral("previews")).toArray(); + const auto previewsData = json.value("previews"_L1).toArray(); const QMimeDatabase mimeDb; for(const auto &preview : previewsData) { const auto jsonPreviewData = preview.toObject(); PreviewData data; - data._link = jsonPreviewData.value(QStringLiteral("link")).toString(); - data._mimeType = jsonPreviewData.value(QStringLiteral("mimeType")).toString(); - data._fileId = jsonPreviewData.value(QStringLiteral("fileId")).toInt(); - data._view = jsonPreviewData.value(QStringLiteral("view")).toString(); - data._filename = jsonPreviewData.value(QStringLiteral("filename")).toString(); + data._link = jsonPreviewData.value("link"_L1).toString(); + data._mimeType = jsonPreviewData.value("mimeType"_L1).toString(); + data._fileId = jsonPreviewData.value("fileId"_L1).toInt(); + data._view = jsonPreviewData.value("view"_L1).toString(); + data._filename = jsonPreviewData.value("filename"_L1).toString(); const auto mimeType = mimeDb.mimeTypeForName(data._mimeType); - if(data._mimeType.contains(QStringLiteral("text/")) || data._mimeType.contains(QStringLiteral("/pdf"))) { + if(data._mimeType.contains("text/"_L1) || data._mimeType.contains("/pdf"_L1)) { data._source = account->url().toString() + relativeServerFileTypeIconPath(mimeType); data._isMimeTypeIcon = true; } else { - data._source = jsonPreviewData.value(QStringLiteral("source")).toString(); - data._isMimeTypeIcon = jsonPreviewData.value(QStringLiteral("isMimeTypeIcon")).toBool(); + data._source = jsonPreviewData.value("source"_L1).toString(); + data._isMimeTypeIcon = jsonPreviewData.value("isMimeTypeIcon"_L1).toBool(); } activity._previews.append(data); } if(!previewsData.isEmpty()) { - if(activity._icon.contains(QStringLiteral("add-color.svg"))) { + if(activity._icon.contains("add-color.svg"_L1)) { activity._icon = "image://svgimage-custom-color/add.svg"; - } else if(activity._icon.contains(QStringLiteral("delete.svg"))) { + } else if(activity._icon.contains("delete.svg"_L1)) { activity._icon = "image://svgimage-custom-color/delete.svg"; - } else if(activity._icon.contains(QStringLiteral("change.svg"))) { + } else if(activity._icon.contains("change.svg"_L1)) { activity._icon = "image://svgimage-custom-color/change.svg"; } } - auto actions = json.value("actions").toArray(); + auto actions = json.value("actions"_L1).toArray(); for (const auto &action : std::as_const(actions)) { activity._links.append(ActivityLink::createFomJsonObject(action.toObject())); } diff --git a/src/gui/tray/activitylistmodel.cpp b/src/gui/tray/activitylistmodel.cpp index cd6f58b837233..674aee5a7247d 100644 --- a/src/gui/tray/activitylistmodel.cpp +++ b/src/gui/tray/activitylistmodel.cpp @@ -26,6 +26,8 @@ #include #include +using namespace Qt::StringLiterals; + namespace OCC { Q_LOGGING_CATEGORY(lcActivity, "nextcloud.gui.activity", QtInfoMsg) @@ -504,7 +506,7 @@ void ActivityListModel::insertOrRemoveDummyFetchingActivity() void ActivityListModel::activitiesReceived(const QJsonDocument &json, int statusCode) { - const auto activities = json.object().value(QStringLiteral("ocs")).toObject().value(QStringLiteral("data")).toArray(); + const auto activities = json.object().value("ocs"_L1).toObject().value("data"_L1).toArray(); if (!_accountState) { return; diff --git a/src/gui/tray/notificationhandler.cpp b/src/gui/tray/notificationhandler.cpp index b7ac772f9aa6f..4520c8c2ca0bb 100644 --- a/src/gui/tray/notificationhandler.cpp +++ b/src/gui/tray/notificationhandler.cpp @@ -14,6 +14,8 @@ #include #include +using namespace Qt::StringLiterals; + namespace OCC { Q_LOGGING_CATEGORY(lcServerNotification, "nextcloud.gui.servernotification", QtInfoMsg) @@ -94,7 +96,7 @@ void ServerNotificationHandler::slotNotificationsReceived(const QJsonDocument &j } _preFetchEtagHeader = postFetchEtagHeader; - const auto notifies = json.object().value("ocs").toObject().value("data").toArray(); + const auto notifies = json.object().value("ocs"_L1).toObject().value("data"_L1).toArray(); auto *ai = qvariant_cast(sender()->property(propertyAccountStateC)); @@ -106,33 +108,33 @@ void ServerNotificationHandler::slotNotificationsReceived(const QJsonDocument &j auto a = Activity::fromActivityJson(json, ai->account()); a._type = Activity::NotificationType; - a._id = json.value("notification_id").toInteger(); + a._id = json.value("notification_id"_L1).toInteger(); if(json.contains("subjectRichParameters")) { - const auto richParams = json.value("subjectRichParameters").toObject(); + const auto richParams = json.value("subjectRichParameters"_L1).toObject(); const auto richParamsKeys = richParams.keys(); for(const auto &key : richParamsKeys) { const auto parameterJsonObject = richParams.value(key).toObject(); a._subjectRichParameters.insert(key, QVariant::fromValue(Activity::RichSubjectParameter{ - parameterJsonObject.value(QStringLiteral("type")).toString(), - parameterJsonObject.value(QStringLiteral("id")).toString(), - parameterJsonObject.value(QStringLiteral("name")).toString(), + parameterJsonObject.value("type"_L1).toString(), + parameterJsonObject.value("id"_L1).toString(), + parameterJsonObject.value("name"_L1).toString(), QString(), QUrl() })); } } - if (json.contains("shouldNotify")) { - a._shouldNotify = json.value("shouldNotify").toBool(true); + if (json.contains("shouldNotify"_L1)) { + a._shouldNotify = json.value("shouldNotify"_L1).toBool(true); } // 2 cases to consider: // 1. server == 24 & has Talk: object_type is chat/call/room & object_id contains conversationToken/messageId // 2. server < 24 & has Talk: object_type is chat/call/room & object_id contains _only_ conversationToken - if (a._objectType == "chat" || a._objectType == "call" || a._objectType == "room") { - const auto objectId = json.value("object_id").toString(); - const auto objectIdData = objectId.split("/"); + if (a._objectType == "chat"_L1 || a._objectType == "call"_L1 || a._objectType == "room"_L1) { + const auto objectId = json.value("object_id"_L1).toString(); + const auto objectIdData = objectId.split(u'/'); ActivityLink al; al._label = tr("Reply"); @@ -147,25 +149,25 @@ void ServerNotificationHandler::slotNotificationsReceived(const QJsonDocument &j qCInfo(lcServerNotification) << "Replying directly to Talk conversation" << a._talkNotificationData.conversationToken << "will not be possible because the notification doesn't contain the message ID."; } - if (a._subjectRichParameters.contains("user")) { + if (a._subjectRichParameters.contains("user"_L1)) { // callback then it is the primary action - if (a._objectType == "call") { + if (a._objectType == "call"_L1) { al._primary = false; } - a._talkNotificationData.userAvatar = ai->account()->url().toString() + QStringLiteral("/index.php/avatar/") + a._subjectRichParameters["user"].value().id + QStringLiteral("/128"); + a._talkNotificationData.userAvatar = ai->account()->url().toString() + QStringLiteral("/index.php/avatar/") + a._subjectRichParameters["user"_L1].value().id + QStringLiteral("/128"); } // We want to serve incoming call dialogs to the user for calls that - if (a._objectType == "call" && a._dateTime.secsTo(QDateTime::currentDateTime()) < 120) { + if (a._objectType == "call"_L1 && a._dateTime.secsTo(QDateTime::currentDateTime()) < 120) { callList.append(a); } a._links.insert(al._primary? 0 : a._links.size(), al); } - QUrl link(json.value("link").toString()); + QUrl link(json.value("link"_L1).toString()); if (!link.isEmpty()) { if (link.host().isEmpty()) { link.setScheme(ai->account()->url().scheme()); diff --git a/src/gui/tray/talkreply.cpp b/src/gui/tray/talkreply.cpp index 2353164664922..8e8a1a8d61a01 100644 --- a/src/gui/tray/talkreply.cpp +++ b/src/gui/tray/talkreply.cpp @@ -12,6 +12,8 @@ #include #include +using namespace Qt::StringLiterals; + namespace OCC { Q_LOGGING_CATEGORY(lcTalkReply, "nextcloud.gui.talkreply", QtInfoMsg) @@ -34,8 +36,8 @@ void TalkReply::sendReplyMessage(const QString &conversationToken, const QString qCWarning(lcTalkReply) << "Status code" << statusCode; } - const auto responseObj = response.object().value("ocs").toObject().value("data").toObject(); - emit replyMessageSent(responseObj.value("message").toString()); + const auto responseObj = response.object().value("ocs"_L1).toObject().value("data"_L1).toObject(); + emit replyMessageSent(responseObj.value("message"_L1).toString()); deleteLater(); }); diff --git a/src/gui/tray/unifiedsearchresultslistmodel.cpp b/src/gui/tray/unifiedsearchresultslistmodel.cpp index 5a6ac2ad97d69..424bc4c191a97 100644 --- a/src/gui/tray/unifiedsearchresultslistmodel.cpp +++ b/src/gui/tray/unifiedsearchresultslistmodel.cpp @@ -16,22 +16,24 @@ #include #include +using namespace Qt::StringLiterals; + namespace { QString imagePlaceholderUrlForProviderId(const QString &providerId, const bool darkMode) { const auto colorIconPath = darkMode ? QStringLiteral(":/client/theme/white/") : QStringLiteral(":/client/theme/black/"); - if (providerId.contains(QStringLiteral("message"), Qt::CaseInsensitive) - || providerId.contains(QStringLiteral("talk"), Qt::CaseInsensitive)) { + if (providerId.contains("message"_L1, Qt::CaseInsensitive) + || providerId.contains("talk"_L1, Qt::CaseInsensitive)) { return colorIconPath % QStringLiteral("wizard-talk.svg"); - } else if (providerId.contains(QStringLiteral("file"), Qt::CaseInsensitive)) { + } else if (providerId.contains("file"_L1, Qt::CaseInsensitive)) { return colorIconPath % QStringLiteral("edit.svg"); - } else if (providerId.contains(QStringLiteral("deck"), Qt::CaseInsensitive)) { + } else if (providerId.contains("deck"_L1, Qt::CaseInsensitive)) { return colorIconPath % QStringLiteral("deck.svg"); - } else if (providerId.contains(QStringLiteral("calendar"), Qt::CaseInsensitive)) { + } else if (providerId.contains("calendar"_L1, Qt::CaseInsensitive)) { return colorIconPath % QStringLiteral("calendar.svg"); - } else if (providerId.contains(QStringLiteral("mail"), Qt::CaseInsensitive)) { + } else if (providerId.contains("mail"_L1, Qt::CaseInsensitive)) { return colorIconPath % QStringLiteral("email.svg"); - } else if (providerId.contains(QStringLiteral("comment"), Qt::CaseInsensitive)) { + } else if (providerId.contains("comment"_L1, Qt::CaseInsensitive)) { return colorIconPath % QStringLiteral("comment.svg"); } @@ -41,18 +43,18 @@ QString imagePlaceholderUrlForProviderId(const QString &providerId, const bool d QString localIconPathFromIconPrefix(const QString &iconNameWithPrefix, const bool darkMode) { const auto colorIconPath = darkMode ? QStringLiteral(":/client/theme/white/") : QStringLiteral(":/client/theme/black/"); - if (iconNameWithPrefix.contains(QStringLiteral("message"), Qt::CaseInsensitive) - || iconNameWithPrefix.contains(QStringLiteral("talk"), Qt::CaseInsensitive)) { + if (iconNameWithPrefix.contains("message"_L1, Qt::CaseInsensitive) + || iconNameWithPrefix.contains("talk"_L1, Qt::CaseInsensitive)) { return colorIconPath % QStringLiteral("wizard-talk.svg"); - } else if (iconNameWithPrefix.contains(QStringLiteral("folder"), Qt::CaseInsensitive)) { + } else if (iconNameWithPrefix.contains("folder"_L1, Qt::CaseInsensitive)) { return colorIconPath % QStringLiteral("folder.svg"); - } else if (iconNameWithPrefix.contains(QStringLiteral("deck"), Qt::CaseInsensitive)) { + } else if (iconNameWithPrefix.contains("deck"_L1, Qt::CaseInsensitive)) { return colorIconPath % QStringLiteral("deck.svg"); - } else if (iconNameWithPrefix.contains(QStringLiteral("contacts"), Qt::CaseInsensitive)) { + } else if (iconNameWithPrefix.contains("contacts"_L1, Qt::CaseInsensitive)) { return colorIconPath % QStringLiteral("wizard-groupware.svg"); - } else if (iconNameWithPrefix.contains(QStringLiteral("calendar"), Qt::CaseInsensitive)) { + } else if (iconNameWithPrefix.contains("calendar"_L1, Qt::CaseInsensitive)) { return colorIconPath % QStringLiteral("calendar.svg"); - } else if (iconNameWithPrefix.contains(QStringLiteral("mail"), Qt::CaseInsensitive)) { + } else if (iconNameWithPrefix.contains("mail"_L1, Qt::CaseInsensitive)) { return colorIconPath % QStringLiteral("email.svg"); } @@ -70,7 +72,7 @@ QString iconUrlForDefaultIconName(const QString &defaultIconName, const bool dar const auto colorIconPath = darkMode ? QStringLiteral(":/client/theme/white/") : QStringLiteral(":/client/theme/black/"); if (defaultIconName.startsWith(QStringLiteral("icon-"))) { - const auto parts = defaultIconName.split(QLatin1Char('-')); + const auto parts = defaultIconName.split(u'-'); if (parts.size() > 1) { const QString blackOrWhiteIconFilePath = colorIconPath + parts[1] + QStringLiteral(".svg"); @@ -101,17 +103,17 @@ QString generateUrlForThumbnail(const QString &thumbnailUrl, const QUrl &serverU auto serverUrlCopy = serverUrl; auto thumbnailUrlCopy = thumbnailUrl; - if (thumbnailUrlCopy.startsWith(QLatin1Char('/')) || thumbnailUrlCopy.startsWith(QLatin1Char('\\'))) { + if (thumbnailUrlCopy.startsWith(u'/') || thumbnailUrlCopy.startsWith(u'\\')) { // relative image resource URL, just needs some concatenation with current server URL // some icons may contain parameters after (?) - const QStringList thumbnailUrlCopySplitted = thumbnailUrlCopy.contains(QLatin1Char('?')) - ? thumbnailUrlCopy.split(QLatin1Char('?'), Qt::SkipEmptyParts) + const QStringList thumbnailUrlCopySplitted = thumbnailUrlCopy.contains(u'?') + ? thumbnailUrlCopy.split(u'?', Qt::SkipEmptyParts) : QStringList{thumbnailUrlCopy}; Q_ASSERT(!thumbnailUrlCopySplitted.isEmpty()); serverUrlCopy.setPath(thumbnailUrlCopySplitted[0]); thumbnailUrlCopy = serverUrlCopy.toString(); if (thumbnailUrlCopySplitted.size() > 1) { - thumbnailUrlCopy += QLatin1Char('?') + thumbnailUrlCopySplitted[1]; + thumbnailUrlCopy += u'?' + thumbnailUrlCopySplitted[1]; } } @@ -124,16 +126,16 @@ QString generateUrlForIcon(const QString &fallbackIcon, const QUrl &serverUrl, c auto fallbackIconCopy = fallbackIcon; - if (fallbackIconCopy.startsWith(QLatin1Char('/')) || fallbackIconCopy.startsWith(QLatin1Char('\\'))) { + if (fallbackIconCopy.startsWith(u'/') || fallbackIconCopy.startsWith(u'\\')) { // relative image resource URL, just needs some concatenation with current server URL // some icons may contain parameters after (?) const QStringList fallbackIconPathSplitted = - fallbackIconCopy.contains(QLatin1Char('?')) ? fallbackIconCopy.split(QLatin1Char('?')) : QStringList{fallbackIconCopy}; + fallbackIconCopy.contains(u'?') ? fallbackIconCopy.split(u'?') : QStringList{fallbackIconCopy}; Q_ASSERT(!fallbackIconPathSplitted.isEmpty()); serverUrlCopy.setPath(fallbackIconPathSplitted[0]); fallbackIconCopy = serverUrlCopy.toString(); if (fallbackIconPathSplitted.size() > 1) { - fallbackIconCopy += QLatin1Char('?') + fallbackIconPathSplitted[1]; + fallbackIconCopy += u'?' + fallbackIconPathSplitted[1]; } } else if (!fallbackIconCopy.isEmpty()) { // could be one of names for standard icons (e.g. icon-mail) @@ -155,7 +157,7 @@ std::pair iconsFromThumbnailAndFallbackIcon(const QString &thumbn if (serverUrl.isEmpty()) { const QStringList listImages = {thumbnailUrl, fallbackIcon}; - return {listImages.join(QLatin1Char(';')), false}; + return {listImages.join(u';'), false}; } const auto urlForThumbnail = generateUrlForThumbnail(thumbnailUrl, serverUrl); @@ -172,7 +174,7 @@ std::pair iconsFromThumbnailAndFallbackIcon(const QString &thumbn } const QStringList listImages{urlForThumbnail, urlForFallbackIcon}; - return {listImages.join(QLatin1Char(';')), true}; + return {listImages.join(u';'), true}; } constexpr int searchTermEditingFinishedSearchStartDelay = 800; @@ -331,12 +333,12 @@ void UnifiedSearchResultsListModel::resultClicked(const QString &providerId, con const auto fileName = urlQuery.queryItemValue(QStringLiteral("scrollto"), QUrl::ComponentFormattingOption::FullyDecoded); - if (providerId.contains(QStringLiteral("file"), Qt::CaseInsensitive) && !dir.isEmpty() && !fileName.isEmpty()) { + if (providerId.contains("file"_L1, Qt::CaseInsensitive) && !dir.isEmpty() && !fileName.isEmpty()) { if (!_accountState || !_accountState->account()) { return; } - const QString relativePath = dir + QLatin1Char('/') + fileName; + const QString relativePath = dir + u'/' + fileName; const auto localFiles = FolderMan::instance()->findFileInLocalFolders(QFileInfo(relativePath).path(), _accountState->account()); @@ -393,7 +395,7 @@ void UnifiedSearchResultsListModel::slotFetchProvidersFinished(const QJsonDocume if (!job) { qCCritical(lcUnifiedSearch) << QStringLiteral("Failed to fetch providers.").arg(_searchTerm); - _errorString += tr("Failed to fetch providers.") + QLatin1Char('\n'); + _errorString += tr("Failed to fetch providers.") + u'\n'; emit errorStringChanged(); return; } @@ -405,22 +407,22 @@ void UnifiedSearchResultsListModel::slotFetchProvidersFinished(const QJsonDocume .arg(job->errorString()); _errorString += tr("Failed to fetch search providers for '%1'. Error: %2").arg(_searchTerm).arg(job->errorString()) - + QLatin1Char('\n'); + + u'\n'; emit errorStringChanged(); return; } const auto providerList = - json.object().value(QStringLiteral("ocs")).toObject().value(QStringLiteral("data")).toVariant().toList(); + json.object().value("ocs"_L1).toObject().value("data"_L1).toVariant().toList(); for (const auto &provider : providerList) { const auto providerMap = provider.toMap(); - const auto id = providerMap[QStringLiteral("id")].toString(); - const auto name = providerMap[QStringLiteral("name")].toString(); - if (!name.isEmpty() && id != QStringLiteral("talk-message-current")) { + const auto id = providerMap["id"_L1].toString(); + const auto name = providerMap["name"_L1].toString(); + if (!name.isEmpty() && id != "talk-message-current"_L1) { UnifiedSearchProvider newProvider; newProvider._name = name; newProvider._id = id; - newProvider._order = providerMap[QStringLiteral("order")].toInt(); + newProvider._order = providerMap["order"_L1].toInt(); _providers.insert(newProvider._id, newProvider); } } @@ -438,7 +440,7 @@ void UnifiedSearchResultsListModel::slotSearchForProviderFinished(const QJsonDoc if (!job) { qCCritical(lcUnifiedSearch) << QStringLiteral("Search has failed for '%2'.").arg(_searchTerm); - _errorString += tr("Search has failed for '%2'.").arg(_searchTerm) + QLatin1Char('\n'); + _errorString += tr("Search has failed for '%2'.").arg(_searchTerm) + u'\n'; emit errorStringChanged(); return; } @@ -467,12 +469,12 @@ void UnifiedSearchResultsListModel::slotSearchForProviderFinished(const QJsonDoc .arg(_searchTerm) .arg(job->errorString()); _errorString += - tr("Search has failed for '%1'. Error: %2").arg(_searchTerm).arg(job->errorString()) + QLatin1Char('\n'); + tr("Search has failed for '%1'. Error: %2").arg(_searchTerm).arg(job->errorString()) + u'\n'; emit errorStringChanged(); return; } - const auto data = json.object().value(QStringLiteral("ocs")).toObject().value(QStringLiteral("data")).toObject(); + const auto data = json.object().value("ocs"_L1).toObject().value("data"_L1).toObject(); if (!data.isEmpty()) { parseResultsForProvider(data, providerId, job->property("appendResults").toBool()); } @@ -530,8 +532,8 @@ void UnifiedSearchResultsListModel::startSearchForProvider(const QString &provid void UnifiedSearchResultsListModel::parseResultsForProvider(const QJsonObject &data, const QString &providerId, bool fetchedMore) { - const auto cursor = data.value(QStringLiteral("cursor")).toInt(); - const auto entries = data.value(QStringLiteral("entries")).toVariant().toList(); + const auto cursor = data.value("cursor"_L1).toInt(); + const auto entries = data.value("entries"_L1).toVariant().toList(); auto &provider = _providers[providerId]; @@ -553,7 +555,7 @@ void UnifiedSearchResultsListModel::parseResultsForProvider(const QJsonObject &d return; } - provider._isPaginated = data.value(QStringLiteral("isPaginated")).toBool(); + provider._isPaginated = data.value("isPaginated"_L1).toBool(); provider._cursor = cursor; if (provider._pageSize == -1) { @@ -578,18 +580,18 @@ void UnifiedSearchResultsListModel::parseResultsForProvider(const QJsonObject &d result._providerId = provider._id; result._order = provider._order; result._providerName = provider._name; - result._isRounded = entryMap.value(QStringLiteral("rounded")).toBool(); - result._title = entryMap.value(QStringLiteral("title")).toString(); - result._subline = entryMap.value(QStringLiteral("subline")).toString(); + result._isRounded = entryMap.value("rounded"_L1).toBool(); + result._title = entryMap.value("title"_L1).toString(); + result._subline = entryMap.value("subline"_L1).toString(); - const auto resourceUrl = entryMap.value(QStringLiteral("resourceUrl")).toUrl(); + const auto resourceUrl = entryMap.value("resourceUrl"_L1).toUrl(); const auto accountUrl = (_accountState && _accountState->account()) ? _accountState->account()->url() : QUrl(); result._resourceUrl = openableResourceUrl(resourceUrl, accountUrl); - const auto darkIconsData = iconsFromThumbnailAndFallbackIcon(entryMap.value(QStringLiteral("thumbnailUrl")).toString(), - entryMap.value(QStringLiteral("icon")).toString(), accountUrl, true); - const auto lightIconsData = iconsFromThumbnailAndFallbackIcon(entryMap.value(QStringLiteral("thumbnailUrl")).toString(), - entryMap.value(QStringLiteral("icon")).toString(), accountUrl, false); + const auto darkIconsData = iconsFromThumbnailAndFallbackIcon(entryMap.value("thumbnailUrl"_L1).toString(), + entryMap.value("icon"_L1).toString(), accountUrl, true); + const auto lightIconsData = iconsFromThumbnailAndFallbackIcon(entryMap.value("thumbnailUrl"_L1).toString(), + entryMap.value("icon"_L1).toString(), accountUrl, false); result._darkIcons = darkIconsData.first; result._lightIcons = lightIconsData.first; result._darkIconsIsThumbnail = darkIconsData.second; diff --git a/src/gui/userinfo.cpp b/src/gui/userinfo.cpp index dd19351a2819a..b65a604b72b5d 100644 --- a/src/gui/userinfo.cpp +++ b/src/gui/userinfo.cpp @@ -15,6 +15,8 @@ #include #include +using namespace Qt::StringLiterals; + namespace OCC { namespace { @@ -96,11 +98,11 @@ void UserInfo::slotFetchInfo() void UserInfo::slotUpdateLastInfo(const QJsonDocument &json) { - auto objData = json.object().value("ocs").toObject().value("data").toObject(); + auto objData = json.object().value("ocs"_L1).toObject().value("data"_L1).toObject(); AccountPtr account = _accountState->account(); - if (const auto newUserId = objData.value("id").toString(); !newUserId.isEmpty()) { + if (const auto newUserId = objData.value("id"_L1).toString(); !newUserId.isEmpty()) { if (QString::compare(account->davUser(), newUserId, Qt::CaseInsensitive) != 0) { // TODO: the error message should be in the UI qInfo() << "Authenticated with the wrong user! Please login with the account:" << account->prettyName(); @@ -112,14 +114,14 @@ void UserInfo::slotUpdateLastInfo(const QJsonDocument &json) account->setDavUser(newUserId); } - QString displayName = objData.value("display-name").toString(); + QString displayName = objData.value("display-name"_L1).toString(); if (!displayName.isEmpty()) { account->setDavDisplayName(displayName); } - auto objQuota = objData.value("quota").toObject(); - qint64 used = objQuota.value("used").toDouble(); - qint64 total = objQuota.value("quota").toDouble(); + auto objQuota = objData.value("quota"_L1).toObject(); + qint64 used = objQuota.value("used"_L1).toDouble(); + qint64 total = objQuota.value("quota"_L1).toDouble(); if(_lastInfoReceived.isNull() || _lastQuotaUsedBytes != used || _lastQuotaTotalBytes != total) { _lastQuotaUsedBytes = used; diff --git a/src/libsync/discoveryphase.cpp b/src/libsync/discoveryphase.cpp index da10dd0e28d37..5b23323f58011 100644 --- a/src/libsync/discoveryphase.cpp +++ b/src/libsync/discoveryphase.cpp @@ -30,6 +30,7 @@ #include #include +using namespace Qt::StringLiterals; namespace OCC { @@ -489,25 +490,25 @@ void DiscoverySingleDirectoryJob::directoryListingIteratedSlot(const QString &fi emit firstDirectoryPermissions(perm); _isExternalStorage = perm.hasPermission(RemotePermissions::IsMounted); } - if (map.contains("data-fingerprint")) { - _dataFingerprint = map.value("data-fingerprint").toUtf8(); + if (map.contains("data-fingerprint"_L1)) { + _dataFingerprint = map.value("data-fingerprint"_L1).toUtf8(); if (_dataFingerprint.isEmpty()) { // Placeholder that means that the server supports the feature even if it did not set one. _dataFingerprint = "[empty]"; } } - if (map.contains(QStringLiteral("fileid"))) { - _localFileId = map.value(QStringLiteral("fileid")).toUtf8(); + if (map.contains("fileid"_L1)) { + _localFileId = map.value("fileid"_L1).toUtf8(); } - if (map.contains("id")) { - _fileId = map.value("id").toUtf8(); + if (map.contains("id"_L1)) { + _fileId = map.value("id"_L1).toUtf8(); } - if (map.contains("is-encrypted") && map.value("is-encrypted") == QStringLiteral("1")) { + if (map.contains("is-encrypted"_L1) && map.value("is-encrypted"_L1) == "1"_L1) { _encryptionStatusCurrent = SyncFileItem::EncryptionStatus::EncryptedMigratedV2_0; Q_ASSERT(!_fileId.isEmpty()); } - if (map.contains("size")) { - _size = map.value("size").toInt(); + if (map.contains("size"_L1)) { + _size = map.value("size"_L1).toInt(); } // all folders will contain both @@ -528,7 +529,7 @@ void DiscoverySingleDirectoryJob::directoryListingIteratedSlot(const QString &fi } } else { RemoteInfo result; - int slash = file.lastIndexOf('/'); + int slash = file.lastIndexOf(u'/'); result.name = file.mid(slash + 1); result.size = -1; LsColJob::propertyMapToRemoteInfo(map, @@ -541,9 +542,9 @@ void DiscoverySingleDirectoryJob::directoryListingIteratedSlot(const QString &fi } //This works in concerto with the RequestEtagJob and the Folder object to check if the remote folder changed. - if (map.contains("getetag")) { + if (map.contains("getetag"_L1)) { if (_firstEtag.isEmpty()) { - _firstEtag = parseEtag(map.value(QStringLiteral("getetag")).toUtf8()); // for directory itself + _firstEtag = parseEtag(map.value("getetag"_L1).toUtf8()); // for directory itself } } } @@ -608,7 +609,7 @@ void DiscoverySingleDirectoryJob::fetchE2eMetadata() void DiscoverySingleDirectoryJob::metadataReceived(const QJsonDocument &json, int statusCode) { qCDebug(lcDiscovery) << "Metadata received, applying it to the result list"; - Q_ASSERT(_subPath.startsWith('/')); + Q_ASSERT(_subPath.startsWith(u'/')); const auto job = qobject_cast(sender()); Q_ASSERT(job); @@ -622,15 +623,15 @@ void DiscoverySingleDirectoryJob::metadataReceived(const QJsonDocument &json, in // as per E2EE V2, top level folder is the only source of encryption keys and users that have access to it // hence, we need to find its path and pass to any subfolder's metadata, so it will fetch the top level metadata when needed // see https://github.com/nextcloud/end_to_end_encryption_rfc/blob/v2.1/RFC.md - auto topLevelFolderPath = QStringLiteral("/"); + QString topLevelFolderPath = u"/"_s; for (const QString &topLevelPath : std::as_const(_topLevelE2eeFolderPaths)) { if (_subPath == topLevelPath) { - topLevelFolderPath = QStringLiteral("/"); + topLevelFolderPath = u"/"_s; break; } - if (_subPath.startsWith(topLevelPath + QLatin1Char('/'))) { - const auto topLevelPathSplit = topLevelPath.split(QLatin1Char('/')); - topLevelFolderPath = topLevelPathSplit.join(QLatin1Char('/')); + if (_subPath.startsWith(topLevelPath + u'/')) { + const auto topLevelPathSplit = topLevelPath.split(u'/'); + topLevelFolderPath = topLevelPathSplit.join(u'/'); break; } } @@ -681,7 +682,7 @@ void DiscoverySingleDirectoryJob::metadataReceived(const QJsonDocument &json, in const auto encryptedFileInfo = findEncryptedFile(result.name); if (encryptedFileInfo) { result._isE2eEncrypted = true; - result.e2eMangledName = _subPath.mid(1) + QLatin1Char('/') + result.name; + result.e2eMangledName = _subPath.mid(1) + u'/' + result.name; result.name = encryptedFileInfo->originalFilename; } return result; diff --git a/src/libsync/networkjobs.cpp b/src/libsync/networkjobs.cpp index 572bd3d3c9660..b9bb71ad8abd9 100644 --- a/src/libsync/networkjobs.cpp +++ b/src/libsync/networkjobs.cpp @@ -38,6 +38,8 @@ #include #endif +using namespace Qt::StringLiterals; + namespace OCC { Q_LOGGING_CATEGORY(lcEtagJob, "nextcloud.sync.networkjob.etag", QtInfoMsg) @@ -379,9 +381,9 @@ void LsColJob::propertyMapToRemoteInfo(const QMap &map, Remote for (auto it = map.constBegin(); it != map.constEnd(); ++it) { QString property = it.key(); QString value = it.value(); - if (property == QLatin1String("resourcetype")) { - result.isDirectory = value.contains(QLatin1String("collection")); - } else if (property == QLatin1String("getlastmodified")) { + if (property == "resourcetype"_L1) { + result.isDirectory = value.contains("collection"_L1); + } else if (property == "getlastmodified"_L1) { value.replace("GMT", "+0000"); const auto date = QDateTime::fromString(value, Qt::RFC2822Date); Q_ASSERT(date.isValid()); @@ -389,7 +391,7 @@ void LsColJob::propertyMapToRemoteInfo(const QMap &map, Remote if (date.toSecsSinceEpoch() > 0) { result.modtime = date.toSecsSinceEpoch(); } - } else if (property == QLatin1String("getcontentlength")) { + } else if (property == "getcontentlength"_L1) { // See #4573, sometimes negative size values are returned bool ok = false; qlonglong ll = value.toLongLong(&ok); @@ -398,19 +400,19 @@ void LsColJob::propertyMapToRemoteInfo(const QMap &map, Remote } else { result.size = 0; } - } else if (property == "getetag") { + } else if (property == "getetag"_L1) { result.etag = Utility::normalizeEtag(value.toUtf8()); - } else if (property == "id") { + } else if (property == "id"_L1) { result.fileId = value.toUtf8(); - } else if (property == "downloadURL") { + } else if (property == "downloadURL"_L1) { result.directDownloadUrl = value; - } else if (property == "dDC") { + } else if (property == "dDC"_L1) { result.directDownloadCookies = value; - } else if (property == "permissions") { + } else if (property == "permissions"_L1) { result.remotePerm = RemotePermissions::fromServerString(value, algorithm, map); - } else if (property == "checksums") { + } else if (property == "checksums"_L1) { result.checksumHeader = findBestChecksum(value.toUtf8()); - } else if (property == "share-types" && !value.isEmpty()) { + } else if (property == "share-types"_L1 && !value.isEmpty()) { // Since QMap is sorted, "share-types" is always after "permissions". if (result.remotePerm.isNull()) { qWarning() << "Server returned a share type, but no permissions?"; @@ -422,18 +424,18 @@ void LsColJob::propertyMapToRemoteInfo(const QMap &map, Remote result.remotePerm.setPermission(RemotePermissions::IsShared); result.sharedByMe = true; } - } else if (property == "is-encrypted" && value == QStringLiteral("1")) { + } else if (property == "is-encrypted"_L1 && value == "1"_L1) { result._isE2eEncrypted = true; - } else if (property == "lock") { - result.locked = (value == QStringLiteral("1") ? SyncFileItem::LockStatus::LockedItem : SyncFileItem::LockStatus::UnlockedItem); + } else if (property == "lock"_L1) { + result.locked = (value == "1"_L1 ? SyncFileItem::LockStatus::LockedItem : SyncFileItem::LockStatus::UnlockedItem); } - if (property == "lock-owner-displayname") { + if (property == "lock-owner-displayname"_L1) { result.lockOwnerDisplayName = value; } - if (property == "lock-owner") { + if (property == "lock-owner"_L1) { result.lockOwnerId = value; } - if (property == "lock-owner-type") { + if (property == "lock-owner-type"_L1) { auto ok = false; const auto intConvertedValue = value.toULongLong(&ok); if (ok) { @@ -442,10 +444,10 @@ void LsColJob::propertyMapToRemoteInfo(const QMap &map, Remote result.lockOwnerType = SyncFileItem::LockOwnerType::UserLock; } } - if (property == "lock-owner-editor") { + if (property == "lock-owner-editor"_L1) { result.lockEditorApp = value; } - if (property == "lock-time") { + if (property == "lock-time"_L1) { auto ok = false; const auto intConvertedValue = value.toULongLong(&ok); if (ok) { @@ -454,7 +456,7 @@ void LsColJob::propertyMapToRemoteInfo(const QMap &map, Remote result.lockTime = 0; } } - if (property == "lock-timeout") { + if (property == "lock-timeout"_L1) { auto ok = false; const auto intConvertedValue = value.toULongLong(&ok); if (ok) { @@ -463,17 +465,17 @@ void LsColJob::propertyMapToRemoteInfo(const QMap &map, Remote result.lockTimeout = 0; } } - if (property == "lock-token") { + if (property == "lock-token"_L1) { result.lockToken = value; } - if (property == "metadata-files-live-photo") { + if (property == "metadata-files-live-photo"_L1) { result.livePhotoFile = value; result.isLivePhoto = true; } } - if (result.isDirectory && map.contains("size")) { - result.sizeOfFolder = map.value("size").toInt(); + if (result.isDirectory && map.contains("size"_L1)) { + result.sizeOfFolder = map.value("size"_L1).toInt(); } if (result.isDirectory && map.contains(FolderQuota::usedBytesC) && map.contains(FolderQuota::availableBytesC)) { diff --git a/src/libsync/ocsuserstatusconnector.cpp b/src/libsync/ocsuserstatusconnector.cpp index 977c89d8147fb..a70088034e3da 100644 --- a/src/libsync/ocsuserstatusconnector.cpp +++ b/src/libsync/ocsuserstatusconnector.cpp @@ -22,6 +22,8 @@ #include #include +using namespace Qt::StringLiterals; + namespace { Q_LOGGING_CATEGORY(lcOcsUserStatusConnector, "nextcloud.gui.ocsuserstatusconnector", QtInfoMsg) @@ -62,26 +64,26 @@ QString onlineStatusToString(OCC::UserStatus::OnlineStatus status) return QStringLiteral("online"); } -OCC::Optional jsonExtractClearAt(QJsonObject jsonObject) +OCC::Optional jsonExtractClearAt(const QJsonObject &jsonObject) { OCC::Optional clearAt {}; - if (jsonObject.contains("clearAt") && !jsonObject.value("clearAt").isNull()) { + if (jsonObject.contains("clearAt"_L1) && !jsonObject.value("clearAt"_L1).isNull()) { OCC::ClearAt clearAtValue; clearAtValue._type = OCC::ClearAtType::Timestamp; - clearAtValue._timestamp = jsonObject.value("clearAt").toInt(); + clearAtValue._timestamp = jsonObject.value("clearAt"_L1).toInt(); clearAt = clearAtValue; } return clearAt; } -OCC::UserStatus jsonExtractUserStatus(QJsonObject json) +OCC::UserStatus jsonExtractUserStatus(const QJsonObject &json) { const auto clearAt = jsonExtractClearAt(json); - const OCC::UserStatus userStatus(json.value("messageId").toString(), - json.value("message").toString().trimmed(), - json.value("icon").toString().trimmed(), stringToUserOnlineStatus(json.value("status").toString()), - json.value("messageIsPredefined").toBool(false), clearAt); + const OCC::UserStatus userStatus(json.value("messageId"_L1).toString(), + json.value("message"_L1).toString().trimmed(), + json.value("icon"_L1).toString().trimmed(), stringToUserOnlineStatus(json.value("status"_L1).toString()), + json.value("messageIsPredefined"_L1).toBool(false), clearAt); return userStatus; } @@ -95,7 +97,7 @@ OCC::UserStatus jsonToUserStatus(const QJsonDocument &json) { "messageIsPredefined", "false" }, { "statusIsUserDefined", "false" } }; - const auto retrievedData = json.object().value("ocs").toObject().value("data").toObject(defaultValues); + const auto retrievedData = json.object().value("ocs"_L1).toObject().value("data"_L1).toObject(defaultValues); return jsonExtractUserStatus(retrievedData); } @@ -103,9 +105,9 @@ quint64 clearAtEndOfToTimestamp(const OCC::ClearAt &clearAt) { Q_ASSERT(clearAt._type == OCC::ClearAtType::EndOf); - if (clearAt._endof == "day") { + if (clearAt._endof == "day"_L1) { return QDate::currentDate().addDays(1).startOfDay().toSecsSinceEpoch(); - } else if (clearAt._endof == "week") { + } else if (clearAt._endof == "week"_L1) { const auto days = Qt::Sunday - QDate::currentDate().dayOfWeek(); return QDate::currentDate().addDays(days + 1).startOfDay().toSecsSinceEpoch(); } @@ -149,16 +151,16 @@ OCC::Optional jsonToClearAt(QJsonObject jsonObject) { OCC::Optional clearAt; - if (jsonObject.value("clearAt").isObject() && !jsonObject.value("clearAt").isNull()) { + if (jsonObject.value("clearAt"_L1).isObject() && !jsonObject.value("clearAt"_L1).isNull()) { OCC::ClearAt clearAtValue; - const auto clearAtObject = jsonObject.value("clearAt").toObject(); - const auto typeValue = clearAtObject.value("type").toString("period"); - if (typeValue == "period") { - const auto timeValue = clearAtObject.value("time").toInt(0); + const auto clearAtObject = jsonObject.value("clearAt"_L1).toObject(); + const auto typeValue = clearAtObject.value("type"_L1).toString(u"period"_s); + if (typeValue == "period"_L1) { + const auto timeValue = clearAtObject.value("time"_L1).toInt(0); clearAtValue._type = OCC::ClearAtType::Period; clearAtValue._period = timeValue; - } else if (typeValue == "end-of") { - const auto timeValue = clearAtObject.value("time").toString("day"); + } else if (typeValue == "end-of"_L1) { + const auto timeValue = clearAtObject.value("time"_L1).toString(u"day"_s); clearAtValue._type = OCC::ClearAtType::EndOf; clearAtValue._endof = timeValue; } else { @@ -175,9 +177,9 @@ OCC::UserStatus jsonToUserStatus(QJsonObject jsonObject) const auto clearAt = jsonToClearAt(jsonObject); OCC::UserStatus userStatus( - jsonObject.value("id").toString("no-id"), - jsonObject.value("message").toString("No message"), - jsonObject.value("icon").toString("no-icon"), + jsonObject.value("id"_L1).toString(u"no-id"_s), + jsonObject.value("message"_L1).toString(u"No message"_s), + jsonObject.value("icon"_L1).toString(u"no-icon"_s), OCC::UserStatus::OnlineStatus::Online, true, clearAt); @@ -293,7 +295,7 @@ void OcsUserStatusConnector::onPredefinedStatusesFetched(const QJsonDocument &js emit error(Error::CouldNotFetchPredefinedUserStatuses); return; } - const auto jsonData = json.object().value("ocs").toObject().value("data"); + const auto jsonData = json.object().value("ocs"_L1).toObject().value("data"_L1); Q_ASSERT(jsonData.isArray()); if (!jsonData.isArray()) { return; diff --git a/src/libsync/syncfileitem.cpp b/src/libsync/syncfileitem.cpp index c08b3e2326ef2..f1b778365a450 100644 --- a/src/libsync/syncfileitem.cpp +++ b/src/libsync/syncfileitem.cpp @@ -14,6 +14,8 @@ #include #include "csync/vio/csync_vio_local.h" +using namespace Qt::StringLiterals; + namespace OCC { Q_LOGGING_CATEGORY(lcFileItem, "nextcloud.sync.fileitem", QtInfoMsg) @@ -193,31 +195,31 @@ SyncFileItemPtr SyncFileItem::fromProperties(const QString &filePath, const QMap item->_isShared = item->_remotePerm.hasPermission(RemotePermissions::IsShared); item->_lastShareStateFetchedTimestamp = QDateTime::currentMSecsSinceEpoch(); - item->_e2eEncryptionStatus = (properties.value(QStringLiteral("is-encrypted")) == QStringLiteral("1") ? SyncFileItem::EncryptionStatus::EncryptedMigratedV2_0 : SyncFileItem::EncryptionStatus::NotEncrypted); + item->_e2eEncryptionStatus = (properties.value("is-encrypted"_L1) == "1"_L1 ? SyncFileItem::EncryptionStatus::EncryptedMigratedV2_0 : SyncFileItem::EncryptionStatus::NotEncrypted); if (item->isEncrypted()) { item->_e2eEncryptionServerCapability = item->_e2eEncryptionStatus; } item->_locked = - properties.value(QStringLiteral("lock")) == QStringLiteral("1") ? SyncFileItem::LockStatus::LockedItem : SyncFileItem::LockStatus::UnlockedItem; - item->_lockOwnerDisplayName = properties.value(QStringLiteral("lock-owner-displayname")); - item->_lockOwnerId = properties.value(QStringLiteral("lock-owner")); - item->_lockEditorApp = properties.value(QStringLiteral("lock-owner-editor")); + properties.value("lock"_L1) == "1"_L1 ? SyncFileItem::LockStatus::LockedItem : SyncFileItem::LockStatus::UnlockedItem; + item->_lockOwnerDisplayName = properties.value("lock-owner-displayname"_L1); + item->_lockOwnerId = properties.value("lock-owner"_L1); + item->_lockEditorApp = properties.value("lock-owner-editor"_L1); { auto ok = false; - const auto intConvertedValue = properties.value(QStringLiteral("lock-owner-type")).toULongLong(&ok); + const auto intConvertedValue = properties.value("lock-owner-type"_L1).toULongLong(&ok); item->_lockOwnerType = ok ? static_cast(intConvertedValue) : SyncFileItem::LockOwnerType::UserLock; } { auto ok = false; - const auto intConvertedValue = properties.value(QStringLiteral("lock-time")).toULongLong(&ok); + const auto intConvertedValue = properties.value("lock-time"_L1).toULongLong(&ok); item->_lockTime = ok ? intConvertedValue : 0; } { auto ok = false; - const auto intConvertedValue = properties.value(QStringLiteral("lock-timeout")).toULongLong(&ok); + const auto intConvertedValue = properties.value("lock-timeout"_L1).toULongLong(&ok); item->_lockTimeout = ok ? intConvertedValue : 0; }