From 95e6f37d3942d4ab681e2f2484f17bbf8489c332 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20Mr=C3=A1zek?= Date: Sun, 3 Dec 2017 18:36:28 +0100 Subject: NOISSUE force saving of any outstanding instance component state on exit --- api/logic/minecraft/ComponentList.cpp | 24 +++++++++++++----------- api/logic/minecraft/ComponentList.h | 6 +++++- api/logic/minecraft/MinecraftInstance.cpp | 5 +++++ api/logic/minecraft/MinecraftInstance.h | 1 + api/logic/minecraft/legacy/LegacyInstance.h | 3 ++- 5 files changed, 26 insertions(+), 13 deletions(-) (limited to 'api/logic/minecraft') diff --git a/api/logic/minecraft/ComponentList.cpp b/api/logic/minecraft/ComponentList.cpp index 93deef39..6547a851 100644 --- a/api/logic/minecraft/ComponentList.cpp +++ b/api/logic/minecraft/ComponentList.cpp @@ -43,16 +43,12 @@ ComponentList::ComponentList(MinecraftInstance * instance) d->m_instance = instance; d->m_saveTimer.setSingleShot(true); d->m_saveTimer.setInterval(5000); - connect(&d->m_saveTimer, &QTimer::timeout, this, &ComponentList::save); + connect(&d->m_saveTimer, &QTimer::timeout, this, &ComponentList::save_internal); } ComponentList::~ComponentList() { - if(saveIsScheduled()) - { - d->m_saveTimer.stop(); - save(); - } + saveNow(); } // BEGIN: component file format @@ -212,6 +208,15 @@ static bool loadComponentList(ComponentList * parent, const QString & filename, // BEGIN: save/load logic +void ComponentList::saveNow() +{ + if(saveIsScheduled()) + { + d->m_saveTimer.stop(); + save_internal(); + } +} + bool ComponentList::saveIsScheduled() const { return d->dirty; @@ -253,7 +258,7 @@ QString ComponentList::patchFilePathForUid(const QString& uid) const return patchesPattern().arg(uid); } -void ComponentList::save() +void ComponentList::save_internal() { qDebug() << "Component list save performed now for" << d->m_instance->name(); auto filename = componentsFilePath(); @@ -321,10 +326,7 @@ void ComponentList::reload(Net::Mode netmode) } // flush any scheduled saves to not lose state - if(saveIsScheduled()) - { - save(); - } + saveNow(); // FIXME: differentiate when a reapply is required by propagating state from components invalidateLaunchProfile(); diff --git a/api/logic/minecraft/ComponentList.h b/api/logic/minecraft/ComponentList.h index 9cce111b..8e89d640 100644 --- a/api/logic/minecraft/ComponentList.h +++ b/api/logic/minecraft/ComponentList.h @@ -104,6 +104,10 @@ public: bool setComponentVersion(const QString &uid, const QString &version, bool important = false); QString patchFilePathForUid(const QString &uid) const; + + /// if there is a save scheduled, do it now. + void saveNow(); + public: /// get the profile component by id ComponentPtr getComponent(const QString &id); @@ -127,7 +131,7 @@ private: QString patchesPattern() const; private slots: - void save(); + void save_internal(); void updateSucceeded(); void updateFailed(const QString & error); void componentDataChanged(); diff --git a/api/logic/minecraft/MinecraftInstance.cpp b/api/logic/minecraft/MinecraftInstance.cpp index b7deed77..7a0ff6bf 100644 --- a/api/logic/minecraft/MinecraftInstance.cpp +++ b/api/logic/minecraft/MinecraftInstance.cpp @@ -115,6 +115,11 @@ void MinecraftInstance::init() { } +void MinecraftInstance::saveNow() +{ + m_components->saveNow(); +} + QString MinecraftInstance::typeName() const { return "Minecraft"; diff --git a/api/logic/minecraft/MinecraftInstance.h b/api/logic/minecraft/MinecraftInstance.h index 13a3753e..446a39d5 100644 --- a/api/logic/minecraft/MinecraftInstance.h +++ b/api/logic/minecraft/MinecraftInstance.h @@ -18,6 +18,7 @@ public: MinecraftInstance(SettingsObjectPtr globalSettings, SettingsObjectPtr settings, const QString &rootDir); virtual ~MinecraftInstance() {}; virtual void init() override; + virtual void saveNow(); // FIXME: remove QString typeName() const override; diff --git a/api/logic/minecraft/legacy/LegacyInstance.h b/api/logic/minecraft/legacy/LegacyInstance.h index ef590cae..7ff905e7 100644 --- a/api/logic/minecraft/legacy/LegacyInstance.h +++ b/api/logic/minecraft/legacy/LegacyInstance.h @@ -34,7 +34,8 @@ public: explicit LegacyInstance(SettingsObjectPtr globalSettings, SettingsObjectPtr settings, const QString &rootDir); - virtual void init() override {}; + virtual void init() override {} + virtual void saveNow() override {} /// Path to the instance's minecraft.jar QString runnableJar() const; -- cgit v1.2.3