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.
|
* - 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.
|
* - 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.
|
* - 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
|
enum InstTypeError
|
||||||
{
|
{
|
||||||
@ -62,7 +63,8 @@ public:
|
|||||||
TypeNotRegistered,
|
TypeNotRegistered,
|
||||||
InstExists,
|
InstExists,
|
||||||
NotAnInstance,
|
NotAnInstance,
|
||||||
WrongInstType
|
WrongInstType,
|
||||||
|
CantCreateDir
|
||||||
};
|
};
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
@ -83,8 +85,9 @@ public:
|
|||||||
* \return An InstTypeError error code.
|
* \return An InstTypeError error code.
|
||||||
* - TypeNotRegistered if the given type is not registered with the InstanceLoader.
|
* - TypeNotRegistered if the given type is not registered with the InstanceLoader.
|
||||||
* - InstExists if the given instance directory is already an instance.
|
* - 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.
|
* \brief Loads an instance from the given directory.
|
||||||
@ -97,7 +100,7 @@ public:
|
|||||||
* - NotAnInstance if the given instance directory isn't a valid instance.
|
* - 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.
|
* - 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.
|
* \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.
|
* - TypeNotRegistered if the instance's type is not registered with the InstanceLoader.
|
||||||
* - NotAnInstance if the given instance directory isn't a valid instance.
|
* - 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.
|
* \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.
|
* TypeNotRegistered if the given type is not registered with the InstanceLoader.
|
||||||
* InstExists if the given instance directory is already an instance.
|
* 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.
|
* \brief Loads an instance from the given directory.
|
||||||
@ -78,7 +78,7 @@ protected:
|
|||||||
* NotAnInstance if the given instance directory isn't a valid instance.
|
* 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.
|
* 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)
|
Q_DECLARE_INTERFACE(InstanceTypeInterface, InstanceTypeInterface_IID)
|
||||||
|
@ -43,9 +43,10 @@ InstanceList::InstListError InstanceList::loadList()
|
|||||||
QString subDir = iter.next();
|
QString subDir = iter.next();
|
||||||
if (QFileInfo(PathCombine(subDir, "instance.cfg")).exists())
|
if (QFileInfo(PathCombine(subDir, "instance.cfg")).exists())
|
||||||
{
|
{
|
||||||
QSharedPointer<Instance> inst;
|
Instance *instPtr = NULL;
|
||||||
|
|
||||||
InstanceLoader::InstTypeError error = InstanceLoader::get().
|
InstanceLoader::InstTypeError error = InstanceLoader::get().
|
||||||
loadInstance(inst.data(), subDir);
|
loadInstance(instPtr, subDir);
|
||||||
|
|
||||||
if (error != InstanceLoader::NoError &&
|
if (error != InstanceLoader::NoError &&
|
||||||
error != InstanceLoader::NotAnInstance)
|
error != InstanceLoader::NotAnInstance)
|
||||||
@ -66,13 +67,15 @@ InstanceList::InstListError InstanceList::loadList()
|
|||||||
}
|
}
|
||||||
qDebug(errorMsg.toUtf8());
|
qDebug(errorMsg.toUtf8());
|
||||||
}
|
}
|
||||||
else if (!inst.data())
|
else if (!instPtr)
|
||||||
{
|
{
|
||||||
qDebug(QString("Error loading instance %1. Instance loader returned null.").
|
qDebug(QString("Error loading instance %1. Instance loader returned null.").
|
||||||
arg(QFileInfo(subDir).baseName()).toUtf8());
|
arg(QFileInfo(subDir).baseName()).toUtf8());
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
QSharedPointer<Instance> inst(instPtr);
|
||||||
|
|
||||||
qDebug(QString("Loaded instance %1").arg(inst->name()).toUtf8());
|
qDebug(QString("Loaded instance %1").arg(inst->name()).toUtf8());
|
||||||
inst->setParent(this);
|
inst->setParent(this);
|
||||||
append(QSharedPointer<Instance>(inst));
|
append(QSharedPointer<Instance>(inst));
|
||||||
|
@ -49,7 +49,7 @@ InstanceLoader::InstTypeError InstanceLoader::registerInstanceType(InstanceTypeI
|
|||||||
return NoError;
|
return NoError;
|
||||||
}
|
}
|
||||||
|
|
||||||
InstanceLoader::InstTypeError InstanceLoader::createInstance(Instance *inst,
|
InstanceLoader::InstTypeError InstanceLoader::createInstance(Instance *&inst,
|
||||||
const InstanceTypeInterface *type,
|
const InstanceTypeInterface *type,
|
||||||
const QString &instDir)
|
const QString &instDir)
|
||||||
{
|
{
|
||||||
@ -61,7 +61,7 @@ InstanceLoader::InstTypeError InstanceLoader::createInstance(Instance *inst,
|
|||||||
return type->createInstance(inst, instDir);
|
return type->createInstance(inst, instDir);
|
||||||
}
|
}
|
||||||
|
|
||||||
InstanceLoader::InstTypeError InstanceLoader::loadInstance(Instance *inst,
|
InstanceLoader::InstTypeError InstanceLoader::loadInstance(Instance *&inst,
|
||||||
const InstanceTypeInterface *type,
|
const InstanceTypeInterface *type,
|
||||||
const QString &instDir)
|
const QString &instDir)
|
||||||
{
|
{
|
||||||
@ -72,7 +72,7 @@ InstanceLoader::InstTypeError InstanceLoader::loadInstance(Instance *inst,
|
|||||||
return type->loadInstance(inst, instDir);
|
return type->loadInstance(inst, instDir);
|
||||||
}
|
}
|
||||||
|
|
||||||
InstanceLoader::InstTypeError InstanceLoader::loadInstance(Instance *inst,
|
InstanceLoader::InstTypeError InstanceLoader::loadInstance(Instance *&inst,
|
||||||
const QString &instDir)
|
const QString &instDir)
|
||||||
{
|
{
|
||||||
QFileInfo instConfig(PathCombine(instDir, "instance.cfg"));
|
QFileInfo instConfig(PathCombine(instDir, "instance.cfg"));
|
||||||
|
@ -15,20 +15,44 @@
|
|||||||
|
|
||||||
#include "stdinstancetype.h"
|
#include "stdinstancetype.h"
|
||||||
|
|
||||||
|
#include <QDir>
|
||||||
|
#include <QFileInfo>
|
||||||
|
|
||||||
|
#include "stdinstance.h"
|
||||||
|
|
||||||
StdInstanceType::StdInstanceType(QObject *parent) :
|
StdInstanceType::StdInstanceType(QObject *parent) :
|
||||||
QObject(parent)
|
QObject(parent)
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
InstanceLoader::InstTypeError StdInstanceType::createInstance(Instance *inst,
|
InstanceLoader::InstTypeError StdInstanceType::createInstance(Instance *&inst,
|
||||||
const QString &instDir) const
|
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;
|
return InstanceLoader::NoError;
|
||||||
}
|
}
|
||||||
|
|
||||||
InstanceLoader::InstTypeError StdInstanceType::loadInstance(Instance *inst,
|
InstanceLoader::InstTypeError StdInstanceType::loadInstance(Instance *&inst,
|
||||||
const QString &instDir) const
|
const QString &instDir) const
|
||||||
{
|
{
|
||||||
|
StdInstance *stdInst = new StdInstance(instDir);
|
||||||
|
|
||||||
|
// TODO: Verify that the instance is valid.
|
||||||
|
|
||||||
|
inst = stdInst;
|
||||||
|
|
||||||
return InstanceLoader::NoError;
|
return InstanceLoader::NoError;
|
||||||
}
|
}
|
||||||
|
@ -34,9 +34,9 @@ public:
|
|||||||
|
|
||||||
virtual QString description() const { return "A standard Minecraft instance."; }
|
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
|
#endif // STDINSTANCETYPE_H
|
||||||
|
Loading…
x
Reference in New Issue
Block a user