feat: use QIODevice for calcuating the JAR hash on Modrinth

Signed-off-by: flow <flowlnlnln@gmail.com>
This commit is contained in:
flow 2022-07-23 23:13:53 -03:00
parent cfda8dbb2b
commit 15ec1abb6a
No known key found for this signature in database
GPG Key ID: 8D0F221F0A59F469
2 changed files with 24 additions and 14 deletions

View File

@ -50,21 +50,29 @@ EnsureMetadataTask::EnsureMetadataTask(QList<Mod*>& mods, QDir dir, ModPlatform:
QString EnsureMetadataTask::getHash(Mod* mod) QString EnsureMetadataTask::getHash(Mod* mod)
{ {
/* Here we create a mapping hash -> mod, because we need that relationship to parse the API routes */ /* Here we create a mapping hash -> mod, because we need that relationship to parse the API routes */
QByteArray jar_data; if (mod->type() == Mod::MOD_FOLDER)
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();
return {}; return {};
}
QString result;
switch (m_provider) { switch (m_provider) {
case ModPlatform::Provider::MODRINTH: { case ModPlatform::Provider::MODRINTH: {
auto hash_type = ProviderCaps.hashType(ModPlatform::Provider::MODRINTH).first(); QFile file(mod->fileinfo().absoluteFilePath());
return QString(ProviderCaps.hash(ModPlatform::Provider::MODRINTH, jar_data, hash_type).toHex()); 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);
file.close();
break;
} }
case ModPlatform::Provider::FLAME: { case ModPlatform::Provider::FLAME: {
QByteArray jar_data_treated; QByteArray jar_data_treated;
@ -78,7 +86,7 @@ QString EnsureMetadataTask::getHash(Mod* mod)
} }
} }
return {}; return result;
} }
bool EnsureMetadataTask::abort() bool EnsureMetadataTask::abort()

View File

@ -46,17 +46,19 @@ void ModrinthCheckUpdate::executeTask()
if (mod->metadata()->hash_format != best_hash_type) { if (mod->metadata()->hash_format != best_hash_type) {
QByteArray jar_data; QByteArray jar_data;
QFile file(mod->fileinfo().absoluteFilePath());
try { try {
jar_data = FS::read(mod->fileinfo().absoluteFilePath()); file.open(QFile::ReadOnly);
} catch (FS::FileSystemException& e) { } 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(); qCritical() << QString("Reason: ") << e.cause();
failed(e.what()); failed(e.what());
return; 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); hashes.append(hash);