summaryrefslogtreecommitdiff
path: root/src/instancemanager.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/instancemanager.h')
-rw-r--r--src/instancemanager.h66
1 files changed, 44 insertions, 22 deletions
diff --git a/src/instancemanager.h b/src/instancemanager.h
index c2d1e0f4..ddab4a2e 100644
--- a/src/instancemanager.h
+++ b/src/instancemanager.h
@@ -29,29 +29,61 @@ namespace MOBase { class IPluginGame; }
class Settings;
class PluginContainer;
+
+class Instance
+{
+public:
+ enum class SetupResults
+ {
+ Ok,
+ BadIni,
+ IniMissingGame,
+ PluginGone,
+ GameGone,
+ MissingVariant
+ };
+
+ Instance(QDir dir, bool portable, QString profileName={});
+
+ SetupResults setup(PluginContainer& plugins);
+
+ void setGame(const QString& name, const QString& dir);
+ void setVariant(const QString& name);
+
+ QString name() const;
+ QString gameName() const;
+ QString gameDirectory() const;
+ QDir directory() const;
+ MOBase::IPluginGame* gamePlugin() const;
+ QString profileName() const;
+ QString iniPath() const;
+ bool isPortable() const;
+
+private:
+ QDir m_dir;
+ bool m_portable;
+ QString m_gameName, m_gameDir, m_gameVariant;
+ MOBase::IPluginGame* m_plugin;
+ QString m_profile;
+
+ SetupResults getGamePlugin(PluginContainer& plugins);
+ void getProfile(const Settings& s);
+};
+
+
class InstanceManager
{
public:
static InstanceManager &instance();
- // restarts MO
- //
- void switchToInstance(const QString& instanceName);
-
void overrideInstance(const QString& instanceName);
void overrideProfile(const QString& profileName);
- QString determineDataPath();
- QString determineProfile(const Settings &settings);
- bool determineGameEdition(Settings& settings, MOBase::IPluginGame* game);
- MOBase::IPluginGame* determineCurrentGame(
- const QString& moPath, Settings& settings, const PluginContainer &plugins);
-
const MOBase::IPluginGame* gamePluginForDirectory(
const QDir& dir, const PluginContainer& plugins) const;
void clearCurrentInstance();
- QString currentInstance() const;
+ std::optional<Instance> currentInstance() const;
void setCurrentInstance(const QString &name);
bool allowedToChangeInstance() const;
@@ -68,23 +100,13 @@ public:
bool instanceExists(const QString& instanceName) const;
bool validInstanceName(const QString& instanceName) const;
QString instancePath(const QString& instanceName) const;
+ static QString iniPath(const QDir& instanceDir);
private:
-
InstanceManager();
-
- bool deleteLocalInstance(const QString &instanceId) const;
-
- QString manageInstances(const QStringList &instanceList) const;
-
- QString queryInstanceName(const QStringList &instanceList) const;
- QString chooseInstance(const QStringList &instanceList) const;
-
- void createDataPath(const QString &dataPath) const;
bool portableInstallIsLocked() const;
private:
- bool m_Reset {false};
bool m_overrideInstance{false};
QString m_overrideInstanceName;
bool m_overrideProfile{false};