feat: add modrinth pack downloading

Things that don't work / work poorly (there's more for sure but those
are the evident ones):
    - Icons are broken in the import dialog
    - No way to search for private packs
    - Icons are not downloaded when downloading a mod
    - No support for multiple download URLs
    - Probably a lot more...
This commit is contained in:
flow
2022-05-14 20:17:05 -03:00
parent 31988f0529
commit 4fda35b466
7 changed files with 729 additions and 36 deletions

View File

@ -15,18 +15,68 @@
#pragma once
#include <QMetaType>
#include <QByteArray>
#include <QCryptographicHash>
#include <QString>
#include <QUrl>
class MinecraftInstance;
namespace Modrinth {
struct File
{
QString path;
QCryptographicHash::Algorithm hashAlgorithm;
QByteArray hash;
// TODO: should this support multiple download URLs, like the JSON does?
QUrl download;
};
struct ModpackExtra {
QString body;
QString sourceUrl;
QString wikiUrl;
};
struct ModpackVersion {
QString name;
QString version;
QString id;
QString project_id;
QString date;
QString download_url;
};
struct Modpack {
QString id;
QString name;
QString description;
QStringList authors;
QString iconName;
QUrl iconUrl;
bool versionsLoaded = false;
bool extraInfoLoaded = false;
ModpackExtra extra;
QVector<ModpackVersion> versions;
};
void loadIndexedPack(Modpack&, QJsonObject&);
void loadIndexedInfo(Modpack&, QJsonObject&);
void loadIndexedVersions(Modpack&, QJsonDocument&);
auto loadIndexedVersion(QJsonObject&) -> ModpackVersion;
}
Q_DECLARE_METATYPE(Modrinth::Modpack);
Q_DECLARE_METATYPE(Modrinth::ModpackVersion);