mirror of
https://github.com/MultiMC/MultiMC5.git
synced 2024-12-29 09:15:49 +00:00
4fa3e2a714
Shouldn't crash anymore, shouldn't overwrite data in some bad way anymore either.
189 lines
3.1 KiB
C++
189 lines
3.1 KiB
C++
#include <meta/VersionList.h>
|
|
#include <meta/Index.h>
|
|
#include <Env.h>
|
|
#include "ProfilePatch.h"
|
|
|
|
#include "meta/Version.h"
|
|
#include "VersionFile.h"
|
|
#include "minecraft/MinecraftProfile.h"
|
|
|
|
ProfilePatch::ProfilePatch(std::shared_ptr<Meta::Version> version)
|
|
:m_metaVersion(version)
|
|
{
|
|
}
|
|
|
|
ProfilePatch::ProfilePatch(std::shared_ptr<VersionFile> file, const QString& filename)
|
|
:m_file(file), m_filename(filename)
|
|
{
|
|
}
|
|
|
|
std::shared_ptr<Meta::Version> ProfilePatch::getMeta()
|
|
{
|
|
return m_metaVersion;
|
|
}
|
|
|
|
void ProfilePatch::applyTo(MinecraftProfile* profile)
|
|
{
|
|
auto vfile = getVersionFile();
|
|
if(vfile)
|
|
{
|
|
vfile->applyTo(profile);
|
|
}
|
|
else
|
|
{
|
|
profile->applyProblemSeverity(getProblemSeverity());
|
|
}
|
|
}
|
|
|
|
std::shared_ptr<class VersionFile> ProfilePatch::getVersionFile()
|
|
{
|
|
if(m_metaVersion)
|
|
{
|
|
if(!m_metaVersion->isLoaded())
|
|
{
|
|
m_metaVersion->load();
|
|
}
|
|
return m_metaVersion->data();
|
|
}
|
|
else
|
|
{
|
|
return m_file;
|
|
}
|
|
}
|
|
|
|
std::shared_ptr<class Meta::VersionList> ProfilePatch::getVersionList()
|
|
{
|
|
if(m_metaVersion)
|
|
{
|
|
return ENV.metadataIndex()->get(m_metaVersion->uid());
|
|
}
|
|
return nullptr;
|
|
}
|
|
|
|
int ProfilePatch::getOrder()
|
|
{
|
|
if(m_orderOverride)
|
|
return m_order;
|
|
|
|
auto vfile = getVersionFile();
|
|
if(vfile)
|
|
{
|
|
return vfile->order;
|
|
}
|
|
return 0;
|
|
}
|
|
void ProfilePatch::setOrder(int order)
|
|
{
|
|
m_orderOverride = true;
|
|
m_order = order;
|
|
}
|
|
QString ProfilePatch::getID()
|
|
{
|
|
if(m_metaVersion)
|
|
return m_metaVersion->uid();
|
|
return getVersionFile()->uid;
|
|
}
|
|
QString ProfilePatch::getName()
|
|
{
|
|
if(m_metaVersion)
|
|
return m_metaVersion->name();
|
|
return getVersionFile()->name;
|
|
}
|
|
QString ProfilePatch::getVersion()
|
|
{
|
|
if(m_metaVersion)
|
|
return m_metaVersion->version();
|
|
return getVersionFile()->version;
|
|
}
|
|
QString ProfilePatch::getFilename()
|
|
{
|
|
return m_filename;
|
|
}
|
|
QDateTime ProfilePatch::getReleaseDateTime()
|
|
{
|
|
if(m_metaVersion)
|
|
{
|
|
return m_metaVersion->time();
|
|
}
|
|
return getVersionFile()->releaseTime;
|
|
}
|
|
|
|
bool ProfilePatch::isCustom()
|
|
{
|
|
return !m_isVanilla;
|
|
};
|
|
|
|
bool ProfilePatch::isCustomizable()
|
|
{
|
|
if(m_metaVersion)
|
|
{
|
|
if(getVersionFile())
|
|
{
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
bool ProfilePatch::isRemovable()
|
|
{
|
|
return m_isRemovable;
|
|
}
|
|
bool ProfilePatch::isRevertible()
|
|
{
|
|
return m_isRevertible;
|
|
}
|
|
bool ProfilePatch::isMoveable()
|
|
{
|
|
return m_isMovable;
|
|
}
|
|
bool ProfilePatch::isVersionChangeable()
|
|
{
|
|
auto list = getVersionList();
|
|
if(list)
|
|
{
|
|
if(!list->isLoaded())
|
|
{
|
|
list->load();
|
|
}
|
|
return list->count() != 0;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
void ProfilePatch::setVanilla (bool state)
|
|
{
|
|
m_isVanilla = state;
|
|
}
|
|
void ProfilePatch::setRemovable (bool state)
|
|
{
|
|
m_isRemovable = state;
|
|
}
|
|
void ProfilePatch::setRevertible (bool state)
|
|
{
|
|
m_isRevertible = state;
|
|
}
|
|
void ProfilePatch::setMovable (bool state)
|
|
{
|
|
m_isMovable = state;
|
|
}
|
|
|
|
ProblemSeverity ProfilePatch::getProblemSeverity()
|
|
{
|
|
auto file = getVersionFile();
|
|
if(file)
|
|
{
|
|
return file->getProblemSeverity();
|
|
}
|
|
return ProblemSeverity::Error;
|
|
}
|
|
|
|
const QList<PatchProblem> ProfilePatch::getProblems()
|
|
{
|
|
auto file = getVersionFile();
|
|
if(file)
|
|
{
|
|
return file->getProblems();
|
|
}
|
|
return {PatchProblem(ProblemSeverity::Error, QObject::tr("Patch is not loaded yet."))};
|
|
}
|