aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorflow <flowlnlnln@gmail.com>2022-07-23 23:13:53 -0300
committerflow <flowlnlnln@gmail.com>2022-07-24 17:46:53 -0300
commit15ec1abb6a3acb77b36f14d3ddccc97a8df8c8e1 (patch)
tree37b513ae95cfedf24f98115f616aec076335191b
parentcfda8dbb2b0aeded851d45465cc3ea4b6901229c (diff)
downloadPrismLauncher-15ec1abb6a3acb77b36f14d3ddccc97a8df8c8e1.tar.gz
PrismLauncher-15ec1abb6a3acb77b36f14d3ddccc97a8df8c8e1.tar.bz2
PrismLauncher-15ec1abb6a3acb77b36f14d3ddccc97a8df8c8e1.zip
feat: use QIODevice for calcuating the JAR hash on Modrinth
Signed-off-by: flow <flowlnlnln@gmail.com>
-rw-r--r--launcher/modplatform/EnsureMetadataTask.cpp28
-rw-r--r--launcher/modplatform/modrinth/ModrinthCheckUpdate.cpp8
2 files changed, 23 insertions, 13 deletions
diff --git a/launcher/modplatform/EnsureMetadataTask.cpp b/launcher/modplatform/EnsureMetadataTask.cpp
index 60c54c4e..a5c9cbca 100644
--- a/launcher/modplatform/EnsureMetadataTask.cpp
+++ b/launcher/modplatform/EnsureMetadataTask.cpp
@@ -50,21 +50,29 @@ EnsureMetadataTask::EnsureMetadataTask(QList<Mod*>& mods, QDir dir, ModPlatform:
QString EnsureMetadataTask::getHash(Mod* mod)
{
/* Here we create a mapping hash -> mod, because we need that relationship to parse the API routes */
- QByteArray jar_data;
- try {
- jar_data = FS::read(mod->fileinfo().absoluteFilePath());
- } catch (FS::FileSystemException& e) {
- qCritical() << QString("Failed to open / read JAR file of %1").arg(mod->name());
- qCritical() << QString("Reason: ") << e.cause();
-
+ if (mod->type() == Mod::MOD_FOLDER)
return {};
- }
+ QString result;
switch (m_provider) {
case ModPlatform::Provider::MODRINTH: {
+ QFile file(mod->fileinfo().absoluteFilePath());
+
+ try {
+ file.open(QFile::ReadOnly);
+ } catch (FS::FileSystemException& e) {
+ qCritical() << QString("Failed to open JAR file of %1").arg(mod->name());
+ qCritical() << QString("Reason: ") << e.cause();
+
+ return {};
+ }
+
auto hash_type = ProviderCaps.hashType(ModPlatform::Provider::MODRINTH).first();
+ result = ProviderCaps.hash(ModPlatform::Provider::MODRINTH, &file, hash_type);
- return QString(ProviderCaps.hash(ModPlatform::Provider::MODRINTH, jar_data, hash_type).toHex());
+ file.close();
+
+ break;
}
case ModPlatform::Provider::FLAME: {
QByteArray jar_data_treated;
@@ -78,7 +86,7 @@ QString EnsureMetadataTask::getHash(Mod* mod)
}
}
- return {};
+ return result;
}
bool EnsureMetadataTask::abort()
diff --git a/launcher/modplatform/modrinth/ModrinthCheckUpdate.cpp b/launcher/modplatform/modrinth/ModrinthCheckUpdate.cpp
index 79d8edf7..f4898591 100644
--- a/launcher/modplatform/modrinth/ModrinthCheckUpdate.cpp
+++ b/launcher/modplatform/modrinth/ModrinthCheckUpdate.cpp
@@ -46,17 +46,19 @@ void ModrinthCheckUpdate::executeTask()
if (mod->metadata()->hash_format != best_hash_type) {
QByteArray jar_data;
+ QFile file(mod->fileinfo().absoluteFilePath());
try {
- jar_data = FS::read(mod->fileinfo().absoluteFilePath());
+ file.open(QFile::ReadOnly);
} catch (FS::FileSystemException& e) {
- qCritical() << QString("Failed to open / read JAR file of %1").arg(mod->name());
+ qCritical() << QString("Failed to open JAR file of %1").arg(mod->name());
qCritical() << QString("Reason: ") << e.cause();
failed(e.what());
return;
}
- hash = QString(ProviderCaps.hash(ModPlatform::Provider::MODRINTH, jar_data, best_hash_type).toHex());
+ hash = ProviderCaps.hash(ModPlatform::Provider::MODRINTH, &file, best_hash_type);
+ file.close();
}
hashes.append(hash);