diff options
author | Andrew <forkk@forkk.net> | 2013-02-19 12:15:22 -0600 |
---|---|---|
committer | Andrew <forkk@forkk.net> | 2013-02-19 12:15:22 -0600 |
commit | 6e5017e48b633e20bbba61ac2e7cd58e693aec4e (patch) | |
tree | f0027822d84123951fa56ffbb7591b33f297e11b /data/inst | |
parent | 80cd8b33aa12933392bd2293a5e91ae696dbe6be (diff) | |
download | PrismLauncher-6e5017e48b633e20bbba61ac2e7cd58e693aec4e.tar.gz PrismLauncher-6e5017e48b633e20bbba61ac2e7cd58e693aec4e.tar.bz2 PrismLauncher-6e5017e48b633e20bbba61ac2e7cd58e693aec4e.zip |
Implemented loadList() stuff.
Diffstat (limited to 'data/inst')
-rw-r--r-- | data/inst/instance.h | 27 | ||||
-rw-r--r-- | data/inst/instancelist.cpp | 59 | ||||
-rw-r--r-- | data/inst/instancelist.h | 26 | ||||
-rw-r--r-- | data/inst/instanceloader.cpp | 24 | ||||
-rw-r--r-- | data/inst/instanceloader.h | 54 |
5 files changed, 138 insertions, 52 deletions
diff --git a/data/inst/instance.h b/data/inst/instance.h index 1b282b03..56e9d0b8 100644 --- a/data/inst/instance.h +++ b/data/inst/instance.h @@ -79,23 +79,6 @@ public: virtual InstanceList *instList(); - /*! - * \brief Gets this instance's group. - * This function is used by the instance grouping system and should - * not be touched by classes deriving from Instance. - * \return The instance's group name. - * \sa setGroup() - */ - QString group() const { return m_group; } - - /*! - * \brief Sets the instance's group. - * \param group The instance's new group name. - * \sa group() - */ - void setGroup(const QString &group) { m_group = group; emit groupChanged(this, group); } - - //////// FIELDS AND SETTINGS //////// // Fields are options stored in the instance's config file that are specific // to instances (not a part of SettingsBase). Settings are things overridden @@ -278,14 +261,6 @@ public: */ virtual void updateCurrentVersion(bool keepCurrent = false) = 0; -signals: - /*! - * \brief Signal emitted when the instance's group changes. - * \param inst Pointer to the instance whose group changed. - * \param newGroup The instance's new group. - */ - void groupChanged(Instance *inst, QString newGroup); - protected: /*! * \brief Gets the value of the given field in the instance's config file. @@ -314,8 +289,6 @@ protected: INIFile config; private: - QString m_group; - QString m_rootDir; }; diff --git a/data/inst/instancelist.cpp b/data/inst/instancelist.cpp index 62367ed6..cbb89f05 100644 --- a/data/inst/instancelist.cpp +++ b/data/inst/instancelist.cpp @@ -17,7 +17,62 @@ #include "data/siglist_impl.h" -InstanceList::InstanceList(QObject *parent) : - QObject(parent) +#include <QDir> +#include <QFile> +#include <QDirIterator> + +#include "instance.h" +#include "instanceloader.h" + +#include "util/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<Instance> inst; + InstanceLoader::InstTypeError error = InstanceLoader::loader. + loadInstance(inst.data(), subDir); + + if (inst.data() && error == InstanceLoader::NoError) + { + qDebug(QString("Loaded instance %1").arg(inst->name()).toUtf8()); + inst->setParent(this); + append(QSharedPointer<Instance>(inst)); + } + else if (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; + } + qDebug(errorMsg.toUtf8()); + } + else if (!inst.data()) + { + qDebug(QString("Error loading instance %1. Instance loader returned null."). + arg(QFileInfo(subDir).baseName()).toUtf8()); + } + } + } + + return NoError; } diff --git a/data/inst/instancelist.h b/data/inst/instancelist.h index 72dec5f0..c43c4cc0 100644 --- a/data/inst/instancelist.h +++ b/data/inst/instancelist.h @@ -24,16 +24,34 @@ class Instance; -class InstanceList : public QObject, SigList<QSharedPointer<Instance>> +class InstanceList : public QObject, public SigList<QSharedPointer<Instance>> { Q_OBJECT public: - explicit InstanceList(QObject *parent = 0); + explicit InstanceList(const QString &instDir, QObject *parent = 0); -signals: + /*! + * \brief Error codes returned by functions in the InstanceList class. + * NoError Indicates that no error occurred. + * UnknownError indicates that an unspecified error occurred. + */ + enum InstListError + { + NoError = 0, + UnknownError + }; -public slots: + QString instDir() const { return m_instDir; } + /*! + * \brief Loads the instance list. + */ + InstListError loadList(); + + DEFINE_SIGLIST_SIGNALS(QSharedPointer<Instance>); + SETUP_SIGLIST_SIGNALS(QSharedPointer<Instance>); +protected: + QString m_instDir; }; #endif // INSTANCELIST_H diff --git a/data/inst/instanceloader.cpp b/data/inst/instanceloader.cpp index 1a53bfa7..e80a0e9e 100644 --- a/data/inst/instanceloader.cpp +++ b/data/inst/instanceloader.cpp @@ -15,8 +15,16 @@ #include "instanceloader.h" +#include <QFileInfo> + #include "instancetype.h" +#include "data/inifile.h" + +#include "util/pathutils.h" + +InstanceLoader InstanceLoader::loader; + InstanceLoader::InstanceLoader() : QObject(NULL) { @@ -61,6 +69,22 @@ InstanceLoader::InstTypeError InstanceLoader::loadInstance(Instance *inst, return type->loadInstance(inst, instDir); } +InstanceLoader::InstTypeError InstanceLoader::loadInstance(Instance *inst, + const QString &instDir) +{ + QFileInfo instConfig(PathCombine(instDir, "instance.cfg")); + + if (!instConfig.exists()) + return NotAnInstance; + + INIFile ini; + ini.loadFile(instConfig.path()); + QString typeName = ini.get("type", "StdInstance").toString(); + const InstanceType *type = findType(typeName); + + return loadInstance(inst, type, instDir); +} + const InstanceType *InstanceLoader::findType(const QString &id) { if (!m_typeMap.contains(id)) diff --git a/data/inst/instanceloader.h b/data/inst/instanceloader.h index b7092edc..60c4e998 100644 --- a/data/inst/instanceloader.h +++ b/data/inst/instanceloader.h @@ -34,18 +34,18 @@ class InstanceLoader : public QObject { Q_OBJECT public: - static InstanceLoader instLoader; + static InstanceLoader loader; /*! * \brief Error codes returned by functions in the InstanceLoader and InstanceType classes. - * NoError indicates that no error occurred. - * OtherError indicates that an unspecified error occurred. - * TypeIDExists is returned by registerInstanceType() if the ID of the type being registered already exists. - * - * TypeNotRegistered is returned by createInstance() and loadInstance() when the given type is not registered. - * 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. + * + * - NoError indicates that no error occurred. + * - OtherError indicates that an unspecified error occurred. + * - TypeIDExists is returned by registerInstanceType() if the ID of the type being registered already exists. + * - TypeNotRegistered is returned by createInstance() and loadInstance() when the given type is not registered. + * - 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. */ enum InstTypeError { @@ -62,41 +62,56 @@ public: /*! * \brief Registers the given InstanceType with the instance loader. - * This causes the instance loader to take ownership of the given - * instance type (meaning the instance type's parent will be set to - * the instance loader). + * This causes the instance loader to take ownership of the given + * instance type (meaning the instance type's parent will be set to + * the instance loader). + * * \param type The InstanceType to register. * \return An InstTypeError error code. - * TypeIDExists if the given type's is already registered to another instance type. + * - TypeIDExists if the given type's is already registered to another instance type. */ InstTypeError registerInstanceType(InstanceType *type); /*! * \brief Creates an instance with the given type and stores it in inst. + * * \param inst Pointer to store the created instance in. * \param type The type of instance to create. * \param instDir The instance's directory. * \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. + * - TypeNotRegistered if the given type is not registered with the InstanceLoader. + * - InstExists if the given instance directory is already an instance. */ InstTypeError createInstance(Instance *inst, const InstanceType *type, const QString &instDir); /*! * \brief Loads an instance from the given directory. + * * \param inst Pointer to store the loaded instance in. * \param type The type of instance to load. * \param instDir The instance's directory. * \return An InstTypeError error code. - * TypeNotRegistered if the given type is not registered with the InstanceLoader. - * 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. + * - TypeNotRegistered if the given type is not registered with the InstanceLoader. + * - 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 InstanceType *type, 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. + * \param inst Pointer to store the loaded instance in. + * \param instDir The instance's directory. + * \return An InstTypeError error code. + * - 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); + + /*! * \brief Finds an instance type with the given ID. - * If one cannot be found, returns NULL. + * If one cannot be found, returns NULL. + * * \param id The ID of the type to find. * \return The type with the given ID. NULL if none were found. */ @@ -104,6 +119,7 @@ public: /*! * \brief Gets a list of the registered instance types. + * * \return A list of instance types. */ InstTypeList typeList(); |