Got instance loading working.

This commit is contained in:
Andrew 2013-02-20 19:45:00 -06:00
parent dd2e836b4c
commit f3b6eeeac4
6 changed files with 46 additions and 16 deletions

View File

@ -51,6 +51,7 @@ public:
* - InstExists is returned by createInstance() if the given instance directory is already an instance.
* - NotAnInstance is returned by loadInstance() if the given instance directory is not a valid instance.
* - WrongInstType is returned by loadInstance() if the given instance directory's type doesn't match the given type.
* - CantCreateDir is returned by createInstance( if the given instance directory can't be created.)
*/
enum InstTypeError
{
@ -62,7 +63,8 @@ public:
TypeNotRegistered,
InstExists,
NotAnInstance,
WrongInstType
WrongInstType,
CantCreateDir
};
/*!
@ -83,8 +85,9 @@ public:
* \return An InstTypeError error code.
* - TypeNotRegistered if the given type is not registered with the InstanceLoader.
* - InstExists if the given instance directory is already an instance.
* - CantCreateDir if the given instance directory cannot be created.
*/
InstTypeError createInstance(Instance *inst, const InstanceTypeInterface *type, const QString &instDir);
InstTypeError createInstance(Instance *&inst, const InstanceTypeInterface *type, const QString &instDir);
/*!
* \brief Loads an instance from the given directory.
@ -97,7 +100,7 @@ public:
* - NotAnInstance if the given instance directory isn't a valid instance.
* - WrongInstType if the given instance directory's type isn't the same as the given type.
*/
InstTypeError loadInstance(Instance *inst, const InstanceTypeInterface *type, const QString &instDir);
InstTypeError loadInstance(Instance *&inst, const InstanceTypeInterface *type, const QString &instDir);
/*!
* \brief Loads an instance from the given directory.
@ -108,7 +111,7 @@ public:
* - TypeNotRegistered if the instance's type is not registered with the InstanceLoader.
* - NotAnInstance if the given instance directory isn't a valid instance.
*/
InstTypeError loadInstance(Instance *inst, const QString &instDir);
InstTypeError loadInstance(Instance *&inst, const QString &instDir);
/*!
* \brief Finds an instance type with the given ID.

View File

@ -67,7 +67,7 @@ protected:
* TypeNotRegistered if the given type is not registered with the InstanceLoader.
* InstExists if the given instance directory is already an instance.
*/
virtual InstanceLoader::InstTypeError createInstance(Instance *inst, const QString &instDir) const = 0;
virtual InstanceLoader::InstTypeError createInstance(Instance *&inst, const QString &instDir) const = 0;
/*!
* \brief Loads an instance from the given directory.
@ -78,7 +78,7 @@ protected:
* NotAnInstance if the given instance directory isn't a valid instance.
* WrongInstType if the given instance directory's type isn't an instance of this type.
*/
virtual InstanceLoader::InstTypeError loadInstance(Instance *inst, const QString &instDir) const = 0;
virtual InstanceLoader::InstTypeError loadInstance(Instance *&inst, const QString &instDir) const = 0;
};
Q_DECLARE_INTERFACE(InstanceTypeInterface, InstanceTypeInterface_IID)

View File

@ -43,9 +43,10 @@ InstanceList::InstListError InstanceList::loadList()
QString subDir = iter.next();
if (QFileInfo(PathCombine(subDir, "instance.cfg")).exists())
{
QSharedPointer<Instance> 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<Instance> inst(instPtr);
qDebug(QString("Loaded instance %1").arg(inst->name()).toUtf8());
inst->setParent(this);
append(QSharedPointer<Instance>(inst));

View File

@ -49,7 +49,7 @@ InstanceLoader::InstTypeError InstanceLoader::registerInstanceType(InstanceTypeI
return NoError;
}
InstanceLoader::InstTypeError InstanceLoader::createInstance(Instance *inst,
InstanceLoader::InstTypeError InstanceLoader::createInstance(Instance *&inst,
const InstanceTypeInterface *type,
const QString &instDir)
{
@ -61,7 +61,7 @@ InstanceLoader::InstTypeError InstanceLoader::createInstance(Instance *inst,
return type->createInstance(inst, instDir);
}
InstanceLoader::InstTypeError InstanceLoader::loadInstance(Instance *inst,
InstanceLoader::InstTypeError InstanceLoader::loadInstance(Instance *&inst,
const InstanceTypeInterface *type,
const QString &instDir)
{
@ -72,7 +72,7 @@ InstanceLoader::InstTypeError InstanceLoader::loadInstance(Instance *inst,
return type->loadInstance(inst, instDir);
}
InstanceLoader::InstTypeError InstanceLoader::loadInstance(Instance *inst,
InstanceLoader::InstTypeError InstanceLoader::loadInstance(Instance *&inst,
const QString &instDir)
{
QFileInfo instConfig(PathCombine(instDir, "instance.cfg"));

View File

@ -15,20 +15,44 @@
#include "stdinstancetype.h"
#include <QDir>
#include <QFileInfo>
#include "stdinstance.h"
StdInstanceType::StdInstanceType(QObject *parent) :
QObject(parent)
{
}
InstanceLoader::InstTypeError StdInstanceType::createInstance(Instance *inst,
InstanceLoader::InstTypeError StdInstanceType::createInstance(Instance *&inst,
const QString &instDir) const
{
QFileInfo rootDir(instDir);
if (!rootDir.exists() && !QDir().mkdir(rootDir.path()))
{
return InstanceLoader::CantCreateDir;
}
StdInstance *stdInst = new StdInstance(instDir);
// TODO: Verify that the instance is valid.
inst = stdInst;
return InstanceLoader::NoError;
}
InstanceLoader::InstTypeError StdInstanceType::loadInstance(Instance *inst,
InstanceLoader::InstTypeError StdInstanceType::loadInstance(Instance *&inst,
const QString &instDir) const
{
StdInstance *stdInst = new StdInstance(instDir);
// TODO: Verify that the instance is valid.
inst = stdInst;
return InstanceLoader::NoError;
}

View File

@ -34,9 +34,9 @@ public:
virtual QString description() const { return "A standard Minecraft instance."; }
virtual InstanceLoader::InstTypeError createInstance(Instance *inst, const QString &instDir) const;
virtual InstanceLoader::InstTypeError createInstance(Instance *&inst, const QString &instDir) const;
virtual InstanceLoader::InstTypeError loadInstance(Instance *inst, const QString &instDir) const;
virtual InstanceLoader::InstTypeError loadInstance(Instance *&inst, const QString &instDir) const;
};
#endif // STDINSTANCETYPE_H