feat: add api call to flame
Call added: - Get Fingerprints Matches - Get Mod File Changelog Signed-off-by: flow <flowlnlnln@gmail.com>
This commit is contained in:
parent
0e52112016
commit
4bcf8e6975
@ -483,6 +483,7 @@ set(API_SOURCES
|
|||||||
modplatform/ModAPI.h
|
modplatform/ModAPI.h
|
||||||
|
|
||||||
modplatform/flame/FlameAPI.h
|
modplatform/flame/FlameAPI.h
|
||||||
|
modplatform/flame/FlameAPI.cpp
|
||||||
modplatform/modrinth/ModrinthAPI.h
|
modplatform/modrinth/ModrinthAPI.h
|
||||||
modplatform/modrinth/ModrinthAPI.cpp
|
modplatform/modrinth/ModrinthAPI.cpp
|
||||||
modplatform/helpers/NetworkModAPI.h
|
modplatform/helpers/NetworkModAPI.h
|
||||||
|
125
launcher/modplatform/flame/FlameAPI.cpp
Normal file
125
launcher/modplatform/flame/FlameAPI.cpp
Normal file
@ -0,0 +1,125 @@
|
|||||||
|
#include "FlameAPI.h"
|
||||||
|
#include "FlameModIndex.h"
|
||||||
|
|
||||||
|
#include "Application.h"
|
||||||
|
#include "BuildConfig.h"
|
||||||
|
#include "Json.h"
|
||||||
|
|
||||||
|
#include "net/Upload.h"
|
||||||
|
|
||||||
|
auto FlameAPI::matchFingerprints(const std::list<uint>& fingerprints, QByteArray* response) -> NetJob::Ptr
|
||||||
|
{
|
||||||
|
auto* netJob = new NetJob(QString("Flame::MatchFingerprints"), APPLICATION->network());
|
||||||
|
|
||||||
|
QJsonObject body_obj;
|
||||||
|
QJsonArray fingerprints_arr;
|
||||||
|
for (auto& fp : fingerprints) {
|
||||||
|
fingerprints_arr.append(QString("%1").arg(fp));
|
||||||
|
}
|
||||||
|
|
||||||
|
body_obj["fingerprints"] = fingerprints_arr;
|
||||||
|
|
||||||
|
QJsonDocument body(body_obj);
|
||||||
|
auto body_raw = body.toJson();
|
||||||
|
|
||||||
|
netJob->addNetAction(Net::Upload::makeByteArray(QString("https://api.curseforge.com/v1/fingerprints"), response, body_raw));
|
||||||
|
|
||||||
|
QObject::connect(netJob, &NetJob::finished, [response] { delete response; });
|
||||||
|
|
||||||
|
return netJob;
|
||||||
|
}
|
||||||
|
|
||||||
|
auto FlameAPI::getModFileChangelog(int modId, int fileId) -> QString
|
||||||
|
{
|
||||||
|
QEventLoop lock;
|
||||||
|
QString changelog;
|
||||||
|
|
||||||
|
auto* netJob = new NetJob(QString("Flame::FileChangelog"), APPLICATION->network());
|
||||||
|
auto* response = new QByteArray();
|
||||||
|
netJob->addNetAction(Net::Download::makeByteArray(
|
||||||
|
QString("https://api.curseforge.com/v1/mods/%1/files/%2/changelog")
|
||||||
|
.arg(QString::fromStdString(std::to_string(modId)), QString::fromStdString(std::to_string(fileId))),
|
||||||
|
response));
|
||||||
|
|
||||||
|
QObject::connect(netJob, &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();
|
||||||
|
qWarning() << *response;
|
||||||
|
|
||||||
|
netJob->failed(parse_error.errorString());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
changelog = Json::ensureString(doc.object(), "data");
|
||||||
|
});
|
||||||
|
|
||||||
|
QObject::connect(netJob, &NetJob::finished, [response, &lock] {
|
||||||
|
delete response;
|
||||||
|
lock.quit();
|
||||||
|
});
|
||||||
|
|
||||||
|
netJob->start();
|
||||||
|
lock.exec();
|
||||||
|
|
||||||
|
return changelog;
|
||||||
|
}
|
||||||
|
|
||||||
|
auto FlameAPI::getLatestVersion(VersionSearchArgs&& args) -> ModPlatform::IndexedVersion
|
||||||
|
{
|
||||||
|
QEventLoop loop;
|
||||||
|
|
||||||
|
auto netJob = new NetJob(QString("Flame::GetLatestVersion(%1)").arg(args.addonId), APPLICATION->network());
|
||||||
|
auto response = new QByteArray();
|
||||||
|
ModPlatform::IndexedVersion ver;
|
||||||
|
|
||||||
|
netJob->addNetAction(Net::Download::makeByteArray(getVersionsURL(args), response));
|
||||||
|
|
||||||
|
QObject::connect(netJob, &NetJob::succeeded, [response, args, &ver] {
|
||||||
|
QJsonParseError parse_error{};
|
||||||
|
QJsonDocument doc = QJsonDocument::fromJson(*response, &parse_error);
|
||||||
|
if (parse_error.error != QJsonParseError::NoError) {
|
||||||
|
qWarning() << "Error while parsing JSON response from latest mod version at " << parse_error.offset
|
||||||
|
<< " reason: " << parse_error.errorString();
|
||||||
|
qWarning() << *response;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
auto obj = Json::requireObject(doc);
|
||||||
|
auto arr = Json::requireArray(obj, "data");
|
||||||
|
|
||||||
|
QJsonObject latest_file_obj;
|
||||||
|
ModPlatform::IndexedVersion ver_tmp;
|
||||||
|
|
||||||
|
for (auto file : arr) {
|
||||||
|
auto file_obj = Json::requireObject(file);
|
||||||
|
auto file_tmp = FlameMod::loadIndexedPackVersion(file_obj);
|
||||||
|
if(file_tmp.date > ver_tmp.date) {
|
||||||
|
ver_tmp = file_tmp;
|
||||||
|
latest_file_obj = file_obj;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ver = FlameMod::loadIndexedPackVersion(latest_file_obj);
|
||||||
|
} catch (Json::JsonException& e) {
|
||||||
|
qCritical() << "Failed to parse response from a version request.";
|
||||||
|
qCritical() << e.what();
|
||||||
|
qDebug() << doc;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
QObject::connect(netJob, &NetJob::finished, [response, netJob, &loop] {
|
||||||
|
netJob->deleteLater();
|
||||||
|
delete response;
|
||||||
|
loop.quit();
|
||||||
|
});
|
||||||
|
|
||||||
|
netJob->start();
|
||||||
|
|
||||||
|
loop.exec();
|
||||||
|
|
||||||
|
return ver;
|
||||||
|
}
|
@ -3,7 +3,15 @@
|
|||||||
#include "modplatform/ModIndex.h"
|
#include "modplatform/ModIndex.h"
|
||||||
#include "modplatform/helpers/NetworkModAPI.h"
|
#include "modplatform/helpers/NetworkModAPI.h"
|
||||||
|
|
||||||
|
#include "net/NetJob.h"
|
||||||
|
|
||||||
class FlameAPI : public NetworkModAPI {
|
class FlameAPI : public NetworkModAPI {
|
||||||
|
public:
|
||||||
|
auto matchFingerprints(const std::list<uint>& fingerprints, QByteArray* response) -> NetJob::Ptr;
|
||||||
|
auto getModFileChangelog(int modId, int fileId) -> QString;
|
||||||
|
|
||||||
|
auto getLatestVersion(VersionSearchArgs&& args) -> ModPlatform::IndexedVersion;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
inline auto getSortFieldInt(QString sortString) const -> int
|
inline auto getSortFieldInt(QString sortString) const -> int
|
||||||
{
|
{
|
||||||
|
@ -110,7 +110,7 @@ auto FlameMod::loadIndexedPackVersion(QJsonObject& obj) -> ModPlatform::IndexedV
|
|||||||
file.fileId = Json::requireInteger(obj, "id");
|
file.fileId = Json::requireInteger(obj, "id");
|
||||||
file.date = Json::requireString(obj, "fileDate");
|
file.date = Json::requireString(obj, "fileDate");
|
||||||
file.version = Json::requireString(obj, "displayName");
|
file.version = Json::requireString(obj, "displayName");
|
||||||
file.downloadUrl = Json::requireString(obj, "downloadUrl");
|
file.downloadUrl = Json::ensureString(obj, "downloadUrl");
|
||||||
file.fileName = Json::requireString(obj, "fileName");
|
file.fileName = Json::requireString(obj, "fileName");
|
||||||
|
|
||||||
auto hash_list = Json::ensureArray(obj, "hashes");
|
auto hash_list = Json::ensureArray(obj, "hashes");
|
||||||
|
Loading…
Reference in New Issue
Block a user