summaryrefslogtreecommitdiffstats
path: root/logic
diff options
context:
space:
mode:
authorSky <git@bunnies.cc>2013-11-03 23:53:31 +0000
committerSky <git@bunnies.cc>2013-11-03 23:53:31 +0000
commitdc3b0fcb2b74aeede37b08216b203cab284f7fce (patch)
treece4c2c3a2786bdbb9752c26d6feaab3735ba9bd6 /logic
parent406d8511bdc7b857a200b29e7d6e2fd81eda0f8e (diff)
parentd6e4fb29713d6ce55b092c0e22412f6121e7f516 (diff)
downloadMultiMC-dc3b0fcb2b74aeede37b08216b203cab284f7fce.tar
MultiMC-dc3b0fcb2b74aeede37b08216b203cab284f7fce.tar.gz
MultiMC-dc3b0fcb2b74aeede37b08216b203cab284f7fce.tar.lz
MultiMC-dc3b0fcb2b74aeede37b08216b203cab284f7fce.tar.xz
MultiMC-dc3b0fcb2b74aeede37b08216b203cab284f7fce.zip
Merge branch 'develop'
Diffstat (limited to 'logic')
-rw-r--r--logic/InstanceFactory.cpp118
-rw-r--r--logic/InstanceFactory.h38
-rw-r--r--logic/NagUtils.cpp37
-rw-r--r--logic/NagUtils.h23
-rw-r--r--logic/OneSixAssets.cpp1
-rw-r--r--logic/lists/InstanceList.cpp12
6 files changed, 172 insertions, 57 deletions
diff --git a/logic/InstanceFactory.cpp b/logic/InstanceFactory.cpp
index 0da62803..e64d22ca 100644
--- a/logic/InstanceFactory.cpp
+++ b/logic/InstanceFactory.cpp
@@ -3,7 +3,7 @@
* 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
@@ -34,30 +34,29 @@
InstanceFactory InstanceFactory::loader;
-InstanceFactory::InstanceFactory() :
- QObject(NULL)
+InstanceFactory::InstanceFactory() : QObject(NULL)
{
-
}
-InstanceFactory::InstLoadError InstanceFactory::loadInstance(BaseInstance *&inst, const QString &instDir)
+InstanceFactory::InstLoadError InstanceFactory::loadInstance(BaseInstance *&inst,
+ const QString &instDir)
{
auto m_settings = new INISettingsObject(PathCombine(instDir, "instance.cfg"));
-
+
m_settings->registerSetting(new Setting("InstanceType", "Legacy"));
-
+
QString inst_type = m_settings->get("InstanceType").toString();
-
- //FIXME: replace with a map lookup, where instance classes register their types
- if(inst_type == "Legacy")
+
+ // FIXME: replace with a map lookup, where instance classes register their types
+ if (inst_type == "Legacy")
{
inst = new LegacyInstance(instDir, m_settings, this);
}
- else if(inst_type == "OneSix")
+ else if (inst_type == "OneSix")
{
inst = new OneSixInstance(instDir, m_settings, this);
}
- else if(inst_type == "Nostalgia")
+ else if (inst_type == "Nostalgia")
{
inst = new NostalgiaInstance(instDir, m_settings, this);
}
@@ -68,50 +67,81 @@ InstanceFactory::InstLoadError InstanceFactory::loadInstance(BaseInstance *&inst
return NoLoadError;
}
-
-InstanceFactory::InstCreateError InstanceFactory::createInstance( BaseInstance*& inst, BaseVersionPtr version, const QString& instDir )
+InstanceFactory::InstCreateError InstanceFactory::createInstance(BaseInstance *&inst,
+ BaseVersionPtr version,
+ const QString &instDir)
{
QDir rootDir(instDir);
-
+
QLOG_DEBUG() << instDir.toUtf8();
if (!rootDir.exists() && !rootDir.mkpath("."))
{
return InstanceFactory::CantCreateDir;
}
auto mcVer = std::dynamic_pointer_cast<MinecraftVersion>(version);
- if(!mcVer)
+ if (!mcVer)
return InstanceFactory::NoSuchVersion;
-
+
auto m_settings = new INISettingsObject(PathCombine(instDir, "instance.cfg"));
m_settings->registerSetting(new Setting("InstanceType", "Legacy"));
-
- switch(mcVer->type)
+
+ switch (mcVer->type)
{
- case MinecraftVersion::Legacy:
- m_settings->set("InstanceType", "Legacy");
- inst = new LegacyInstance(instDir, m_settings, this);
- inst->setIntendedVersionId(version->descriptor());
- inst->setShouldUseCustomBaseJar(false);
- break;
- case MinecraftVersion::OneSix:
- m_settings->set("InstanceType", "OneSix");
- inst = new OneSixInstance(instDir, m_settings, this);
- inst->setIntendedVersionId(version->descriptor());
- inst->setShouldUseCustomBaseJar(false);
- break;
- case MinecraftVersion::Nostalgia:
- m_settings->set("InstanceType", "Nostalgia");
- inst = new NostalgiaInstance(instDir, m_settings, this);
- inst->setIntendedVersionId(version->descriptor());
- inst->setShouldUseCustomBaseJar(false);
- break;
- default:
- {
- delete m_settings;
- return InstanceFactory::NoSuchVersion;
- }
+ case MinecraftVersion::Legacy:
+ m_settings->set("InstanceType", "Legacy");
+ inst = new LegacyInstance(instDir, m_settings, this);
+ inst->setIntendedVersionId(version->descriptor());
+ inst->setShouldUseCustomBaseJar(false);
+ break;
+ case MinecraftVersion::OneSix:
+ m_settings->set("InstanceType", "OneSix");
+ inst = new OneSixInstance(instDir, m_settings, this);
+ inst->setIntendedVersionId(version->descriptor());
+ inst->setShouldUseCustomBaseJar(false);
+ break;
+ case MinecraftVersion::Nostalgia:
+ m_settings->set("InstanceType", "Nostalgia");
+ inst = new NostalgiaInstance(instDir, m_settings, this);
+ inst->setIntendedVersionId(version->descriptor());
+ inst->setShouldUseCustomBaseJar(false);
+ break;
+ default:
+ {
+ delete m_settings;
+ return InstanceFactory::NoSuchVersion;
+ }
}
-
- //FIXME: really, how do you even know?
+
+ // FIXME: really, how do you even know?
return InstanceFactory::NoCreateError;
}
+
+InstanceFactory::InstCreateError InstanceFactory::copyInstance(BaseInstance *&newInstance,
+ BaseInstance *&oldInstance,
+ const QString &instDir)
+{
+ QDir rootDir(instDir);
+
+ QLOG_DEBUG() << instDir.toUtf8();
+ if (!copyPath(oldInstance->instanceRoot(), instDir))
+ {
+ rootDir.removeRecursively();
+ return InstanceFactory::CantCreateDir;
+ }
+ auto error = loadInstance(newInstance, instDir);
+ switch(error)
+ {
+ case NoLoadError:
+ return NoCreateError;
+ case UnknownLoadError:
+ {
+ rootDir.removeRecursively();
+ return UnknownCreateError;
+ }
+ case NotAnInstance:
+ {
+ rootDir.removeRecursively();
+ return CantCreateDir;
+ }
+ };
+}
diff --git a/logic/InstanceFactory.h b/logic/InstanceFactory.h
index 1c527749..01e5af7e 100644
--- a/logic/InstanceFactory.h
+++ b/logic/InstanceFactory.h
@@ -3,7 +3,7 @@
* 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
@@ -34,15 +34,18 @@ public:
/*!
* \brief Gets a reference to the instance loader.
*/
- static InstanceFactory &get() { return loader; }
-
+ static InstanceFactory &get()
+ {
+ return loader;
+ }
+
enum InstLoadError
{
NoLoadError = 0,
UnknownLoadError,
NotAnInstance
};
-
+
enum InstCreateError
{
NoCreateError = 0,
@@ -51,18 +54,33 @@ public:
InstExists,
CantCreateDir
};
-
+
/*!
* \brief Creates a stub instance
*
* \param inst Pointer to store the created instance in.
- * \param instDir The instance's directory.
+ * \param inst Game version to use for the instance
+ * \param instDir The new instance's directory.
+ * \return An InstCreateError error code.
+ * - InstExists if the given instance directory is already an instance.
+ * - CantCreateDir if the given instance directory cannot be created.
+ */
+ InstCreateError createInstance(BaseInstance *&inst, BaseVersionPtr version,
+ const QString &instDir);
+
+ /*!
+ * \brief Creates a copy of an existing instance with a new name
+ *
+ * \param newInstance Pointer to store the created instance in.
+ * \param oldInstance The instance to copy
+ * \param instDir The new instance's directory.
* \return An InstCreateError error code.
* - InstExists if the given instance directory is already an instance.
* - CantCreateDir if the given instance directory cannot be created.
*/
- InstCreateError createInstance(BaseInstance *&inst, BaseVersionPtr version, const QString &instDir);
-
+ InstCreateError copyInstance(BaseInstance *&newInstance, BaseInstance *&oldInstance,
+ const QString &instDir);
+
/*!
* \brief Loads an instance from the given directory.
* Checks the instance's INI file to figure out what the instance's type is first.
@@ -72,9 +90,9 @@ public:
* - NotAnInstance if the given instance directory isn't a valid instance.
*/
InstLoadError loadInstance(BaseInstance *&inst, const QString &instDir);
-
+
private:
InstanceFactory();
-
+
static InstanceFactory loader;
};
diff --git a/logic/NagUtils.cpp b/logic/NagUtils.cpp
new file mode 100644
index 00000000..ccabf71f
--- /dev/null
+++ b/logic/NagUtils.cpp
@@ -0,0 +1,37 @@
+/* Copyright 2013 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 "NagUtils.h"
+#include "gui/CustomMessageBox.h"
+
+namespace NagUtils
+{
+void checkJVMArgs(QString jvmargs, QWidget *parent)
+{
+ if(jvmargs.contains("-XX:PermSize=") || jvmargs.contains(QRegExp("-Xm[sx]")))
+ {
+ CustomMessageBox::selectable(parent, parent->tr("JVM arguments warning"),
+ parent->tr("You tried to manually set a JVM memory option (using "
+ " \"-XX:PermSize\", \"-Xmx\" or \"-Xms\") - there"
+ " are dedicated boxes for these in the settings (Java"
+ " tab, in the Memory group at the top).\n"
+ "Your manual settings will be overridden by the"
+ " dedicated options.\n"
+ "This message will be displayed until you remove them"
+ " from the JVM arguments."),
+ QMessageBox::Warning)->exec();
+ }
+}
+}
diff --git a/logic/NagUtils.h b/logic/NagUtils.h
new file mode 100644
index 00000000..9564a2b1
--- /dev/null
+++ b/logic/NagUtils.h
@@ -0,0 +1,23 @@
+/* Copyright 2013 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.
+ */
+
+#pragma once
+
+#include <QWidget>
+
+namespace NagUtils
+{
+void checkJVMArgs(QString args, QWidget *parent);
+}
diff --git a/logic/OneSixAssets.cpp b/logic/OneSixAssets.cpp
index 375c87f1..500385ad 100644
--- a/logic/OneSixAssets.cpp
+++ b/logic/OneSixAssets.cpp
@@ -102,6 +102,7 @@ void OneSixAssets::start()
job->addNetAction(
S3ListBucket::make(QUrl("http://s3.amazonaws.com/Minecraft.Resources/")));
connect(job, SIGNAL(succeeded()), SLOT(S3BucketFinished()));
+ connect(job, SIGNAL(failed()), SIGNAL(failed()));
emit indexStarted();
index_job.reset(job);
job->start();
diff --git a/logic/lists/InstanceList.cpp b/logic/lists/InstanceList.cpp
index 08985a19..b42d7b7a 100644
--- a/logic/lists/InstanceList.cpp
+++ b/logic/lists/InstanceList.cpp
@@ -422,7 +422,13 @@ bool InstanceProxyModel::subSortLessThan(const QModelIndex &left,
{
BaseInstance *pdataLeft = static_cast<BaseInstance *>(left.internalPointer());
BaseInstance *pdataRight = static_cast<BaseInstance *>(right.internalPointer());
- // kDebug() << *pdataLeft << *pdataRight;
- return QString::localeAwareCompare(pdataLeft->name(), pdataRight->name()) < 0;
- // return pdataLeft->name() < pdataRight->name();
+ QString sortMode = MMC->settings()->get("InstSortMode").toString();
+ if(sortMode == "LastLaunch")
+ {
+ return pdataLeft->lastLaunch() > pdataRight->lastLaunch();
+ }
+ else
+ {
+ return QString::localeAwareCompare(pdataLeft->name(), pdataRight->name()) < 0;
+ }
}