From dd2e836b4cf4cfa043f9ea2911f58f1d22d4e282 Mon Sep 17 00:00:00 2001 From: Andrew Date: Wed, 20 Feb 2013 19:10:09 -0600 Subject: Split MultiMC up into a few separate libraries. Fixed plugin system. Tons of other stuff... --- libinstance/src/instancelist.cpp | 84 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 libinstance/src/instancelist.cpp (limited to 'libinstance/src/instancelist.cpp') diff --git a/libinstance/src/instancelist.cpp b/libinstance/src/instancelist.cpp new file mode 100644 index 00000000..15f79d05 --- /dev/null +++ b/libinstance/src/instancelist.cpp @@ -0,0 +1,84 @@ +/* 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 "include/instancelist.h" + +#include "siglist_impl.h" + +#include +#include +#include + +#include "include/instance.h" +#include "include/instanceloader.h" + +#include "pathutils.h" + + +InstanceList::InstanceList(const QString &instDir, QObject *parent) : + QObject(parent), m_instDir(instDir) +{ + +} + +InstanceList::InstListError InstanceList::loadList() +{ + QDir dir(m_instDir); + QDirIterator iter(dir); + + while (iter.hasNext()) + { + QString subDir = iter.next(); + if (QFileInfo(PathCombine(subDir, "instance.cfg")).exists()) + { + QSharedPointer inst; + InstanceLoader::InstTypeError error = InstanceLoader::get(). + loadInstance(inst.data(), subDir); + + if (error != InstanceLoader::NoError && + error != InstanceLoader::NotAnInstance) + { + QString errorMsg = QString("Failed to load instance %1: "). + arg(QFileInfo(subDir).baseName()).toUtf8(); + + switch (error) + { + case InstanceLoader::TypeNotRegistered: + errorMsg += "Instance type not found."; + break; + + default: + errorMsg += QString("Unknown instance loader error %1"). + arg(error); + break; + } + qDebug(errorMsg.toUtf8()); + } + else if (!inst.data()) + { + qDebug(QString("Error loading instance %1. Instance loader returned null."). + arg(QFileInfo(subDir).baseName()).toUtf8()); + } + else + { + qDebug(QString("Loaded instance %1").arg(inst->name()).toUtf8()); + inst->setParent(this); + append(QSharedPointer(inst)); + } + } + } + + return NoError; +} -- cgit v1.2.3 From f3b6eeeac4e1606a288c7f12fec271fbb7f120f6 Mon Sep 17 00:00:00 2001 From: Andrew Date: Wed, 20 Feb 2013 19:45:00 -0600 Subject: Got instance loading working. --- libinstance/src/instancelist.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) (limited to 'libinstance/src/instancelist.cpp') diff --git a/libinstance/src/instancelist.cpp b/libinstance/src/instancelist.cpp index 15f79d05..3b0b668f 100644 --- a/libinstance/src/instancelist.cpp +++ b/libinstance/src/instancelist.cpp @@ -43,9 +43,10 @@ InstanceList::InstListError InstanceList::loadList() QString subDir = iter.next(); if (QFileInfo(PathCombine(subDir, "instance.cfg")).exists()) { - QSharedPointer inst; + Instance *instPtr = NULL; + InstanceLoader::InstTypeError error = InstanceLoader::get(). - loadInstance(inst.data(), subDir); + loadInstance(instPtr, subDir); if (error != InstanceLoader::NoError && error != InstanceLoader::NotAnInstance) @@ -66,13 +67,15 @@ InstanceList::InstListError InstanceList::loadList() } qDebug(errorMsg.toUtf8()); } - else if (!inst.data()) + else if (!instPtr) { qDebug(QString("Error loading instance %1. Instance loader returned null."). arg(QFileInfo(subDir).baseName()).toUtf8()); } else { + QSharedPointer inst(instPtr); + qDebug(QString("Loaded instance %1").arg(inst->name()).toUtf8()); inst->setParent(this); append(QSharedPointer(inst)); -- cgit v1.2.3