2022-05-10 23:57:47 +01:00
|
|
|
// SPDX-License-Identifier: GPL-3.0-only
|
|
|
|
/*
|
2023-08-04 18:41:47 +01:00
|
|
|
* Prism Launcher - Minecraft Launcher
|
2023-08-02 17:35:35 +01:00
|
|
|
* Copyright (c) 2022 flowln <flowlnlnln@gmail.com>
|
|
|
|
*
|
|
|
|
* This program is free software: you can redistribute it and/or modify
|
|
|
|
* it under the terms of the GNU General Public License as published by
|
|
|
|
* the Free Software Foundation, version 3.
|
|
|
|
*
|
|
|
|
* This program is distributed in the hope that it will be useful,
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
* GNU General Public License for more details.
|
|
|
|
*
|
|
|
|
* You should have received a copy of the GNU General Public License
|
|
|
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
|
|
*/
|
2022-05-10 23:57:47 +01:00
|
|
|
|
2022-04-20 01:10:12 +01:00
|
|
|
#include "modplatform/ModIndex.h"
|
|
|
|
|
2022-05-06 16:42:01 +01:00
|
|
|
#include <QCryptographicHash>
|
2022-07-24 03:11:09 +01:00
|
|
|
#include <QDebug>
|
|
|
|
#include <QIODevice>
|
2022-05-06 16:42:01 +01:00
|
|
|
|
|
|
|
namespace ModPlatform {
|
2022-04-20 01:10:12 +01:00
|
|
|
|
2023-08-20 14:40:58 +01:00
|
|
|
static const QMap<QString, IndexedVersionType::VersionType> s_indexed_version_type_names = {
|
|
|
|
{ "release", IndexedVersionType::VersionType::Release },
|
|
|
|
{ "beta", IndexedVersionType::VersionType::Beta },
|
|
|
|
{ "alpha", IndexedVersionType::VersionType::Alpha }
|
|
|
|
};
|
2023-05-26 21:50:22 +01:00
|
|
|
|
2023-08-12 10:54:10 +01:00
|
|
|
IndexedVersionType::IndexedVersionType(const QString& type) : IndexedVersionType(enumFromString(type)) {}
|
2023-05-26 21:50:22 +01:00
|
|
|
|
2023-08-20 14:40:58 +01:00
|
|
|
IndexedVersionType::IndexedVersionType(const IndexedVersionType::VersionType& type)
|
2023-05-26 21:50:22 +01:00
|
|
|
{
|
|
|
|
m_type = type;
|
|
|
|
}
|
|
|
|
|
|
|
|
IndexedVersionType::IndexedVersionType(const IndexedVersionType& other)
|
|
|
|
{
|
|
|
|
m_type = other.m_type;
|
|
|
|
}
|
|
|
|
|
2023-08-12 10:54:10 +01:00
|
|
|
IndexedVersionType& IndexedVersionType::operator=(const IndexedVersionType& other)
|
2023-05-27 00:34:30 +01:00
|
|
|
{
|
|
|
|
m_type = other.m_type;
|
|
|
|
return *this;
|
|
|
|
}
|
|
|
|
|
2023-08-20 14:40:58 +01:00
|
|
|
const QString IndexedVersionType::toString(const IndexedVersionType::VersionType& type)
|
2023-05-26 21:50:22 +01:00
|
|
|
{
|
2023-08-20 14:40:58 +01:00
|
|
|
return s_indexed_version_type_names.key(type, "unknown");
|
2023-05-26 21:50:22 +01:00
|
|
|
}
|
|
|
|
|
2023-08-20 14:40:58 +01:00
|
|
|
IndexedVersionType::VersionType IndexedVersionType::enumFromString(const QString& type)
|
2023-05-26 21:50:22 +01:00
|
|
|
{
|
2023-08-20 14:40:58 +01:00
|
|
|
return s_indexed_version_type_names.value(type, IndexedVersionType::VersionType::Unknown);
|
2023-05-26 21:50:22 +01:00
|
|
|
}
|
|
|
|
|
2022-11-25 12:23:46 +00:00
|
|
|
auto ProviderCapabilities::name(ResourceProvider p) -> const char*
|
2022-04-20 01:10:12 +01:00
|
|
|
{
|
2022-05-06 16:42:01 +01:00
|
|
|
switch (p) {
|
2022-11-25 12:23:46 +00:00
|
|
|
case ResourceProvider::MODRINTH:
|
2022-05-06 16:42:01 +01:00
|
|
|
return "modrinth";
|
2022-11-25 12:23:46 +00:00
|
|
|
case ResourceProvider::FLAME:
|
2022-05-06 16:42:01 +01:00
|
|
|
return "curseforge";
|
|
|
|
}
|
|
|
|
return {};
|
|
|
|
}
|
2022-11-25 12:23:46 +00:00
|
|
|
auto ProviderCapabilities::readableName(ResourceProvider p) -> QString
|
2022-05-06 16:42:01 +01:00
|
|
|
{
|
|
|
|
switch (p) {
|
2022-11-25 12:23:46 +00:00
|
|
|
case ResourceProvider::MODRINTH:
|
2022-05-06 16:42:01 +01:00
|
|
|
return "Modrinth";
|
2022-11-25 12:23:46 +00:00
|
|
|
case ResourceProvider::FLAME:
|
2022-05-06 16:42:01 +01:00
|
|
|
return "CurseForge";
|
2022-04-20 01:10:12 +01:00
|
|
|
}
|
2022-04-20 22:45:39 +01:00
|
|
|
return {};
|
2022-04-20 01:10:12 +01:00
|
|
|
}
|
2022-11-25 12:23:46 +00:00
|
|
|
auto ProviderCapabilities::hashType(ResourceProvider p) -> QStringList
|
2022-04-20 01:10:12 +01:00
|
|
|
{
|
2022-05-06 16:42:01 +01:00
|
|
|
switch (p) {
|
2022-11-25 12:23:46 +00:00
|
|
|
case ResourceProvider::MODRINTH:
|
2022-05-06 16:42:01 +01:00
|
|
|
return { "sha512", "sha1" };
|
2022-11-25 12:23:46 +00:00
|
|
|
case ResourceProvider::FLAME:
|
2022-05-07 23:39:00 +01:00
|
|
|
// Try newer formats first, fall back to old format
|
|
|
|
return { "sha1", "md5", "murmur2" };
|
2022-05-06 16:42:01 +01:00
|
|
|
}
|
|
|
|
return {};
|
|
|
|
}
|
2022-07-24 03:11:09 +01:00
|
|
|
|
2022-11-25 12:23:46 +00:00
|
|
|
auto ProviderCapabilities::hash(ResourceProvider p, QIODevice* device, QString type) -> QString
|
2022-05-06 16:42:01 +01:00
|
|
|
{
|
2022-07-24 03:11:09 +01:00
|
|
|
QCryptographicHash::Algorithm algo = QCryptographicHash::Sha1;
|
2022-05-06 16:42:01 +01:00
|
|
|
switch (p) {
|
2022-11-25 12:23:46 +00:00
|
|
|
case ResourceProvider::MODRINTH: {
|
2022-07-24 03:11:09 +01:00
|
|
|
algo = (type == "sha1") ? QCryptographicHash::Sha1 : QCryptographicHash::Sha512;
|
|
|
|
break;
|
2022-05-06 16:42:01 +01:00
|
|
|
}
|
2022-11-25 12:23:46 +00:00
|
|
|
case ResourceProvider::FLAME:
|
2022-07-24 03:11:09 +01:00
|
|
|
algo = (type == "sha1") ? QCryptographicHash::Sha1 : QCryptographicHash::Md5;
|
2022-05-06 16:42:01 +01:00
|
|
|
break;
|
2022-04-20 01:10:12 +01:00
|
|
|
}
|
2022-07-24 03:11:09 +01:00
|
|
|
|
|
|
|
QCryptographicHash hash(algo);
|
2023-06-25 08:41:29 +01:00
|
|
|
if (!hash.addData(device))
|
2022-07-24 03:11:09 +01:00
|
|
|
qCritical() << "Failed to read JAR to create hash!";
|
|
|
|
|
|
|
|
Q_ASSERT(hash.result().length() == hash.hashLength(algo));
|
|
|
|
return { hash.result().toHex() };
|
2022-04-20 01:10:12 +01:00
|
|
|
}
|
|
|
|
|
2023-06-25 08:41:29 +01:00
|
|
|
QString getMetaURL(ResourceProvider provider, QVariant projectID)
|
|
|
|
{
|
|
|
|
return ((provider == ModPlatform::ResourceProvider::FLAME) ? "https://www.curseforge.com/projects/" : "https://modrinth.com/mod/") +
|
|
|
|
projectID.toString();
|
|
|
|
}
|
|
|
|
|
2023-08-23 08:26:57 +01:00
|
|
|
auto getModLoaderString(ModLoaderType type) -> const QString
|
|
|
|
{
|
|
|
|
switch (type) {
|
|
|
|
case NeoForge:
|
|
|
|
return "neoforge";
|
|
|
|
case Forge:
|
|
|
|
return "forge";
|
|
|
|
case Cauldron:
|
|
|
|
return "cauldron";
|
|
|
|
case LiteLoader:
|
|
|
|
return "liteloader";
|
|
|
|
case Fabric:
|
|
|
|
return "fabric";
|
|
|
|
case Quilt:
|
|
|
|
return "quilt";
|
|
|
|
default:
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
return "";
|
|
|
|
}
|
|
|
|
|
2022-05-06 16:42:01 +01:00
|
|
|
} // namespace ModPlatform
|