mirror of
https://github.com/ModOrganizer2/modorganizer-game_skyrimSE.git
synced 2026-07-27 13:59:15 -07:00
Merge remote-tracking branch 'dev/mainline_dev' into archive_conflicts
This commit is contained in:
+37
-22
@@ -21,6 +21,25 @@ SkyrimSEGamePlugins::SkyrimSEGamePlugins(IOrganizer *organizer)
|
||||
{
|
||||
}
|
||||
|
||||
void SkyrimSEGamePlugins::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 SkyrimSEGamePlugins::writePluginList(const IPluginList *pluginList,
|
||||
const QString &filePath) {
|
||||
SafeWriteFile file(filePath);
|
||||
@@ -46,20 +65,20 @@ void SkyrimSEGamePlugins::writePluginList(const IPluginList *pluginList,
|
||||
//TODO: do not write plugins in OFFICIAL_FILES container
|
||||
for (const QString &pluginName : plugins) {
|
||||
if (!PrimaryPlugins.contains(pluginName,Qt::CaseInsensitive)) {
|
||||
if (pluginList->state(pluginName) == IPluginList::STATE_ACTIVE) {
|
||||
if (!textCodec->canEncode(pluginName)) {
|
||||
invalidFileNames = true;
|
||||
qCritical("invalid plugin name %s", qPrintable(pluginName));
|
||||
}
|
||||
else
|
||||
{
|
||||
file->write("*");
|
||||
file->write(textCodec->fromUnicode(pluginName));
|
||||
|
||||
}
|
||||
file->write("\r\n");
|
||||
++writtenCount;
|
||||
if (pluginList->state(pluginName) == IPluginList::STATE_ACTIVE) {
|
||||
if (!textCodec->canEncode(pluginName)) {
|
||||
invalidFileNames = true;
|
||||
qCritical("invalid plugin name %s", qPrintable(pluginName));
|
||||
}
|
||||
else
|
||||
{
|
||||
file->write("*");
|
||||
file->write(textCodec->fromUnicode(pluginName));
|
||||
|
||||
}
|
||||
file->write("\r\n");
|
||||
++writtenCount;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!textCodec->canEncode(pluginName)) {
|
||||
@@ -88,8 +107,7 @@ void SkyrimSEGamePlugins::writePluginList(const IPluginList *pluginList,
|
||||
}
|
||||
}
|
||||
|
||||
bool SkyrimSEGamePlugins::readPluginList(MOBase::IPluginList *pluginList,
|
||||
bool useLoadOrder)
|
||||
QStringList SkyrimSEGamePlugins::readPluginList(MOBase::IPluginList *pluginList)
|
||||
{
|
||||
QStringList plugins = pluginList->pluginNames();
|
||||
QStringList primaryPlugins = organizer()->managedGame()->primaryPlugins();
|
||||
@@ -101,11 +119,12 @@ bool SkyrimSEGamePlugins::readPluginList(MOBase::IPluginList *pluginList,
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
QString filePath = organizer()->profile()->absolutePath() + "/plugins.txt";
|
||||
QFile file(filePath);
|
||||
if (!file.open(QIODevice::ReadOnly)) {
|
||||
qWarning("%s not found", qPrintable(filePath));
|
||||
return false;
|
||||
return loadOrder;
|
||||
}
|
||||
ON_BLOCK_EXIT([&]() { file.close(); });
|
||||
|
||||
@@ -113,7 +132,7 @@ bool SkyrimSEGamePlugins::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()) {
|
||||
@@ -158,9 +177,5 @@ bool SkyrimSEGamePlugins::readPluginList(MOBase::IPluginList *pluginList,
|
||||
pluginList->setState(pluginName, IPluginList::STATE_INACTIVE);
|
||||
}
|
||||
|
||||
if (useLoadOrder) {
|
||||
pluginList->setLoadOrder(loadOrder);
|
||||
}
|
||||
|
||||
return true;
|
||||
return loadOrder;
|
||||
}
|
||||
|
||||
@@ -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<QString, QByteArray> m_LastSaveHash;
|
||||
|
||||
Reference in New Issue
Block a user