pollymc/launcher/modplatform/ModIndex.cpp

69 lines
2.0 KiB
C++
Raw Normal View History

#include "modplatform/ModIndex.h"
#include <QCryptographicHash>
namespace ModPlatform {
auto ProviderCapabilities::name(Provider p) -> const char*
{
switch (p) {
case Provider::MODRINTH:
return "modrinth";
case Provider::FLAME:
return "curseforge";
}
return {};
}
auto ProviderCapabilities::readableName(Provider p) -> QString
{
switch (p) {
case Provider::MODRINTH:
return "Modrinth";
case Provider::FLAME:
return "CurseForge";
}
return {};
}
auto ProviderCapabilities::hashType(Provider p) -> QStringList
{
switch (p) {
case Provider::MODRINTH:
return { "sha512", "sha1" };
case Provider::FLAME:
// Try newer formats first, fall back to old format
return { "sha1", "md5", "murmur2" };
}
return {};
}
auto ProviderCapabilities::hash(Provider p, QByteArray& data, QString type) -> QByteArray
{
switch (p) {
case Provider::MODRINTH: {
// NOTE: Data is the result of reading the entire JAR file!
// If 'type' was specified, we use that
if (!type.isEmpty() && hashType(p).contains(type)) {
if (type == "sha512")
return QCryptographicHash::hash(data, QCryptographicHash::Sha512);
else if (type == "sha1")
return QCryptographicHash::hash(data, QCryptographicHash::Sha1);
}
return QCryptographicHash::hash(data, QCryptographicHash::Sha512);
}
case Provider::FLAME:
// 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 {};
}
} // namespace ModPlatform