From a5f15b279ced1bb90b7d30eb275479fdcaafaead Mon Sep 17 00:00:00 2001 From: lethosor Date: Fri, 14 Aug 2015 19:32:41 -0400 Subject: [PATCH] plug: Include deleted plugins in full list --- library/Core.cpp | 14 ++++++-------- library/PluginManager.cpp | 11 +++++++++++ library/include/PluginManager.h | 3 +++ 3 files changed, 20 insertions(+), 8 deletions(-) diff --git a/library/Core.cpp b/library/Core.cpp index 86fbcc83d..3cb86896a 100644 --- a/library/Core.cpp +++ b/library/Core.cpp @@ -815,16 +815,14 @@ command_result Core::runCommand(color_ostream &con, const std::string &first_, v const char *row_format = "%25s %10s %4i\n"; con.print(header_format, "Name", "State", "Cmds"); - vector plugins; - if (parts.size()) - plugins = parts; - else - plugins = plug_mgr->listPlugins(); - for (auto f = plugins.begin(); f != plugins.end(); ++f) + plug_mgr->refresh(); + for (auto it = plug_mgr->begin(); it != plug_mgr->end(); ++it) { - const Plugin * plug = plug_mgr->getPluginByName(*f); + const Plugin * plug = it->second; if (!plug) continue; + if (parts.size() && std::find(parts.begin(), parts.end(), plug->getName()) == parts.end()) + continue; color_value color; switch (plug->getState()) { @@ -847,7 +845,7 @@ command_result Core::runCommand(color_ostream &con, const std::string &first_, v } con.color(color); con.print(row_format, - f->c_str(), + plug->getName().c_str(), Plugin::getStateDescription(plug->getState()), plug->size() ); diff --git a/library/PluginManager.cpp b/library/PluginManager.cpp index d0243647c..ae99b31dd 100644 --- a/library/PluginManager.cpp +++ b/library/PluginManager.cpp @@ -851,6 +851,17 @@ vector PluginManager::listPlugins() return results; } +void PluginManager::refresh() +{ + MUTEX_GUARD(plugin_mutex); + auto files = listPlugins(); + for (auto f = files.begin(); f != files.end(); ++f) + { + if (!(*this)[*f]) + addPlugin(*f); + } +} + bool PluginManager::load (const string &name) { MUTEX_GUARD(plugin_mutex); diff --git a/library/include/PluginManager.h b/library/include/PluginManager.h index a80e8d138..aba6aaa0f 100644 --- a/library/include/PluginManager.h +++ b/library/include/PluginManager.h @@ -261,7 +261,10 @@ namespace DFHack void unregisterCommands( Plugin * p ); // PUBLIC METHODS public: + // list names of all plugins present in hack/plugins std::vector listPlugins(); + // create Plugin instances for any plugins in hack/plugins that aren't present in all_plugins + void refresh(); bool load (const std::string &name); bool loadAll();