2022-05-10 23:57:47 +01:00
|
|
|
// SPDX-License-Identifier: GPL-3.0-only
|
|
|
|
/*
|
|
|
|
* PolyMC - Minecraft Launcher
|
|
|
|
* 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-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
|
|
|
|
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 12:11:41 +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 12:11:41 +01:00
|
|
|
QString getMetaURL(ResourceProvider provider, QVariant projectID)
|
|
|
|
{
|
|
|
|
return ((provider == ModPlatform::ResourceProvider::FLAME) ? "https://www.curseforge.com/projects/" : "https://modrinth.com/mod/") +
|
|
|
|
projectID.toString();
|
|
|
|
}
|
|
|
|
|
2022-05-06 16:42:01 +01:00
|
|
|
} // namespace ModPlatform
|