From f727db005c6d0e08704796e642da30dee42403e8 Mon Sep 17 00:00:00 2001 From: Al Date: Sun, 9 Sep 2018 23:30:03 +0200 Subject: [PATCH] Archive conflicts (#4) * Necessary changes for querying plugin loadorder for archive sorting * Necessary changes for querying plugin loadorder for archive sorting * Merge fixes for archive parsing * Necessary changes for querying plugin loadorder for archive sorting * Necessary changes for querying plugin loadorder for archive sorting * Merge fixes for archive parsing --- src/fallout4gameplugins.cpp | 32 +++++++++++++++++++++++--------- src/fallout4gameplugins.h | 4 ++-- 2 files changed, 25 insertions(+), 11 deletions(-) diff --git a/src/fallout4gameplugins.cpp b/src/fallout4gameplugins.cpp index 678d63e..bea0b8f 100644 --- a/src/fallout4gameplugins.cpp +++ b/src/fallout4gameplugins.cpp @@ -22,6 +22,25 @@ Fallout4GamePlugins::Fallout4GamePlugins(IOrganizer *organizer) { } +void Fallout4GamePlugins::getLoadOrder(QStringList &loadOrder) { + QString loadOrderPath = + organizer()->profile()->absolutePath() + "/loadorder.txt"; + QString pluginsPath = organizer()->profile()->absolutePath() + "/plugins.txt"; + + bool loadOrderIsNew = !m_LastRead.isValid() || + !QFileInfo(loadOrderPath).exists() || + QFileInfo(loadOrderPath).lastModified() > m_LastRead; + bool pluginsIsNew = !m_LastRead.isValid() || + QFileInfo(pluginsPath).lastModified() > m_LastRead; + + if (loadOrderIsNew || !pluginsIsNew) { + loadOrder = readLoadOrderList(m_Organizer->pluginList(), loadOrderPath); + } + else { + loadOrder = readPluginList(m_Organizer->pluginList()); + } +} + void Fallout4GamePlugins::writePluginList(const IPluginList *pluginList, const QString &filePath) { SafeWriteFile file(filePath); @@ -91,8 +110,7 @@ void Fallout4GamePlugins::writePluginList(const IPluginList *pluginList, } } -bool Fallout4GamePlugins::readPluginList(MOBase::IPluginList *pluginList, - bool useLoadOrder) +QStringList Fallout4GamePlugins::readPluginList(MOBase::IPluginList *pluginList) { QStringList plugins = pluginList->pluginNames(); QStringList primaryPlugins = organizer()->managedGame()->primaryPlugins(); @@ -108,7 +126,7 @@ bool Fallout4GamePlugins::readPluginList(MOBase::IPluginList *pluginList, QFile file(filePath); if (!file.open(QIODevice::ReadOnly)) { qWarning("%s not found", qPrintable(filePath)); - return false; + return loadOrder; } ON_BLOCK_EXIT([&]() { file.close(); }); @@ -116,7 +134,7 @@ bool Fallout4GamePlugins::readPluginList(MOBase::IPluginList *pluginList, // MO stores at least a header in the file. if it's completely empty the // file is broken qWarning("%s empty", qPrintable(filePath)); - return false; + return loadOrder; } while (!file.atEnd()) { @@ -161,9 +179,5 @@ bool Fallout4GamePlugins::readPluginList(MOBase::IPluginList *pluginList, pluginList->setState(pluginName, IPluginList::STATE_INACTIVE); } - if (useLoadOrder) { - pluginList->setLoadOrder(loadOrder); - } - - return true; + return loadOrder; } diff --git a/src/fallout4gameplugins.h b/src/fallout4gameplugins.h index 091c5ce..0b591b8 100644 --- a/src/fallout4gameplugins.h +++ b/src/fallout4gameplugins.h @@ -16,8 +16,8 @@ public: protected: virtual void writePluginList(const MOBase::IPluginList *pluginList, const QString &filePath) override; - virtual bool readPluginList(MOBase::IPluginList *pluginList, - bool useLoadOrder) override; + virtual QStringList readPluginList(MOBase::IPluginList *pluginList) override; + virtual void getLoadOrder(QStringList &loadOrder) override; private: std::map m_LastSaveHash;