NOISSUE split out the LaunchProfile out of the ComponentList

This commit is contained in:
Petr Mrázek
2017-11-04 22:55:25 +01:00
parent 3470158943
commit 17c8f31a09
16 changed files with 493 additions and 422 deletions

View File

@ -133,38 +133,39 @@ bool MinecraftInstance::reload()
void MinecraftInstance::createProfile()
{
m_profile.reset(new ComponentList(this));
m_components.reset(new ComponentList(this));
}
void MinecraftInstance::reloadProfile()
{
m_profile->reload();
setVersionBroken(m_profile->getProblemSeverity() == ProblemSeverity::Error);
m_components->reload();
emit versionReloaded();
}
void MinecraftInstance::clearProfile()
{
m_profile->clear();
m_components->clearProfile();
emit versionReloaded();
}
std::shared_ptr<ComponentList> MinecraftInstance::getComponentList() const
{
return m_profile;
return m_components;
}
QSet<QString> MinecraftInstance::traits() const
{
auto version = getComponentList();
if (!version)
auto components = getComponentList();
if (!components)
{
return {"version-incomplete"};
}
else
auto profile = components->getProfile();
if (!profile)
{
return version->getTraits();
return {"version-incomplete"};
}
return profile->getTraits();
}
QString MinecraftInstance::minecraftRoot() const
@ -254,20 +255,23 @@ QStringList MinecraftInstance::getClassPath() const
{
QStringList jars, nativeJars;
auto javaArchitecture = settings()->get("JavaArchitecture").toString();
m_profile->getLibraryFiles(javaArchitecture, jars, nativeJars, getLocalLibraryPath(), binRoot());
auto profile = m_components->getProfile();
profile->getLibraryFiles(javaArchitecture, jars, nativeJars, getLocalLibraryPath(), binRoot());
return jars;
}
QString MinecraftInstance::getMainClass() const
{
return m_profile->getMainClass();
auto profile = m_components->getProfile();
return profile->getMainClass();
}
QStringList MinecraftInstance::getNativeJars() const
{
QStringList jars, nativeJars;
auto javaArchitecture = settings()->get("JavaArchitecture").toString();
m_profile->getLibraryFiles(javaArchitecture, jars, nativeJars, getLocalLibraryPath(), binRoot());
auto profile = m_components->getProfile();
profile->getLibraryFiles(javaArchitecture, jars, nativeJars, getLocalLibraryPath(), binRoot());
return nativeJars;
}
@ -298,11 +302,11 @@ QStringList MinecraftInstance::javaArguments() const
args << "-Xdock:icon=icon.png";
args << QString("-Xdock:name=\"%1\"").arg(windowTitle());
#endif
auto traits = m_profile->getTraits();
auto traits_ = traits();
// HACK: fix issues on macOS with 1.13 snapshots
// NOTE: Oracle Java option. if there are alternate jvm implementations, this would be the place to customize this for them
#ifdef Q_OS_MAC
if(traits.contains("FirstThreadOnMacOS"))
if(traits_.contains("FirstThreadOnMacOS"))
{
args << QString("-XstartOnFirstThread");
}
@ -395,8 +399,9 @@ static QString replaceTokensIn(QString text, QMap<QString, QString> with)
QStringList MinecraftInstance::processMinecraftArgs(AuthSessionPtr session) const
{
QString args_pattern = m_profile->getMinecraftArguments();
for (auto tweaker : m_profile->getTweakers())
auto profile = m_components->getProfile();
QString args_pattern = profile->getMinecraftArguments();
for (auto tweaker : profile->getTweakers())
{
args_pattern += " --tweakClass " + tweaker;
}
@ -416,9 +421,9 @@ QStringList MinecraftInstance::processMinecraftArgs(AuthSessionPtr session) cons
// blatant self-promotion.
token_mapping["profile_name"] = token_mapping["version_name"] = "MultiMC5";
if(m_profile->isVanilla())
if(m_components->isVanilla())
{
token_mapping["version_type"] = m_profile->getMinecraftVersionType();
token_mapping["version_type"] = profile->getMinecraftVersionType();
}
else
{
@ -428,7 +433,7 @@ QStringList MinecraftInstance::processMinecraftArgs(AuthSessionPtr session) cons
QString absRootDir = QDir(minecraftRoot()).absolutePath();
token_mapping["game_directory"] = absRootDir;
QString absAssetsDir = QDir("assets/").absolutePath();
auto assets = m_profile->getMinecraftAssets();
auto assets = profile->getMinecraftAssets();
// FIXME: this is wrong and should be run as an async task
token_mapping["game_assets"] = AssetsUtils::reconstructAssets(assets->id).absolutePath();
@ -448,15 +453,18 @@ QString MinecraftInstance::createLaunchScript(AuthSessionPtr session)
{
QString launchScript;
if (!m_profile)
return nullptr;
if (!m_components)
return QString();
auto profile = m_components->getProfile();
if(!profile)
return QString();
auto mainClass = getMainClass();
if (!mainClass.isEmpty())
{
launchScript += "mainClass " + mainClass + "\n";
}
auto appletClass = m_profile->getAppletClass();
auto appletClass = profile->getAppletClass();
if (!appletClass.isEmpty())
{
launchScript += "appletClass " + appletClass + "\n";
@ -492,7 +500,7 @@ QString MinecraftInstance::createLaunchScript(AuthSessionPtr session)
{
QStringList jars, nativeJars;
auto javaArchitecture = settings()->get("JavaArchitecture").toString();
m_profile->getLibraryFiles(javaArchitecture, jars, nativeJars, getLocalLibraryPath(), binRoot());
profile->getLibraryFiles(javaArchitecture, jars, nativeJars, getLocalLibraryPath(), binRoot());
for(auto file: jars)
{
launchScript += "cp " + file + "\n";
@ -504,7 +512,7 @@ QString MinecraftInstance::createLaunchScript(AuthSessionPtr session)
launchScript += "natives " + getNativePath() + "\n";
}
for (auto trait : m_profile->getTraits())
for (auto trait : profile->getTraits())
{
launchScript += "traits " + trait + "\n";
}
@ -519,6 +527,7 @@ QStringList MinecraftInstance::verboseDescription(AuthSessionPtr session)
out << "Main Class:" << " " + getMainClass() << "";
out << "Native path:" << " " + getNativePath() << "";
auto profile = m_components->getProfile();
auto alltraits = traits();
if(alltraits.size())
@ -536,7 +545,7 @@ QStringList MinecraftInstance::verboseDescription(AuthSessionPtr session)
out << "Libraries:";
QStringList jars, nativeJars;
auto javaArchitecture = settings()->get("JavaArchitecture").toString();
m_profile->getLibraryFiles(javaArchitecture, jars, nativeJars, getLocalLibraryPath(), binRoot());
profile->getLibraryFiles(javaArchitecture, jars, nativeJars, getLocalLibraryPath(), binRoot());
auto printLibFile = [&](const QString & path)
{
QFileInfo info(path);
@ -594,7 +603,7 @@ QStringList MinecraftInstance::verboseDescription(AuthSessionPtr session)
out << "";
}
auto & jarMods = m_profile->getJarMods();
auto & jarMods = profile->getJarMods();
if(jarMods.size())
{
out << "Jar Mods:";
@ -989,8 +998,9 @@ std::shared_ptr<WorldList> MinecraftInstance::worldList() const
QList< Mod > MinecraftInstance::getJarMods() const
{
auto profile = m_components->getProfile();
QList<Mod> mods;
for (auto jarmod : m_profile->getJarMods())
for (auto jarmod : profile->getJarMods())
{
QStringList jar, temp1, temp2, temp3;
jarmod->getApplicableFiles(currentSystem, jar, temp1, temp2, temp3, jarmodsPath().absolutePath());