From 83bb6f3ed5c4605557e2c24d735e3426cc1255e3 Mon Sep 17 00:00:00 2001 From: Angen Date: Sun, 22 Aug 2021 09:54:16 +0000 Subject: [PATCH] Fix downloanded mods not showing in list until restart since 498f0d420b While at it, remove not used variable after 6400a4a0c5 also fix non visual replay broken in 6400a4a0c5 Differential revision: D4220 Tested by: @Stan, @Langbart Fixes: #6288 This was SVN commit r25853. --- source/main.cpp | 2 ++ source/ps/GameSetup/GameSetup.cpp | 2 +- source/ps/Mod.cpp | 2 +- source/ps/Mod.h | 2 +- source/ps/ModIo.cpp | 1 + source/ps/Replay.cpp | 3 ++- source/ps/scripting/JSInterface_Mod.cpp | 4 ++-- 7 files changed, 10 insertions(+), 6 deletions(-) diff --git a/source/main.cpp b/source/main.cpp index 1e2579cb9d..f3f4278b40 100644 --- a/source/main.cpp +++ b/source/main.cpp @@ -193,6 +193,8 @@ static InReaction MainInputHandler(const SDL_Event_* ev) else { LOGMESSAGE("Installed mod %s", installer.GetInstalledMods().front()); + ScriptInterface modInterface("Engine", "Mod", g_ScriptContext); + g_Mods.UpdateAvailableMods(modInterface); RestartEngine(); } break; diff --git a/source/ps/GameSetup/GameSetup.cpp b/source/ps/GameSetup/GameSetup.cpp index ea5da72855..48cca3b2d9 100644 --- a/source/ps/GameSetup/GameSetup.cpp +++ b/source/ps/GameSetup/GameSetup.cpp @@ -877,7 +877,7 @@ bool Init(const CmdLineArgs& args, int flags) boost::split(mods, modsStr, boost::algorithm::is_space(), boost::token_compress_on); } - if (!g_Mods.EnableMods(modInterface, mods, flags & INIT_MODS_PUBLIC)) + if (!g_Mods.EnableMods(mods, flags & INIT_MODS_PUBLIC)) { // In non-visual mode, fail entirely. if (args.Has("autostart-nonvisual")) diff --git a/source/ps/Mod.cpp b/source/ps/Mod.cpp index 2c5942c0d1..4247815828 100644 --- a/source/ps/Mod.cpp +++ b/source/ps/Mod.cpp @@ -136,7 +136,7 @@ const std::vector& Mod::GetAvailableMods() const return m_AvailableMods; } -bool Mod::EnableMods(const ScriptInterface& scriptInterface, const std::vector& mods, const bool addPublic) +bool Mod::EnableMods(const std::vector& mods, const bool addPublic) { m_IncompatibleMods.clear(); m_EnabledMods.clear(); diff --git a/source/ps/Mod.h b/source/ps/Mod.h index 0ce613edca..97654b3c51 100644 --- a/source/ps/Mod.h +++ b/source/ps/Mod.h @@ -72,7 +72,7 @@ public: * @return whether the mods were enabled successfully. This can fail if e.g. mods are incompatible. * If true, GetEnabledMods() should be non-empty, GetIncompatibleMods() empty. Otherwise, GetIncompatibleMods() is non-empty. */ - bool EnableMods(const ScriptInterface& scriptInterface, const std::vector& mods, const bool addPublic); + bool EnableMods(const std::vector& mods, const bool addPublic); /** * Get data for the given mod. diff --git a/source/ps/ModIo.cpp b/source/ps/ModIo.cpp index 22c639f068..dfc96d202d 100644 --- a/source/ps/ModIo.cpp +++ b/source/ps/ModIo.cpp @@ -486,6 +486,7 @@ bool ModIo::AdvanceRequest(const ScriptInterface& scriptInterface) Paths paths(g_CmdLineArgs); CModInstaller installer(paths.UserData() / "mods", paths.Cache()); installer.Install(m_DownloadFilePath, g_ScriptContext, false); + g_Mods.UpdateAvailableMods(scriptInterface); } break; default: diff --git a/source/ps/Replay.cpp b/source/ps/Replay.cpp index 92c8ec7efd..33c32e742e 100644 --- a/source/ps/Replay.cpp +++ b/source/ps/Replay.cpp @@ -233,7 +233,8 @@ void CReplayPlayer::Replay(const bool serializationtest, const int rejointesttur mods.emplace_back(data.m_Pathname); // Ignore the return value, we check below. - g_Mods.EnableMods(scriptInterface, mods, false); + g_Mods.UpdateAvailableMods(scriptInterface); + g_Mods.EnableMods(mods, false); CheckReplayMods(replayMods); MountMods(Paths(g_CmdLineArgs), g_Mods.GetEnabledMods()); diff --git a/source/ps/scripting/JSInterface_Mod.cpp b/source/ps/scripting/JSInterface_Mod.cpp index ab2aec4819..3fb06af0e1 100644 --- a/source/ps/scripting/JSInterface_Mod.cpp +++ b/source/ps/scripting/JSInterface_Mod.cpp @@ -156,9 +156,9 @@ bool AreModsPlayCompatible(const std::vector& a, const std::vector return Mod::AreModsPlayCompatible(modsA, modsB); } -bool SetModsAndRestartEngine(const ScriptInterface& scriptInterface, const std::vector& mods) +bool SetModsAndRestartEngine(const std::vector& mods) { - if (!g_Mods.EnableMods(scriptInterface, mods, false)) + if (!g_Mods.EnableMods(mods, false)) return false; RestartEngine();