feat: use QIODevice for calcuating the JAR hash on Modrinth
Signed-off-by: flow <flowlnlnln@gmail.com>
This commit is contained in:
parent
cfda8dbb2b
commit
15ec1abb6a
@ -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()
|
||||||
|
@ -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);
|
||||||
|
Loading…
Reference in New Issue
Block a user