chore(clang-tidy): modernize the code

Signed-off-by: Trial97 <alexandru.tripon97@gmail.com>
This commit is contained in:
Trial97 2026-05-10 20:51:56 +03:00
parent 2e45d135c5
commit effa8bedb1
No known key found for this signature in database
GPG key ID: 55EF5DA53DB36318
42 changed files with 854 additions and 786 deletions

View file

@ -3,10 +3,8 @@
// SPDX-License-Identifier: GPL-3.0-only
#include "FlameAPI.h"
#include <memory>
#include <optional>
#include "BuildConfig.h"
#include "FlameModIndex.h"
#include "Application.h"
#include "Json.h"
@ -19,17 +17,17 @@ std::pair<Task::Ptr, QByteArray*> FlameAPI::matchFingerprints(const QList<uint>&
{
auto netJob = makeShared<NetJob>(QString("Flame::MatchFingerprints"), APPLICATION->network());
QJsonObject body_obj;
QJsonArray fingerprints_arr;
for (auto& fp : fingerprints) {
fingerprints_arr.append(QString("%1").arg(fp));
QJsonObject bodyObj;
QJsonArray fingerprintsArr;
for (const auto& fp : fingerprints) {
fingerprintsArr.append(QString("%1").arg(fp));
}
body_obj["fingerprints"] = fingerprints_arr;
bodyObj["fingerprints"] = fingerprintsArr;
QJsonDocument body(body_obj);
auto body_raw = body.toJson();
auto [action, response] = Net::ApiUpload::makeByteArray(QString(BuildConfig.FLAME_BASE_URL + "/fingerprints"), body_raw);
QJsonDocument body(bodyObj);
auto bodyRaw = body.toJson();
auto [action, response] = Net::ApiUpload::makeByteArray(QString(BuildConfig.FLAME_BASE_URL + "/fingerprints"), bodyRaw);
netJob->addNetAction(action);
return { netJob, response };
@ -47,14 +45,14 @@ QString FlameAPI::getModFileChangelog(int modId, int fileId)
netJob->addNetAction(action);
QObject::connect(netJob.get(), &NetJob::succeeded, [&netJob, response, &changelog] {
QJsonParseError parse_error{};
QJsonDocument doc = QJsonDocument::fromJson(*response, &parse_error);
if (parse_error.error != QJsonParseError::NoError) {
qWarning() << "Error while parsing JSON response from Flame::FileChangelog at" << parse_error.offset
<< "reason:" << parse_error.errorString();
QJsonParseError parseError{};
QJsonDocument doc = QJsonDocument::fromJson(*response, &parseError);
if (parseError.error != QJsonParseError::NoError) {
qWarning() << "Error while parsing JSON response from Flame::FileChangelog at" << parseError.offset
<< "reason:" << parseError.errorString();
qWarning() << *response;
netJob->failed(parse_error.errorString());
netJob->failed(parseError.errorString());
return;
}
@ -80,14 +78,14 @@ QString FlameAPI::getModDescription(int modId)
netJob->addNetAction(action);
QObject::connect(netJob.get(), &NetJob::succeeded, [&netJob, response, &description] {
QJsonParseError parse_error{};
QJsonDocument doc = QJsonDocument::fromJson(*response, &parse_error);
if (parse_error.error != QJsonParseError::NoError) {
qWarning() << "Error while parsing JSON response from Flame::ModDescription at" << parse_error.offset
<< "reason:" << parse_error.errorString();
QJsonParseError parseError{};
QJsonDocument doc = QJsonDocument::fromJson(*response, &parseError);
if (parseError.error != QJsonParseError::NoError) {
qWarning() << "Error while parsing JSON response from Flame::ModDescription at" << parseError.offset
<< "reason:" << parseError.errorString();
qWarning() << *response;
netJob->failed(parse_error.errorString());
netJob->failed(parseError.errorString());
return;
}
@ -106,48 +104,48 @@ std::pair<Task::Ptr, QByteArray*> FlameAPI::getProjects(QStringList addonIds) co
{
auto netJob = makeShared<NetJob>(QString("Flame::GetProjects"), APPLICATION->network());
QJsonObject body_obj;
QJsonArray addons_arr;
QJsonObject bodyObj;
QJsonArray addonsArr;
for (auto& addonId : addonIds) {
addons_arr.append(addonId);
addonsArr.append(addonId);
}
body_obj["modIds"] = addons_arr;
bodyObj["modIds"] = addonsArr;
QJsonDocument body(body_obj);
auto body_raw = body.toJson();
auto [action, response] = Net::ApiUpload::makeByteArray(QString(BuildConfig.FLAME_BASE_URL + "/mods"), body_raw);
QJsonDocument body(bodyObj);
auto bodyRaw = body.toJson();
auto [action, response] = Net::ApiUpload::makeByteArray(QString(BuildConfig.FLAME_BASE_URL + "/mods"), bodyRaw);
netJob->addNetAction(action);
QObject::connect(netJob.get(), &NetJob::failed, [body_raw] { qDebug() << body_raw; });
QObject::connect(netJob.get(), &NetJob::failed, [bodyRaw] { qDebug() << bodyRaw; });
return { netJob, response };
}
std::pair<Task::Ptr, QByteArray*> FlameAPI::getFiles(const QStringList& fileIds) const
std::pair<Task::Ptr, QByteArray*> FlameAPI::getFiles(const QStringList& fileIds)
{
auto netJob = makeShared<NetJob>(QString("Flame::GetFiles"), APPLICATION->network());
QJsonObject body_obj;
QJsonArray files_arr;
for (auto& fileId : fileIds) {
files_arr.append(fileId);
QJsonObject bodyObj;
QJsonArray filesArr;
for (const auto& fileId : fileIds) {
filesArr.append(fileId);
}
body_obj["fileIds"] = files_arr;
bodyObj["fileIds"] = filesArr;
QJsonDocument body(body_obj);
auto body_raw = body.toJson();
QJsonDocument body(bodyObj);
auto bodyRaw = body.toJson();
auto [action, response] = Net::ApiUpload::makeByteArray(QString(BuildConfig.FLAME_BASE_URL + "/mods/files"), body_raw);
auto [action, response] = Net::ApiUpload::makeByteArray(QString(BuildConfig.FLAME_BASE_URL + "/mods/files"), bodyRaw);
netJob->addNetAction(action);
QObject::connect(netJob.get(), &NetJob::failed, [body_raw] { qDebug() << body_raw; });
QObject::connect(netJob.get(), &NetJob::failed, [bodyRaw] { qDebug() << bodyRaw; });
return { netJob, response };
}
std::pair<Task::Ptr, QByteArray*> FlameAPI::getFile(const QString& addonId, const QString& fileId) const
std::pair<Task::Ptr, QByteArray*> FlameAPI::getFile(const QString& addonId, const QString& fileId)
{
auto netJob = makeShared<NetJob>(QString("Flame::GetFile"), APPLICATION->network());
auto [action, response] =
@ -162,14 +160,14 @@ std::pair<Task::Ptr, QByteArray*> FlameAPI::getFile(const QString& addonId, cons
QList<ResourceAPI::SortingMethod> FlameAPI::getSortingMethods() const
{
// https://docs.curseforge.com/?python#tocS_ModsSearchSortField
return { { .index = 1, .name = "Featured", .readable_name = QObject::tr("Sort by Featured") },
{ .index = 2, .name = "Popularity", .readable_name = QObject::tr("Sort by Popularity") },
{ .index = 3, .name = "LastUpdated", .readable_name = QObject::tr("Sort by Last Updated") },
{ .index = 4, .name = "Name", .readable_name = QObject::tr("Sort by Name") },
{ .index = 5, .name = "Author", .readable_name = QObject::tr("Sort by Author") },
{ .index = 6, .name = "TotalDownloads", .readable_name = QObject::tr("Sort by Downloads") },
{ .index = 7, .name = "Category", .readable_name = QObject::tr("Sort by Category") },
{ .index = 8, .name = "GameVersion", .readable_name = QObject::tr("Sort by Game Version") } };
return { { .index = 1, .name = "Featured", .readableName = QObject::tr("Sort by Featured") },
{ .index = 2, .name = "Popularity", .readableName = QObject::tr("Sort by Popularity") },
{ .index = 3, .name = "LastUpdated", .readableName = QObject::tr("Sort by Last Updated") },
{ .index = 4, .name = "Name", .readableName = QObject::tr("Sort by Name") },
{ .index = 5, .name = "Author", .readableName = QObject::tr("Sort by Author") },
{ .index = 6, .name = "TotalDownloads", .readableName = QObject::tr("Sort by Downloads") },
{ .index = 7, .name = "Category", .readableName = QObject::tr("Sort by Category") },
{ .index = 8, .name = "GameVersion", .readableName = QObject::tr("Sort by Game Version") } };
}
namespace {
@ -205,7 +203,7 @@ std::pair<Task::Ptr, QByteArray*> FlameAPI::getCategories(ModPlatform::ResourceT
auto [action, response] = Net::ApiDownload::makeByteArray(
QUrl(QString(BuildConfig.FLAME_BASE_URL + "/categories?gameId=432&classId=%1").arg(getClassId(type))));
netJob->addNetAction(action);
QObject::connect(netJob.get(), &Task::failed, [](QString msg) { qDebug() << "Flame failed to get categories:" << msg; });
QObject::connect(netJob.get(), &Task::failed, [](const QString& msg) { qDebug() << "Flame failed to get categories:" << msg; });
return { netJob, response };
}
@ -217,11 +215,10 @@ std::pair<Task::Ptr, QByteArray*> FlameAPI::getModCategories()
QList<ModPlatform::Category> FlameAPI::loadModCategories(const QByteArray& response)
{
QList<ModPlatform::Category> categories;
QJsonParseError parse_error{};
QJsonDocument doc = QJsonDocument::fromJson(response, &parse_error);
if (parse_error.error != QJsonParseError::NoError) {
qWarning() << "Error while parsing JSON response from categories at" << parse_error.offset
<< "reason:" << parse_error.errorString();
QJsonParseError parseError{};
QJsonDocument doc = QJsonDocument::fromJson(response, &parseError);
if (parseError.error != QJsonParseError::NoError) {
qWarning() << "Error while parsing JSON response from categories at" << parseError.offset << "reason:" << parseError.errorString();
qWarning() << *response;
return categories;
}
@ -245,17 +242,17 @@ QList<ModPlatform::Category> FlameAPI::loadModCategories(const QByteArray& respo
return categories;
};
std::optional<ModPlatform::IndexedVersion> FlameAPI::getLatestVersion(QList<ModPlatform::IndexedVersion> versions,
QList<ModPlatform::ModLoaderType> instanceLoaders,
ModPlatform::ModLoaderTypes modLoaders,
std::optional<ModPlatform::IndexedVersion> FlameAPI::getLatestVersion(const QList<ModPlatform::IndexedVersion>& versions,
const QList<ModPlatform::ModLoaderType>& instanceLoaders,
ModPlatform::ModLoaderTypes fallback,
bool checkLoaders)
{
static const auto noLoader = ModPlatform::ModLoaderType(0);
static const auto s_noLoader = ModPlatform::ModLoaderType(0);
if (!checkLoaders) {
std::optional<ModPlatform::IndexedVersion> ver;
for (auto file_tmp : versions) {
if (!ver.has_value() || file_tmp.date > ver->date) {
ver = file_tmp;
for (const auto& fileTmp : versions) {
if (!ver.has_value() || fileTmp.date > ver->date) {
ver = fileTmp;
}
}
return ver;
@ -271,26 +268,26 @@ std::optional<ModPlatform::IndexedVersion> FlameAPI::getLatestVersion(QList<ModP
bestMatch[loader] = version;
}
};
for (auto file_tmp : versions) {
auto loaders = ModPlatform::modLoaderTypesToList(file_tmp.loaders);
for (const auto& fileTmp : versions) {
auto loaders = ModPlatform::modLoaderTypesToList(fileTmp.loaders);
if (loaders.isEmpty()) {
checkVersion(file_tmp, noLoader);
checkVersion(fileTmp, s_noLoader);
} else {
for (auto loader : loaders) {
checkVersion(file_tmp, loader);
checkVersion(fileTmp, loader);
}
}
}
// edge case: mod has installed for forge but the instance is fabric => fabric version will be prioritizated on update
auto currentLoaders = instanceLoaders + ModPlatform::modLoaderTypesToList(modLoaders);
currentLoaders.append(noLoader); // add a fallback in case the versions do not define a loader
auto currentLoaders = instanceLoaders + ModPlatform::modLoaderTypesToList(fallback);
currentLoaders.append(s_noLoader); // add a fallback in case the versions do not define a loader
for (auto loader : currentLoaders) {
if (bestMatch.contains(loader)) {
auto bestForLoader = bestMatch.value(loader);
// awkward case where the mod has only two loaders and one of them is not specified
if (loader != noLoader && bestMatch.contains(noLoader) && bestMatch.size() == 2) {
auto bestForNoLoader = bestMatch.value(noLoader);
if (loader != s_noLoader && bestMatch.contains(s_noLoader) && bestMatch.size() == 2) {
auto bestForNoLoader = bestMatch.value(s_noLoader);
if (bestForNoLoader.date > bestForLoader.date) {
return bestForNoLoader;
}