diff options
Diffstat (limited to 'libs/game_gamebryo/src/creation')
| -rw-r--r-- | libs/game_gamebryo/src/creation/CMakeLists.txt | 10 | ||||
| -rw-r--r-- | libs/game_gamebryo/src/creation/creationgameplugins.cpp | 183 | ||||
| -rw-r--r-- | libs/game_gamebryo/src/creation/creationgameplugins.h | 22 | ||||
| -rw-r--r-- | libs/game_gamebryo/src/creation/game_creation_en.ts | 12 |
4 files changed, 0 insertions, 227 deletions
diff --git a/libs/game_gamebryo/src/creation/CMakeLists.txt b/libs/game_gamebryo/src/creation/CMakeLists.txt deleted file mode 100644 index f2dce97..0000000 --- a/libs/game_gamebryo/src/creation/CMakeLists.txt +++ /dev/null @@ -1,10 +0,0 @@ -cmake_minimum_required(VERSION 3.16) - -add_library(game_creation STATIC) -mo2_configure_library(game_creation - WARNINGS OFF - TRANSLATIONS ON - PUBLIC_DEPENDS uibase - PRIVATE_DEPENDS lz4) -target_link_libraries(game_creation PUBLIC game_gamebryo) -mo2_install_target(game_creation) diff --git a/libs/game_gamebryo/src/creation/creationgameplugins.cpp b/libs/game_gamebryo/src/creation/creationgameplugins.cpp deleted file mode 100644 index f5cef62..0000000 --- a/libs/game_gamebryo/src/creation/creationgameplugins.cpp +++ /dev/null @@ -1,183 +0,0 @@ -#include "creationgameplugins.h" -#include <ipluginlist.h> -#include <report.h> -#include <safewritefile.h> -#include <scopeguard.h> - -#include <QDir> -#include <QSet> -#include <QStringEncoder> -#include <QStringList> - -using MOBase::IOrganizer; -using MOBase::IPluginGame; -using MOBase::IPluginList; -using MOBase::reportError; -using MOBase::SafeWriteFile; - -CreationGamePlugins::CreationGamePlugins(IOrganizer* organizer) - : GamebryoGamePlugins(organizer) -{} - -QStringList CreationGamePlugins::getLoadOrder() -{ - 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) { - return readLoadOrderList(m_Organizer->pluginList(), loadOrderPath); - } else { - return readPluginList(m_Organizer->pluginList()); - } -} - -void CreationGamePlugins::writePluginList(const IPluginList* pluginList, - const QString& filePath) -{ - SafeWriteFile file(filePath); - - QStringEncoder encoder(QStringConverter::Encoding::System); - - file->resize(0); - - file->write( - encoder.encode("# This file was automatically generated by Mod Organizer.\r\n")); - - bool invalidFileNames = false; - int writtenCount = 0; - - QStringList plugins = pluginList->pluginNames(); - std::sort(plugins.begin(), plugins.end(), - [pluginList](const QString& lhs, const QString& rhs) { - return pluginList->priority(lhs) < pluginList->priority(rhs); - }); - - QStringList PrimaryPlugins = organizer()->managedGame()->primaryPlugins(); - QStringList DLCPlugins = organizer()->managedGame()->DLCPlugins(); - QSet<QString> ManagedMods = - QSet<QString>(PrimaryPlugins.begin(), PrimaryPlugins.end()); - QSet<QString> DLCSet = QSet<QString>(DLCPlugins.begin(), DLCPlugins.end()); - ManagedMods.subtract(DLCSet); - PrimaryPlugins.append(QList<QString>(ManagedMods.begin(), ManagedMods.end())); - - // 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) { - auto result = encoder.encode(pluginName); - if (encoder.hasError()) { - invalidFileNames = true; - qCritical("invalid plugin name %s", qUtf8Printable(pluginName)); - } else { - file->write("*"); - file->write(result); - } - file->write("\r\n"); - ++writtenCount; - } else { - auto result = encoder.encode(pluginName); - if (encoder.hasError()) { - invalidFileNames = true; - qCritical("invalid plugin name %s", qUtf8Printable(pluginName)); - } else { - file->write(result); - } - file->write("\r\n"); - ++writtenCount; - } - } - } - - if (invalidFileNames) { - reportError(QObject::tr("Some of your plugins have invalid names! These " - "plugins can not be loaded by the game. Please see " - "mo_interface.log for a list of affected plugins " - "and rename them.")); - } - - file->commit(); -} - -QStringList CreationGamePlugins::readPluginList(MOBase::IPluginList* pluginList) -{ - const auto plugins = pluginList->pluginNames(); - const auto primaryPlugins = organizer()->managedGame()->primaryPlugins(); - QStringList loadOrder(primaryPlugins); - - for (const QString& pluginName : loadOrder) { - if (pluginList->state(pluginName) != IPluginList::STATE_MISSING) { - pluginList->setState(pluginName, IPluginList::STATE_ACTIVE); - } - } - - QString filePath = organizer()->profile()->absolutePath() + "/plugins.txt"; - QFile file(filePath); - if (!file.open(QIODevice::ReadOnly)) { - qWarning("%s not found", qUtf8Printable(filePath)); - return loadOrder; - } - ON_BLOCK_EXIT([&]() { - file.close(); - }); - - if (file.size() == 0) { - // MO stores at least a header in the file. if it's completely empty the - // file is broken - qWarning("%s empty", qUtf8Printable(filePath)); - return loadOrder; - } - - QStringList pluginsFound; - while (!file.atEnd()) { - QByteArray line = file.readLine(); - QString pluginName; - if ((line.size() > 0) && (line.at(0) != '#')) { - pluginName = QStringEncoder(QStringConverter::Encoding::System) - .encode(line.trimmed().constData()); - } - if (!primaryPlugins.contains(pluginName, Qt::CaseInsensitive)) { - if (pluginName.startsWith('*')) { - pluginName.remove(0, 1); - if (pluginName.size() > 0) { - pluginList->setState(pluginName, IPluginList::STATE_ACTIVE); - pluginsFound.append(pluginName); - if (!loadOrder.contains(pluginName, Qt::CaseInsensitive)) { - loadOrder.append(pluginName); - } - } - } else { - if (pluginName.size() > 0) { - pluginList->setState(pluginName, IPluginList::STATE_INACTIVE); - pluginsFound.append(pluginName); - if (!loadOrder.contains(pluginName, Qt::CaseInsensitive)) { - loadOrder.append(pluginName); - } - } - } - } else { - pluginName.remove(0, 1); - pluginsFound.append(pluginName); - } - } - - file.close(); - - // set all plugins not found inactive - for (const auto& pluginName : plugins) { - if (!pluginsFound.contains(pluginName, Qt::CaseInsensitive)) { - pluginList->setState(pluginName, IPluginList::STATE_INACTIVE); - } - } - - return loadOrder; -} - -bool CreationGamePlugins::lightPluginsAreSupported() -{ - return true; -} diff --git a/libs/game_gamebryo/src/creation/creationgameplugins.h b/libs/game_gamebryo/src/creation/creationgameplugins.h deleted file mode 100644 index f7afd80..0000000 --- a/libs/game_gamebryo/src/creation/creationgameplugins.h +++ /dev/null @@ -1,22 +0,0 @@ -#ifndef CREATIONGAMEPLUGINS_H -#define CREATIONGAMEPLUGINS_H - -#include <gamebryogameplugins.h> -#include <imoinfo.h> -#include <iplugingame.h> -#include <map> - -class CreationGamePlugins : public GamebryoGamePlugins -{ -public: - CreationGamePlugins(MOBase::IOrganizer* organizer); - -protected: - virtual void writePluginList(const MOBase::IPluginList* pluginList, - const QString& filePath) override; - virtual QStringList readPluginList(MOBase::IPluginList* pluginList) override; - virtual QStringList getLoadOrder() override; - virtual bool lightPluginsAreSupported() override; -}; - -#endif // CREATIONGAMEPLUGINS_H diff --git a/libs/game_gamebryo/src/creation/game_creation_en.ts b/libs/game_gamebryo/src/creation/game_creation_en.ts deleted file mode 100644 index f217448..0000000 --- a/libs/game_gamebryo/src/creation/game_creation_en.ts +++ /dev/null @@ -1,12 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!DOCTYPE TS> -<TS version="2.1" language="en_US"> -<context> - <name>QObject</name> - <message> - <location filename="creationgameplugins.cpp" line="97"/> - <source>Some of your plugins have invalid names! These plugins can not be loaded by the game. Please see mo_interface.log for a list of affected plugins and rename them.</source> - <translation type="unfinished"></translation> - </message> -</context> -</TS> |
