From 47e37635f50c09b4f9a9ee7699e3120bab3e4088 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20Mr=C3=A1zek?= Date: Sun, 10 Apr 2016 04:29:29 +0200 Subject: NOISSUE split GUI stuff from logic library --- libraries/logic/BaseInstance.cpp | 270 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 270 insertions(+) create mode 100644 libraries/logic/BaseInstance.cpp (limited to 'libraries/logic/BaseInstance.cpp') diff --git a/libraries/logic/BaseInstance.cpp b/libraries/logic/BaseInstance.cpp new file mode 100644 index 00000000..ce55d5e4 --- /dev/null +++ b/libraries/logic/BaseInstance.cpp @@ -0,0 +1,270 @@ +/* Copyright 2013-2015 MultiMC Contributors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "BaseInstance.h" + +#include +#include + +#include "settings/INISettingsObject.h" +#include "settings/Setting.h" +#include "settings/OverrideSetting.h" + +#include "minecraft/MinecraftVersionList.h" +#include "FileSystem.h" +#include "Commandline.h" + +BaseInstance::BaseInstance(SettingsObjectPtr globalSettings, SettingsObjectPtr settings, const QString &rootDir) + : QObject() +{ + m_settings = settings; + m_rootDir = rootDir; + + m_settings->registerSetting("name", "Unnamed Instance"); + m_settings->registerSetting("iconKey", "default"); + m_settings->registerSetting("notes", ""); + m_settings->registerSetting("lastLaunchTime", 0); + m_settings->registerSetting("totalTimePlayed", 0); + + // Custom Commands + auto commandSetting = m_settings->registerSetting({"OverrideCommands","OverrideLaunchCmd"}, false); + m_settings->registerOverride(globalSettings->getSetting("PreLaunchCommand"), commandSetting); + m_settings->registerOverride(globalSettings->getSetting("WrapperCommand"), commandSetting); + m_settings->registerOverride(globalSettings->getSetting("PostExitCommand"), commandSetting); + + // Console + auto consoleSetting = m_settings->registerSetting("OverrideConsole", false); + m_settings->registerOverride(globalSettings->getSetting("ShowConsole"), consoleSetting); + m_settings->registerOverride(globalSettings->getSetting("AutoCloseConsole"), consoleSetting); + m_settings->registerOverride(globalSettings->getSetting("LogPrePostOutput"), consoleSetting); +} + +QString BaseInstance::getPreLaunchCommand() +{ + return settings()->get("PreLaunchCommand").toString(); +} + +QString BaseInstance::getWrapperCommand() +{ + return settings()->get("WrapperCommand").toString(); +} + +QString BaseInstance::getPostExitCommand() +{ + return settings()->get("PostExitCommand").toString(); +} + +void BaseInstance::iconUpdated(QString key) +{ + if(iconKey() == key) + { + emit propertiesChanged(this); + } +} + +void BaseInstance::nuke() +{ + FS::deletePath(instanceRoot()); + emit nuked(this); +} + +QString BaseInstance::id() const +{ + return QFileInfo(instanceRoot()).fileName(); +} + +bool BaseInstance::isRunning() const +{ + return m_isRunning; +} + +void BaseInstance::setRunning(bool running) +{ + if(running && !m_isRunning) + { + m_timeStarted = QDateTime::currentDateTime(); + } + else if(!running && m_isRunning) + { + qint64 current = settings()->get("totalTimePlayed").toLongLong(); + QDateTime timeEnded = QDateTime::currentDateTime(); + settings()->set("totalTimePlayed", current + m_timeStarted.secsTo(timeEnded)); + emit propertiesChanged(this); + } + m_isRunning = running; +} + +int64_t BaseInstance::totalTimePlayed() const +{ + qint64 current = settings()->get("totalTimePlayed").toLongLong(); + if(m_isRunning) + { + QDateTime timeNow = QDateTime::currentDateTime(); + return current + m_timeStarted.secsTo(timeNow); + } + return current; +} + +void BaseInstance::resetTimePlayed() +{ + settings()->reset("totalTimePlayed"); +} + +QString BaseInstance::instanceType() const +{ + return m_settings->get("InstanceType").toString(); +} + +QString BaseInstance::instanceRoot() const +{ + return m_rootDir; +} + +InstancePtr BaseInstance::getSharedPtr() +{ + return shared_from_this(); +} + +SettingsObjectPtr BaseInstance::settings() const +{ + return m_settings; +} + +BaseInstance::InstanceFlags BaseInstance::flags() const +{ + return m_flags; +} + +void BaseInstance::setFlags(const InstanceFlags &flags) +{ + if (flags != m_flags) + { + m_flags = flags; + emit flagsChanged(); + emit propertiesChanged(this); + } +} + +void BaseInstance::setFlag(const BaseInstance::InstanceFlag flag) +{ + // nothing to set? + if(flag & m_flags) + return; + m_flags |= flag; + emit flagsChanged(); + emit propertiesChanged(this); +} + +void BaseInstance::unsetFlag(const BaseInstance::InstanceFlag flag) +{ + // nothing to unset? + if(!(flag & m_flags)) + return; + m_flags &= ~flag; + emit flagsChanged(); + emit propertiesChanged(this); +} + +bool BaseInstance::canLaunch() const +{ + return !(flags() & VersionBrokenFlag); +} + +bool BaseInstance::reload() +{ + return m_settings->reload(); +} + +qint64 BaseInstance::lastLaunch() const +{ + return m_settings->get("lastLaunchTime").value(); +} + +void BaseInstance::setLastLaunch(qint64 val) +{ + //FIXME: if no change, do not set. setting involves saving a file. + m_settings->set("lastLaunchTime", val); + emit propertiesChanged(this); +} + +void BaseInstance::setGroupInitial(QString val) +{ + if(m_group == val) + { + return; + } + m_group = val; + emit propertiesChanged(this); +} + +void BaseInstance::setGroupPost(QString val) +{ + if(m_group == val) + { + return; + } + setGroupInitial(val); + emit groupChanged(); +} + +QString BaseInstance::group() const +{ + return m_group; +} + +void BaseInstance::setNotes(QString val) +{ + //FIXME: if no change, do not set. setting involves saving a file. + m_settings->set("notes", val); +} + +QString BaseInstance::notes() const +{ + return m_settings->get("notes").toString(); +} + +void BaseInstance::setIconKey(QString val) +{ + //FIXME: if no change, do not set. setting involves saving a file. + m_settings->set("iconKey", val); + emit propertiesChanged(this); +} + +QString BaseInstance::iconKey() const +{ + return m_settings->get("iconKey").toString(); +} + +void BaseInstance::setName(QString val) +{ + //FIXME: if no change, do not set. setting involves saving a file. + m_settings->set("name", val); + emit propertiesChanged(this); +} + +QString BaseInstance::name() const +{ + return m_settings->get("name").toString(); +} + +QString BaseInstance::windowTitle() const +{ + return "MultiMC: " + name(); +} + +QStringList BaseInstance::extraArguments() const +{ + return Commandline::splitArgs(settings()->get("JvmArgs").toString()); +} -- cgit v1.2.3