Update sorting methods

This commit is contained in:
Jeremy Rimpo
2023-09-20 20:50:39 -05:00
parent f44cb5c23f
commit 9ac542e6ff
3 changed files with 141 additions and 306 deletions
-161
View File
@@ -14,165 +14,4 @@
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>GamebryoModDataContent</name>
<message>
<location filename="../../game_gamebryo/src/gamebryo/gamebryomoddatacontent.cpp" line="12"/>
<source>Plugins (ESP/ESM/ESL)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../game_gamebryo/src/gamebryo/gamebryomoddatacontent.cpp" line="13"/>
<source>Optional Plugins</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../game_gamebryo/src/gamebryo/gamebryomoddatacontent.cpp" line="14"/>
<source>Interface</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../game_gamebryo/src/gamebryo/gamebryomoddatacontent.cpp" line="15"/>
<source>Meshes</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../game_gamebryo/src/gamebryo/gamebryomoddatacontent.cpp" line="16"/>
<source>Bethesda Archive</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../game_gamebryo/src/gamebryo/gamebryomoddatacontent.cpp" line="17"/>
<source>Scripts (Papyrus)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../game_gamebryo/src/gamebryo/gamebryomoddatacontent.cpp" line="18"/>
<source>Script Extender Plugin</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../game_gamebryo/src/gamebryo/gamebryomoddatacontent.cpp" line="19"/>
<source>Script Extender Files</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../game_gamebryo/src/gamebryo/gamebryomoddatacontent.cpp" line="20"/>
<source>SkyProc Patcher</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../game_gamebryo/src/gamebryo/gamebryomoddatacontent.cpp" line="21"/>
<source>Sound or Music</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../game_gamebryo/src/gamebryo/gamebryomoddatacontent.cpp" line="22"/>
<source>Textures</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../game_gamebryo/src/gamebryo/gamebryomoddatacontent.cpp" line="23"/>
<source>MCM Configuration</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../game_gamebryo/src/gamebryo/gamebryomoddatacontent.cpp" line="24"/>
<source>INI Files</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../game_gamebryo/src/gamebryo/gamebryomoddatacontent.cpp" line="25"/>
<source>FaceGen Data</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../game_gamebryo/src/gamebryo/gamebryomoddatacontent.cpp" line="26"/>
<source>ModGroup Files</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>GamebryoSaveGameInfoWidget</name>
<message>
<location filename="../../game_gamebryo/src/gamebryo/gamebryosavegameinfowidget.ui" line="39"/>
<source>Save #</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../game_gamebryo/src/gamebryo/gamebryosavegameinfowidget.ui" line="51"/>
<source>Character</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../game_gamebryo/src/gamebryo/gamebryosavegameinfowidget.ui" line="63"/>
<source>Level</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../game_gamebryo/src/gamebryo/gamebryosavegameinfowidget.ui" line="75"/>
<source>Location</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../game_gamebryo/src/gamebryo/gamebryosavegameinfowidget.ui" line="87"/>
<source>Date</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../game_gamebryo/src/gamebryo/gamebryosavegameinfowidget.cpp" line="72"/>
<source>Has Script Extender Data</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../game_gamebryo/src/gamebryo/gamebryosavegameinfowidget.cpp" line="77"/>
<source>Missing ESPs</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../game_gamebryo/src/gamebryo/gamebryosavegameinfowidget.cpp" line="110"/>
<location filename="../../game_gamebryo/src/gamebryo/gamebryosavegameinfowidget.cpp" line="148"/>
<source>None</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../game_gamebryo/src/gamebryo/gamebryosavegameinfowidget.cpp" line="116"/>
<source>Missing ESLs</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>QObject</name>
<message>
<location filename="../../game_gamebryo/src/creation/creationgameplugins.cpp" line="105"/>
<location filename="../../game_gamebryo/src/gamebryo/gamebryogameplugins.cpp" line="127"/>
<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>
<message>
<location filename="../../game_gamebryo/src/gamebryo/gamebryosavegame.cpp" line="47"/>
<source>%1, #%2, Level %3, %4</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../game_gamebryo/src/gamebryo/gamebryosavegame.cpp" line="97"/>
<source>failed to open %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../game_gamebryo/src/gamebryo/gamebryosavegame.cpp" line="107"/>
<source>wrong file format - expected %1 got %2</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../game_gamebryo/src/gamebryo/gamegamebryo.cpp" line="323"/>
<source>failed to query registry path (preflight): %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../game_gamebryo/src/gamebryo/gamegamebryo.cpp" line="330"/>
<source>failed to query registry path (read): %1</source>
<translation type="unfinished"></translation>
</message>
</context>
</TS>
+108 -111
View File
@@ -42,243 +42,240 @@ GameEnderal::GameEnderal()
{
}
bool GameEnderal::init(IOrganizer *moInfo)
bool GameEnderal::init(IOrganizer* moInfo)
{
if (!GameGamebryo::init(moInfo)) {
return false;
}
if (!GameGamebryo::init(moInfo)) {
return false;
}
registerFeature<ScriptExtender>(new EnderalScriptExtender(this));
registerFeature<DataArchives>(new EnderalDataArchives(myGamesPath()));
registerFeature<BSAInvalidation>(new EnderalBSAInvalidation(feature<DataArchives>(), this));
registerFeature<SaveGameInfo>(new GamebryoSaveGameInfo(this));
registerFeature<LocalSavegames>(new EnderalLocalSavegames(myGamesPath(), "enderal.ini"));
registerFeature<ModDataChecker>(new EnderalModDataChecker(this));
registerFeature<ModDataContent>(new EnderalModDataContent(this));
registerFeature<GamePlugins>(new EnderalGamePlugins(moInfo));
registerFeature<UnmanagedMods>(new GamebryoUnmangedMods(this));
return true;
registerFeature<ScriptExtender>(new EnderalScriptExtender(this));
registerFeature<DataArchives>(new EnderalDataArchives(myGamesPath()));
registerFeature<BSAInvalidation>(new EnderalBSAInvalidation(feature<DataArchives>(), this));
registerFeature<SaveGameInfo>(new GamebryoSaveGameInfo(this));
registerFeature<LocalSavegames>(new EnderalLocalSavegames(myGamesPath(), "enderal.ini"));
registerFeature<ModDataChecker>(new EnderalModDataChecker(this));
registerFeature<ModDataContent>(new EnderalModDataContent(this));
registerFeature<GamePlugins>(new EnderalGamePlugins(moInfo));
registerFeature<UnmanagedMods>(new GamebryoUnmangedMods(this));
return true;
}
QString GameEnderal::gameName() const
{
return "Enderal";
return "Enderal";
}
QList<ExecutableInfo> GameEnderal::executables() const
{
return QList<ExecutableInfo>()
//<< ExecutableInfo("SKSE", findInGameFolder(feature<ScriptExtender>()->loaderName()))
//<< ExecutableInfo("SBW", findInGameFolder("SBW.exe"))
<< ExecutableInfo("Enderal (SKSE)", findInGameFolder(binaryName()))
<< ExecutableInfo("Enderal Launcher", findInGameFolder(getLauncherName()))
<< ExecutableInfo("BOSS", findInGameFolder("BOSS/BOSS.exe"))
//<< ExecutableInfo("LOOT", QFileInfo(getLootPath())).withArgument("--game=\"Skyrim\"")
<< ExecutableInfo("Creation Kit", findInGameFolder("CreationKit.exe")).withSteamAppId("202480")
;
return QList<ExecutableInfo>()
//<< ExecutableInfo("SKSE", findInGameFolder(feature<ScriptExtender>()->loaderName()))
//<< ExecutableInfo("SBW", findInGameFolder("SBW.exe"))
<< ExecutableInfo("Enderal (SKSE)", findInGameFolder(binaryName()))
<< ExecutableInfo("Enderal Launcher", findInGameFolder(getLauncherName()))
<< ExecutableInfo("BOSS", findInGameFolder("BOSS/BOSS.exe"))
<< ExecutableInfo("LOOT", QFileInfo(getLootPath())).withArgument("--game=\"Enderal\"")
<< ExecutableInfo("Creation Kit", findInGameFolder("CreationKit.exe")).withSteamAppId("202480")
;
}
QList<ExecutableForcedLoadSetting> GameEnderal::executableForcedLoads() const
{
return QList<ExecutableForcedLoadSetting>();
return QList<ExecutableForcedLoadSetting>();
}
QString GameEnderal::name() const
{
return "Enderal Support Plugin";
return "Enderal Support Plugin";
}
QString GameEnderal::localizedName() const
{
return tr("Enderal Support Plugin");
return tr("Enderal Support Plugin");
}
QString GameEnderal::author() const
{
return "AL12";
return "AL12";
}
QString GameEnderal::description() const
{
return tr("Adds support for the game Enderal");
return tr("Adds support for the game Enderal");
}
MOBase::VersionInfo GameEnderal::version() const
{
return VersionInfo(1, 3, 0, VersionInfo::RELEASE_FINAL);
return VersionInfo(1, 3, 0, VersionInfo::RELEASE_FINAL);
}
QList<PluginSetting> GameEnderal::settings() const
{
QList<PluginSetting> results;
results.push_back(PluginSetting("sse_downloads", "allow Skyrim SE downloads", QVariant(false)));
return results;
QList<PluginSetting> results;
results.push_back(PluginSetting("sse_downloads", "allow Skyrim SE downloads", QVariant(false)));
return results;
}
void GameEnderal::initializeProfile(const QDir &path, ProfileSettings settings) const
void GameEnderal::initializeProfile(const QDir& path, ProfileSettings settings) const
{
if (settings.testFlag(IPluginGame::MODS)) {
copyToProfile(localAppFolder() + "/enderal", path, "plugins.txt");
}
if (settings.testFlag(IPluginGame::MODS)) {
copyToProfile(localAppFolder() + "/enderal", path, "plugins.txt");
}
if (settings.testFlag(IPluginGame::CONFIGURATION)) {
if (settings.testFlag(IPluginGame::PREFER_DEFAULTS)
|| !QFileInfo(myGamesPath() + "/enderal.ini").exists()) {
if (settings.testFlag(IPluginGame::CONFIGURATION)) {
if (settings.testFlag(IPluginGame::PREFER_DEFAULTS)
|| !QFileInfo(myGamesPath() + "/enderal.ini").exists()) {
//there is no default ini, actually they are going to put them in for us!
copyToProfile(gameDirectory().absolutePath(), path, "enderal_default.ini", "enderal.ini");
copyToProfile(gameDirectory().absolutePath(), path, "enderalprefs_default.ini", "enderalprefs.ini");
} else {
copyToProfile(myGamesPath(), path, "enderal.ini");
copyToProfile(myGamesPath(), path, "enderalprefs.ini");
}
}
//there is no default ini, actually they are going to put them in for us!
copyToProfile(gameDirectory().absolutePath(), path, "enderal_default.ini", "enderal.ini");
copyToProfile(gameDirectory().absolutePath(), path, "enderalprefs_default.ini", "enderalprefs.ini");
}
else {
copyToProfile(myGamesPath(), path, "enderal.ini");
copyToProfile(myGamesPath(), path, "enderalprefs.ini");
}
}
}
bool GameEnderal::looksValid(QDir const &path) const
bool GameEnderal::looksValid(QDir const& path) const
{
// we need to check both launcher and binary because the binary also exists for
// Skyrim and the launcher for Enderal SE
return path.exists(getLauncherName()) && path.exists(binaryName());
// we need to check both launcher and binary because the binary also exists for
// Skyrim and the launcher for Enderal SE
return path.exists(getLauncherName()) && path.exists(binaryName());
}
QIcon GameEnderal::gameIcon() const
{
return MOBase::iconForExecutable(gameDirectory().absoluteFilePath(getLauncherName()));
return MOBase::iconForExecutable(gameDirectory().absoluteFilePath(getLauncherName()));
}
QString GameEnderal::savegameExtension() const
{
return "ess";
return "ess";
}
QString GameEnderal::savegameSEExtension() const
{
return "skse";
return "skse";
}
std::shared_ptr<const GamebryoSaveGame> GameEnderal::makeSaveGame(QString filepath) const
{
return std::make_shared<const EnderalSaveGame>(filepath, this);
return std::make_shared<const EnderalSaveGame>(filepath, this);
}
QString GameEnderal::steamAPPId() const
{
return "933480";
}
MOBase::IPluginGame::SortMechanism GameEnderal::sortMechanism() const
{
return SortMechanism::NONE;
return "933480";
}
QStringList GameEnderal::primaryPlugins() const
{
return { "Skyrim.esm", "Enderal - Forgotten Stories.esm", "Update.esm" };
return { "Skyrim.esm", "Enderal - Forgotten Stories.esm", "Update.esm" };
}
QString GameEnderal::binaryName() const
{
return "skse_loader.exe";
return "skse_loader.exe";
}
QString GameEnderal::getLauncherName() const
{
return "Enderal Launcher.exe";
return "Enderal Launcher.exe";
}
QString GameEnderal::gameShortName() const
{
return "Enderal";
return "Enderal";
}
QString GameEnderal::gameNexusName() const
{
return "enderal";
return "enderal";
}
QStringList GameEnderal::primarySources() const
{
return {"Skyrim"};
return { "Skyrim" };
}
QStringList GameEnderal::validShortNames() const
{
QStringList results;
results.push_back( "Skyrim" );
if (m_Organizer->pluginSetting(name(), "sse_downloads").toBool())
{
results.push_back( "SkyrimSE" );
}
return results;
QStringList results;
results.push_back("Skyrim");
if (m_Organizer->pluginSetting(name(), "sse_downloads").toBool())
{
results.push_back("SkyrimSE");
}
return results;
}
QStringList GameEnderal::iniFiles() const
{
return { "enderal.ini", "enderalprefs.ini" };
return { "enderal.ini", "enderalprefs.ini" };
}
QStringList GameEnderal::DLCPlugins() const
{
return {};
return {};
}
namespace {
//Note: This is ripped off from shared/util. And in an upcoming move, the fomod
//installer requires something similar. I suspect I should abstract this out
//into gamebryo (or lower level)
//Unused for Enderal
//Note: This is ripped off from shared/util. And in an upcoming move, the fomod
//installer requires something similar. I suspect I should abstract this out
//into gamebryo (or lower level)
//Unused for Enderal
VS_FIXEDFILEINFO GetFileVersion(const std::wstring &fileName)
{
DWORD handle = 0UL;
DWORD size = ::GetFileVersionInfoSizeW(fileName.c_str(), &handle);
if (size == 0) {
throw std::runtime_error("failed to determine file version info size");
}
VS_FIXEDFILEINFO GetFileVersion(const std::wstring& fileName)
{
DWORD handle = 0UL;
DWORD size = ::GetFileVersionInfoSizeW(fileName.c_str(), &handle);
if (size == 0) {
throw std::runtime_error("failed to determine file version info size");
}
std::vector<char> buffer(size);
handle = 0UL;
if (!::GetFileVersionInfoW(fileName.c_str(), handle, size, buffer.data())) {
throw std::runtime_error("failed to determine file version info");
}
std::vector<char> buffer(size);
handle = 0UL;
if (!::GetFileVersionInfoW(fileName.c_str(), handle, size, buffer.data())) {
throw std::runtime_error("failed to determine file version info");
}
void *versionInfoPtr = nullptr;
UINT versionInfoLength = 0;
if (!::VerQueryValue(buffer.data(), L"\\", &versionInfoPtr, &versionInfoLength)) {
throw std::runtime_error("failed to determine file version");
}
void* versionInfoPtr = nullptr;
UINT versionInfoLength = 0;
if (!::VerQueryValue(buffer.data(), L"\\", &versionInfoPtr, &versionInfoLength)) {
throw std::runtime_error("failed to determine file version");
}
return *static_cast<VS_FIXEDFILEINFO*>(versionInfoPtr);
}
return *static_cast<VS_FIXEDFILEINFO*>(versionInfoPtr);
}
}
IPluginGame::LoadOrderMechanism GameEnderal::loadOrderMechanism() const
{
return LoadOrderMechanism::PluginsTxt;
return LoadOrderMechanism::PluginsTxt;
}
int GameEnderal::nexusModOrganizerID() const
{
return 0;
return 0;
}
int GameEnderal::nexusGameID() const
{
return 0;
return 0;
}
QString GameEnderal::identifyGamePath() const
{
QString path = "Software\\SureAI\\Enderal";
QString result;
try {
result = findInRegistry(HKEY_CURRENT_USER, path.toStdWString().c_str(), L"Install_Path");
} catch (MOBase::MyException) {
result = MOBase::findSteamGame("Enderal", "Data\\Enderal - Forgotten Stories.esm");
}
return result;
QString path = "Software\\SureAI\\Enderal";
QString result;
try {
result = findInRegistry(HKEY_CURRENT_USER, path.toStdWString().c_str(), L"Install_Path");
}
catch (MOBase::MyException) {
result = MOBase::findSteamGame("Enderal", "Data\\Enderal - Forgotten Stories.esm");
}
return result;
}
+33 -34
View File
@@ -8,56 +8,55 @@
class GameEnderal : public GameGamebryo
{
Q_OBJECT
Q_OBJECT
#if QT_VERSION >= QT_VERSION_CHECK(5,0,0)
Q_PLUGIN_METADATA(IID "org.tannin.GameEnderal" FILE "gameenderal.json")
Q_PLUGIN_METADATA(IID "org.tannin.GameEnderal" FILE "gameenderal.json")
#endif
public:
GameEnderal();
GameEnderal();
virtual bool init(MOBase::IOrganizer *moInfo) override;
virtual bool init(MOBase::IOrganizer* moInfo) override;
public: // IPluginGame interface
virtual QString gameName() const override;
virtual QList<MOBase::ExecutableInfo> executables() const override;
virtual QList<MOBase::ExecutableForcedLoadSetting> executableForcedLoads() const override;
virtual void initializeProfile(const QDir &path, ProfileSettings settings) const override;
virtual QString steamAPPId() const override;
virtual QStringList primaryPlugins() const override;
virtual QString binaryName() const override;
virtual QString getLauncherName() const override;
virtual QString gameShortName() const override;
virtual QStringList validShortNames() const override;
virtual QString gameNexusName() const override;
virtual QStringList primarySources() const override;
virtual QStringList iniFiles() const override;
virtual QStringList DLCPlugins() const override;
virtual LoadOrderMechanism loadOrderMechanism() const override;
virtual int nexusModOrganizerID() const override;
virtual SortMechanism sortMechanism() const override;
virtual int nexusGameID() const override;
virtual bool looksValid(QDir const &) const override;
virtual QIcon gameIcon() const override;
virtual QString gameName() const override;
virtual QList<MOBase::ExecutableInfo> executables() const override;
virtual QList<MOBase::ExecutableForcedLoadSetting> executableForcedLoads() const override;
virtual void initializeProfile(const QDir& path, ProfileSettings settings) const override;
virtual QString steamAPPId() const override;
virtual QStringList primaryPlugins() const override;
virtual QString binaryName() const override;
virtual QString getLauncherName() const override;
virtual QString gameShortName() const override;
virtual QStringList validShortNames() const override;
virtual QString gameNexusName() const override;
virtual QStringList primarySources() const override;
virtual QStringList iniFiles() const override;
virtual QStringList DLCPlugins() const override;
virtual LoadOrderMechanism loadOrderMechanism() const override;
virtual int nexusModOrganizerID() const override;
virtual int nexusGameID() const override;
virtual bool looksValid(QDir const&) const override;
virtual QIcon gameIcon() const override;
public: // IPlugin interface
virtual QString name() const override;
virtual QString localizedName() const override;
virtual QString author() const override;
virtual QString description() const override;
virtual MOBase::VersionInfo version() const override;
virtual QList<MOBase::PluginSetting> settings() const override;
virtual QString name() const override;
virtual QString localizedName() const override;
virtual QString author() const override;
virtual QString description() const override;
virtual MOBase::VersionInfo version() const override;
virtual QList<MOBase::PluginSetting> settings() const override;
protected:
virtual QString savegameExtension() const override;
virtual QString savegameSEExtension() const override;
virtual std::shared_ptr<const GamebryoSaveGame> makeSaveGame(QString filepath) const override;
virtual QString savegameExtension() const override;
virtual QString savegameSEExtension() const override;
virtual std::shared_ptr<const GamebryoSaveGame> makeSaveGame(QString filepath) const override;
virtual QString identifyGamePath() const override;
virtual QString identifyGamePath() const override;
};
#endif // GAMEENDERAL_H