aboutsummaryrefslogtreecommitdiff
path: root/launcher/modplatform
diff options
context:
space:
mode:
authorflow <thiagodonato300@gmail.com>2022-05-07 19:39:00 -0300
committerflow <flowlnlnln@gmail.com>2022-05-23 14:58:08 -0300
commit0985adfd74758891c2e61c2de7f930119cab1386 (patch)
treeace9b0cb3744a0ffbbeebfa3aab2ef5d15eb7f9b /launcher/modplatform
parent59d628208b403bfb2442291cbca139cbdfcd325f (diff)
downloadPrismLauncher-0985adfd74758891c2e61c2de7f930119cab1386.tar.gz
PrismLauncher-0985adfd74758891c2e61c2de7f930119cab1386.tar.bz2
PrismLauncher-0985adfd74758891c2e61c2de7f930119cab1386.zip
change: support newest changes with packwiz regarding CF
Diffstat (limited to 'launcher/modplatform')
-rw-r--r--launcher/modplatform/ModIndex.cpp12
-rw-r--r--launcher/modplatform/flame/FlameModIndex.cpp25
-rw-r--r--launcher/modplatform/packwiz/Packwiz.cpp15
-rw-r--r--launcher/modplatform/packwiz/Packwiz.h6
-rw-r--r--launcher/modplatform/packwiz/Packwiz_test.cpp6
-rw-r--r--launcher/modplatform/packwiz/testdata/borderless-mining.pw.toml (renamed from launcher/modplatform/packwiz/testdata/borderless-mining.toml)0
-rw-r--r--launcher/modplatform/packwiz/testdata/screenshot-to-clipboard-fabric.pw.toml (renamed from launcher/modplatform/packwiz/testdata/screenshot-to-clipboard-fabric.toml)0
7 files changed, 46 insertions, 18 deletions
diff --git a/launcher/modplatform/ModIndex.cpp b/launcher/modplatform/ModIndex.cpp
index f6e134e0..6027c4f3 100644
--- a/launcher/modplatform/ModIndex.cpp
+++ b/launcher/modplatform/ModIndex.cpp
@@ -30,7 +30,8 @@ auto ProviderCapabilities::hashType(Provider p) -> QStringList
case Provider::MODRINTH:
return { "sha512", "sha1" };
case Provider::FLAME:
- return { "murmur2" };
+ // Try newer formats first, fall back to old format
+ return { "sha1", "md5", "murmur2" };
}
return {};
}
@@ -51,7 +52,14 @@ auto ProviderCapabilities::hash(Provider p, QByteArray& data, QString type) -> Q
return QCryptographicHash::hash(data, QCryptographicHash::Sha512);
}
case Provider::FLAME:
- // TODO
+ // If 'type' was specified, we use that
+ if (!type.isEmpty() && hashType(p).contains(type)) {
+ if(type == "sha1")
+ return QCryptographicHash::hash(data, QCryptographicHash::Sha1);
+ else if (type == "md5")
+ return QCryptographicHash::hash(data, QCryptographicHash::Md5);
+ }
+
break;
}
return {};
diff --git a/launcher/modplatform/flame/FlameModIndex.cpp b/launcher/modplatform/flame/FlameModIndex.cpp
index 63411275..00dac411 100644
--- a/launcher/modplatform/flame/FlameModIndex.cpp
+++ b/launcher/modplatform/flame/FlameModIndex.cpp
@@ -30,6 +30,17 @@ void FlameMod::loadIndexedPack(ModPlatform::IndexedPack& pack, QJsonObject& obj)
}
}
+static QString enumToString(int hash_algorithm)
+{
+ switch(hash_algorithm){
+ default:
+ case 1:
+ return "sha1";
+ case 2:
+ return "md5";
+ }
+}
+
void FlameMod::loadIndexedPackVersions(ModPlatform::IndexedPack& pack,
QJsonArray& arr,
const shared_qobject_ptr<QNetworkAccessManager>& network,
@@ -63,14 +74,14 @@ void FlameMod::loadIndexedPackVersions(ModPlatform::IndexedPack& pack,
file.fileName = Json::requireString(obj, "fileName");
auto hash_list = Json::ensureArray(obj, "hashes");
- if(!hash_list.isEmpty()){
+ for(auto h : hash_list){
+ auto hash_entry = Json::ensureObject(h);
auto hash_types = ProviderCaps.hashType(ModPlatform::Provider::FLAME);
- for(auto& hash_type : hash_types) {
- if(hash_list.contains(hash_type)) {
- file.hash = Json::requireString(hash_list, "value");
- file.hash_type = hash_type;
- break;
- }
+ auto hash_algo = enumToString(Json::ensureInteger(hash_entry, "algo", 1, "algorithm"));
+ if(hash_types.contains(hash_algo)){
+ file.hash = Json::requireString(hash_entry, "value");
+ file.hash_type = hash_algo;
+ break;
}
}
diff --git a/launcher/modplatform/packwiz/Packwiz.cpp b/launcher/modplatform/packwiz/Packwiz.cpp
index cb430c1f..1ad6d75b 100644
--- a/launcher/modplatform/packwiz/Packwiz.cpp
+++ b/launcher/modplatform/packwiz/Packwiz.cpp
@@ -14,9 +14,9 @@ namespace Packwiz {
// Helpers
static inline auto indexFileName(QString const& mod_name) -> QString
{
- if(mod_name.endsWith(".toml"))
+ if(mod_name.endsWith(".pw.toml"))
return mod_name;
- return QString("%1.toml").arg(mod_name);
+ return QString("%1.pw.toml").arg(mod_name);
}
static ModPlatform::ProviderCapabilities ProviderCaps;
@@ -28,7 +28,14 @@ auto V1::createModFormat(QDir& index_dir, ModPlatform::IndexedPack& mod_pack, Mo
mod.name = mod_pack.name;
mod.filename = mod_version.fileName;
- mod.url = mod_version.downloadUrl;
+ if(mod_pack.provider == ModPlatform::Provider::FLAME){
+ mod.mode = "metadata:curseforge";
+ }
+ else {
+ mod.mode = "url";
+ mod.url = mod_version.downloadUrl;
+ }
+
mod.hash_format = mod_version.hash_type;
mod.hash = mod_version.hash;
@@ -84,6 +91,7 @@ void V1::updateModIndex(QDir& index_dir, Mod& mod)
addToStream("side", mod.side);
in_stream << QString("\n[download]\n");
+ addToStream("mode", mod.mode);
addToStream("url", mod.url.toString());
addToStream("hash-format", mod.hash_format);
addToStream("hash", mod.hash);
@@ -186,6 +194,7 @@ auto V1::getIndexForMod(QDir& index_dir, QString& index_file_name) -> Mod
return {};
}
+ mod.mode = stringEntry(download_table, "mode");
mod.url = stringEntry(download_table, "url");
mod.hash_format = stringEntry(download_table, "hash-format");
mod.hash = stringEntry(download_table, "hash");
diff --git a/launcher/modplatform/packwiz/Packwiz.h b/launcher/modplatform/packwiz/Packwiz.h
index 69125dbc..e66d0030 100644
--- a/launcher/modplatform/packwiz/Packwiz.h
+++ b/launcher/modplatform/packwiz/Packwiz.h
@@ -22,8 +22,8 @@ class V1 {
QString side {"both"};
// [download]
+ QString mode {};
QUrl url {};
- // FIXME: make hash-format an enum
QString hash_format {};
QString hash {};
@@ -42,11 +42,11 @@ class V1 {
auto version() -> QVariant& { return file_id; }
};
- /* Generates the object representing the information in a mod.toml file via
+ /* Generates the object representing the information in a mod.pw.toml file via
* its common representation in the launcher, when downloading mods.
* */
static auto createModFormat(QDir& index_dir, ModPlatform::IndexedPack& mod_pack, ModPlatform::IndexedVersion& mod_version) -> Mod;
- /* Generates the object representing the information in a mod.toml file via
+ /* Generates the object representing the information in a mod.pw.toml file via
* its common representation in the launcher.
* */
static auto createModFormat(QDir& index_dir, ::Mod& internal_mod) -> Mod;
diff --git a/launcher/modplatform/packwiz/Packwiz_test.cpp b/launcher/modplatform/packwiz/Packwiz_test.cpp
index 08de332d..9f3c486e 100644
--- a/launcher/modplatform/packwiz/Packwiz_test.cpp
+++ b/launcher/modplatform/packwiz/Packwiz_test.cpp
@@ -14,7 +14,7 @@ class PackwizTest : public QObject {
QString source = QFINDTESTDATA("testdata");
QDir index_dir(source);
- QString name_mod("borderless-mining.toml");
+ QString name_mod("borderless-mining.pw.toml");
QVERIFY(index_dir.entryList().contains(name_mod));
auto metadata = Packwiz::V1::getIndexForMod(index_dir, name_mod);
@@ -39,10 +39,10 @@ class PackwizTest : public QObject {
QString source = QFINDTESTDATA("testdata");
QDir index_dir(source);
- QString name_mod("screenshot-to-clipboard-fabric.toml");
+ QString name_mod("screenshot-to-clipboard-fabric.pw.toml");
QVERIFY(index_dir.entryList().contains(name_mod));
- // Try without the .toml at the end
+ // Try without the .pw.toml at the end
name_mod.chop(5);
auto metadata = Packwiz::V1::getIndexForMod(index_dir, name_mod);
diff --git a/launcher/modplatform/packwiz/testdata/borderless-mining.toml b/launcher/modplatform/packwiz/testdata/borderless-mining.pw.toml
index 16545fd4..16545fd4 100644
--- a/launcher/modplatform/packwiz/testdata/borderless-mining.toml
+++ b/launcher/modplatform/packwiz/testdata/borderless-mining.pw.toml
diff --git a/launcher/modplatform/packwiz/testdata/screenshot-to-clipboard-fabric.toml b/launcher/modplatform/packwiz/testdata/screenshot-to-clipboard-fabric.pw.toml
index 87d70ada..87d70ada 100644
--- a/launcher/modplatform/packwiz/testdata/screenshot-to-clipboard-fabric.toml
+++ b/launcher/modplatform/packwiz/testdata/screenshot-to-clipboard-fabric.pw.toml