2022-05-10 19:57:47 -03:00
|
|
|
// SPDX-License-Identifier: GPL-3.0-only
|
|
|
|
|
/*
|
2023-08-04 19:41:47 +02:00
|
|
|
* Prism Launcher - Minecraft Launcher
|
2022-05-10 19:57:47 -03:00
|
|
|
* Copyright (c) 2022 flowln <flowlnlnln@gmail.com>
|
2023-10-21 22:40:37 +03:00
|
|
|
* Copyright (c) 2023 Trial97 <alexandru.tripon97@gmail.com>
|
2022-05-10 19:57:47 -03:00
|
|
|
*
|
|
|
|
|
* 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-04-19 21:10:12 -03:00
|
|
|
#include "modplatform/ModIndex.h"
|
|
|
|
|
|
2022-05-06 12:42:01 -03:00
|
|
|
#include <QCryptographicHash>
|
2022-07-23 23:11:09 -03:00
|
|
|
#include <QDebug>
|
|
|
|
|
#include <QIODevice>
|
2022-05-06 12:42:01 -03:00
|
|
|
|
|
|
|
|
namespace ModPlatform {
|
2022-04-19 21:10:12 -03:00
|
|
|
|
2026-03-16 14:58:20 -07:00
|
|
|
ModLoaderType operator|(ModLoaderType lhs, ModLoaderType rhs)
|
|
|
|
|
{
|
|
|
|
|
return static_cast<ModLoaderType>(static_cast<std::uint16_t>(lhs) | static_cast<std::uint16_t>(rhs));
|
|
|
|
|
}
|
|
|
|
|
|
2025-10-14 04:05:56 +03:00
|
|
|
static const QList<ModLoaderType> loaderList = { NeoForge, Forge, Cauldron, LiteLoader, Quilt, Fabric,
|
|
|
|
|
Babric, BTA, LegacyFabric, Ornithe, Rift };
|
2024-11-01 13:44:06 +02:00
|
|
|
|
|
|
|
|
QList<ModLoaderType> modLoaderTypesToList(ModLoaderTypes flags)
|
|
|
|
|
{
|
|
|
|
|
QList<ModLoaderType> flagList;
|
|
|
|
|
for (auto flag : loaderList) {
|
|
|
|
|
if (flags.testFlag(flag)) {
|
|
|
|
|
flagList.append(flag);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return flagList;
|
|
|
|
|
}
|
|
|
|
|
|
2024-06-18 16:51:26 +03:00
|
|
|
const char* ProviderCapabilities::name(ResourceProvider p)
|
2022-04-19 21:10:12 -03:00
|
|
|
{
|
2022-05-06 12:42:01 -03:00
|
|
|
switch (p) {
|
2022-11-25 09:23:46 -03:00
|
|
|
case ResourceProvider::MODRINTH:
|
2022-05-06 12:42:01 -03:00
|
|
|
return "modrinth";
|
2022-11-25 09:23:46 -03:00
|
|
|
case ResourceProvider::FLAME:
|
2022-05-06 12:42:01 -03:00
|
|
|
return "curseforge";
|
|
|
|
|
}
|
|
|
|
|
return {};
|
|
|
|
|
}
|
2024-06-18 16:51:26 +03:00
|
|
|
|
|
|
|
|
QString ProviderCapabilities::readableName(ResourceProvider p)
|
2022-05-06 12:42:01 -03:00
|
|
|
{
|
|
|
|
|
switch (p) {
|
2022-11-25 09:23:46 -03:00
|
|
|
case ResourceProvider::MODRINTH:
|
2022-05-06 12:42:01 -03:00
|
|
|
return "Modrinth";
|
2022-11-25 09:23:46 -03:00
|
|
|
case ResourceProvider::FLAME:
|
2022-05-06 12:42:01 -03:00
|
|
|
return "CurseForge";
|
2022-04-19 21:10:12 -03:00
|
|
|
}
|
2022-04-20 18:45:39 -03:00
|
|
|
return {};
|
2022-04-19 21:10:12 -03:00
|
|
|
}
|
2024-06-18 16:51:26 +03:00
|
|
|
|
|
|
|
|
QStringList ProviderCapabilities::hashType(ResourceProvider p)
|
2022-04-19 21:10:12 -03:00
|
|
|
{
|
2022-05-06 12:42:01 -03:00
|
|
|
switch (p) {
|
2022-11-25 09:23:46 -03:00
|
|
|
case ResourceProvider::MODRINTH:
|
2022-05-06 12:42:01 -03:00
|
|
|
return { "sha512", "sha1" };
|
2022-11-25 09:23:46 -03:00
|
|
|
case ResourceProvider::FLAME:
|
2022-05-07 19:39:00 -03:00
|
|
|
// Try newer formats first, fall back to old format
|
|
|
|
|
return { "sha1", "md5", "murmur2" };
|
2022-05-06 12:42:01 -03:00
|
|
|
}
|
|
|
|
|
return {};
|
|
|
|
|
}
|
2022-07-23 23:11:09 -03:00
|
|
|
|
2023-06-25 10:41:29 +03:00
|
|
|
QString getMetaURL(ResourceProvider provider, QVariant projectID)
|
|
|
|
|
{
|
|
|
|
|
return ((provider == ModPlatform::ResourceProvider::FLAME) ? "https://www.curseforge.com/projects/" : "https://modrinth.com/mod/") +
|
|
|
|
|
projectID.toString();
|
|
|
|
|
}
|
|
|
|
|
|
2023-10-15 11:52:28 +03:00
|
|
|
auto getModLoaderAsString(ModLoaderType type) -> const QString
|
2023-08-23 10:26:57 +03:00
|
|
|
{
|
|
|
|
|
switch (type) {
|
|
|
|
|
case NeoForge:
|
|
|
|
|
return "neoforge";
|
|
|
|
|
case Forge:
|
|
|
|
|
return "forge";
|
|
|
|
|
case Cauldron:
|
|
|
|
|
return "cauldron";
|
|
|
|
|
case LiteLoader:
|
2025-08-05 10:27:49 +02:00
|
|
|
return "liteloader";
|
2023-08-23 10:26:57 +03:00
|
|
|
case Fabric:
|
|
|
|
|
return "fabric";
|
|
|
|
|
case Quilt:
|
|
|
|
|
return "quilt";
|
2025-03-25 19:23:35 +00:00
|
|
|
case DataPack:
|
|
|
|
|
return "datapack";
|
2025-07-10 11:07:17 -04:00
|
|
|
case Babric:
|
|
|
|
|
return "babric";
|
|
|
|
|
case BTA:
|
|
|
|
|
return "bta-babric";
|
2025-08-05 10:27:49 +02:00
|
|
|
case LegacyFabric:
|
|
|
|
|
return "legacy-fabric";
|
|
|
|
|
case Ornithe:
|
|
|
|
|
return "ornithe";
|
|
|
|
|
case Rift:
|
|
|
|
|
return "rift";
|
2023-08-23 10:26:57 +03:00
|
|
|
default:
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
return "";
|
|
|
|
|
}
|
|
|
|
|
|
2023-10-17 19:25:01 +03:00
|
|
|
auto getModLoaderFromString(QString type) -> ModLoaderType
|
2023-10-15 11:52:28 +03:00
|
|
|
{
|
|
|
|
|
if (type == "neoforge")
|
|
|
|
|
return NeoForge;
|
|
|
|
|
if (type == "forge")
|
|
|
|
|
return Forge;
|
|
|
|
|
if (type == "cauldron")
|
|
|
|
|
return Cauldron;
|
|
|
|
|
if (type == "liteloader")
|
|
|
|
|
return LiteLoader;
|
|
|
|
|
if (type == "fabric")
|
|
|
|
|
return Fabric;
|
|
|
|
|
if (type == "quilt")
|
|
|
|
|
return Quilt;
|
2025-07-10 11:07:17 -04:00
|
|
|
if (type == "babric")
|
|
|
|
|
return Babric;
|
|
|
|
|
if (type == "bta-babric")
|
|
|
|
|
return BTA;
|
2025-08-05 10:27:49 +02:00
|
|
|
if (type == "legacy-fabric")
|
|
|
|
|
return LegacyFabric;
|
|
|
|
|
if (type == "ornithe")
|
|
|
|
|
return Ornithe;
|
2025-08-05 12:08:41 +02:00
|
|
|
if (type == "rift")
|
|
|
|
|
return Rift;
|
2023-10-15 11:52:28 +03:00
|
|
|
return {};
|
|
|
|
|
}
|
|
|
|
|
|
2022-05-06 12:42:01 -03:00
|
|
|
} // namespace ModPlatform
|