Got instance loading working.
This commit is contained in:
parent
dd2e836b4c
commit
f3b6eeeac4
@ -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.
|
||||
|
@ -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)
|
||||
|
@ -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));
|
||||
|
@ -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"));
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user