diff --git a/loader/src/internal/crashlog.cpp b/loader/src/internal/crashlog.cpp index 919610bf..2ab668a4 100644 --- a/loader/src/internal/crashlog.cpp +++ b/loader/src/internal/crashlog.cpp @@ -1,6 +1,7 @@ #include "crashlog.hpp" #include <fmt/core.h> #include "about.hpp" +#include "../loader/ModImpl.hpp" using namespace geode::prelude; @@ -33,7 +34,7 @@ void crashlog::printMods(std::stringstream& stream) { using namespace std::string_view_literals; for (auto& mod : mods) { stream << fmt::format("{} | [{}] {}\n", - mod->isEnabled() ? "x"sv : mod->shouldLoad() ? "~"sv : " "sv, + mod->isEnabled() ? "x"sv : mod->shouldLoad() ? "~"sv : ModImpl::getImpl(mod)->isCurrentlyLoading() ? "o"sv : " "sv, mod->getVersion().toString(), mod->getID() ); } diff --git a/loader/src/loader/ModImpl.cpp b/loader/src/loader/ModImpl.cpp index 86980374..bea1b1ac 100644 --- a/loader/src/loader/ModImpl.cpp +++ b/loader/src/loader/ModImpl.cpp @@ -381,14 +381,17 @@ Result<> Mod::Impl::loadBinary() { LoaderImpl::get()->provideNextMod(m_self); m_enabled = true; + m_isCurrentlyLoading = true; auto res = this->loadPlatformBinary(); if (!res) { + m_isCurrentlyLoading = false; m_enabled = false; // make sure to free up the next mod mutex LoaderImpl::get()->releaseNextMod(); log::error("Failed to load binary for mod {}: {}", m_metadata.getID(), res.unwrapErr()); return res; } + m_isCurrentlyLoading = false; LoaderImpl::get()->releaseNextMod(); @@ -745,6 +748,10 @@ bool Mod::Impl::shouldLoad() const { return Mod::get()->getSavedValue<bool>("should-load-" + m_metadata.getID(), true); } +bool Mod::Impl::isCurrentlyLoading() const { + return m_isCurrentlyLoading; +} + static Result<ModMetadata> getModImplInfo() { std::string error; auto res = matjson::parse(LOADER_MOD_JSON, error); diff --git a/loader/src/loader/ModImpl.hpp b/loader/src/loader/ModImpl.hpp index 2664a6b5..a7eb951d 100644 --- a/loader/src/loader/ModImpl.hpp +++ b/loader/src/loader/ModImpl.hpp @@ -64,6 +64,8 @@ namespace geode { std::unordered_map<std::string, char const*> m_expandedSprites; + bool m_isCurrentlyLoading = false; + ModRequestedAction m_requestedAction = ModRequestedAction::None; Impl(Mod* self, ModMetadata const& metadata); @@ -150,6 +152,7 @@ namespace geode { void setLoggingEnabled(bool enabled); bool shouldLoad() const; + bool isCurrentlyLoading() const; }; class ModImpl : public Mod::Impl {