feat:try to get more data from modpack providers
Signed-off-by: Trial97 <alexandru.tripon97@gmail.com>
This commit is contained in:
@ -216,3 +216,50 @@ QList<ResourceAPI::SortingMethod> FlameAPI::getSortingMethods() const
|
||||
{
|
||||
return s_sorts;
|
||||
}
|
||||
|
||||
Task::Ptr FlameAPI::getVersionFromHash(QString hash, ModPlatform::IndexedVersion& output)
|
||||
{
|
||||
auto response = std::make_shared<QByteArray>();
|
||||
auto ver_task = matchFingerprints({ hash.toUInt() }, response);
|
||||
QObject::connect(ver_task.get(), &Task::succeeded, [response, &output, hash] {
|
||||
QJsonParseError parse_error{};
|
||||
QJsonDocument doc = QJsonDocument::fromJson(*response, &parse_error);
|
||||
if (parse_error.error != QJsonParseError::NoError) {
|
||||
qWarning() << "Error while parsing JSON response from Flame::CurrentVersions at " << parse_error.offset
|
||||
<< " reason: " << parse_error.errorString();
|
||||
qWarning() << *response;
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
auto doc_obj = Json::requireObject(doc);
|
||||
auto data_obj = Json::requireObject(doc_obj, "data");
|
||||
auto data_arr = Json::requireArray(data_obj, "exactMatches");
|
||||
|
||||
if (data_arr.isEmpty()) {
|
||||
qWarning() << "No matches found for fingerprint search!";
|
||||
return;
|
||||
}
|
||||
|
||||
for (auto match : data_arr) {
|
||||
auto match_obj = Json::ensureObject(match, {});
|
||||
auto file_obj = Json::ensureObject(match_obj, "file", {});
|
||||
|
||||
if (match_obj.isEmpty() || file_obj.isEmpty()) {
|
||||
qWarning() << "Fingerprint match is empty!";
|
||||
continue;
|
||||
}
|
||||
|
||||
auto fingerprint = QString::number(Json::ensureVariant(file_obj, "fileFingerprint").toUInt());
|
||||
if (fingerprint != hash)
|
||||
continue;
|
||||
output = FlameMod::loadIndexedPackVersion(file_obj);
|
||||
}
|
||||
|
||||
} catch (Json::JsonException& e) {
|
||||
qDebug() << e.cause();
|
||||
qDebug() << doc;
|
||||
}
|
||||
});
|
||||
return ver_task;
|
||||
}
|
||||
|
@ -123,4 +123,6 @@ class FlameAPI : public NetworkResourceAPI {
|
||||
.arg(args.mcVersion.toString())
|
||||
.arg(mappedModLoader);
|
||||
};
|
||||
|
||||
virtual Task::Ptr getVersionFromHash(QString hash, ModPlatform::IndexedVersion&) override;
|
||||
};
|
||||
|
Reference in New Issue
Block a user