diff options
author | flow <flowlnlnln@gmail.com> | 2022-11-11 12:48:53 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-11-11 12:48:53 -0800 |
commit | 64576f4c4c6c41ba4528a00a38242955079f52ec (patch) | |
tree | ab49b1ce0f8dfa8a8a6557aedd905e1d2e1ac708 /launcher/modplatform/helpers/HashUtils.cpp | |
parent | 21dbd28a2f2397f0053f4f40563c16cb03b0fdfe (diff) | |
parent | 2f10fa8b61dac5af5866e7ad8e72cf702f15a130 (diff) | |
download | PrismLauncher-64576f4c4c6c41ba4528a00a38242955079f52ec.tar.gz PrismLauncher-64576f4c4c6c41ba4528a00a38242955079f52ec.tar.bz2 PrismLauncher-64576f4c4c6c41ba4528a00a38242955079f52ec.zip |
Merge pull request #304 from Ryex/move-downloads
Fixes https://github.com/PrismLauncher/PrismLauncher/issues/222
Diffstat (limited to 'launcher/modplatform/helpers/HashUtils.cpp')
-rw-r--r-- | launcher/modplatform/helpers/HashUtils.cpp | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/launcher/modplatform/helpers/HashUtils.cpp b/launcher/modplatform/helpers/HashUtils.cpp index b18c87af..f1e4759e 100644 --- a/launcher/modplatform/helpers/HashUtils.cpp +++ b/launcher/modplatform/helpers/HashUtils.cpp @@ -36,6 +36,18 @@ Hasher::Ptr createFlameHasher(QString file_path) return new FlameHasher(file_path); } +Hasher::Ptr createBlockedModHasher(QString file_path, ModPlatform::Provider provider) +{ + return new BlockedModHasher(file_path, provider); +} + +Hasher::Ptr createBlockedModHasher(QString file_path, ModPlatform::Provider provider, QString type) +{ + auto hasher = new BlockedModHasher(file_path, provider); + hasher->useHashType(type); + return hasher; +} + void ModrinthHasher::executeTask() { QFile file(m_path); @@ -79,4 +91,50 @@ void FlameHasher::executeTask() } } + +BlockedModHasher::BlockedModHasher(QString file_path, ModPlatform::Provider provider) + : Hasher(file_path), provider(provider) { + setObjectName(QString("BlockedModHasher: %1").arg(file_path)); + hash_type = ProviderCaps.hashType(provider).first(); +} + +void BlockedModHasher::executeTask() +{ + QFile file(m_path); + + try { + file.open(QFile::ReadOnly); + } catch (FS::FileSystemException& e) { + qCritical() << QString("Failed to open JAR file in %1").arg(m_path); + qCritical() << QString("Reason: ") << e.cause(); + + emitFailed("Failed to open file for hashing."); + return; + } + + m_hash = ProviderCaps.hash(provider, &file, hash_type); + + file.close(); + + if (m_hash.isEmpty()) { + emitFailed("Empty hash!"); + } else { + emitSucceeded(); + } +} + +QStringList BlockedModHasher::getHashTypes() { + return ProviderCaps.hashType(provider); +} + +bool BlockedModHasher::useHashType(QString type) { + auto types = ProviderCaps.hashType(provider); + if (types.contains(type)) { + hash_type = type; + return true; + } + qDebug() << "Bad hash type " << type << " for provider"; + return false; +} + } // namespace Hashing |