diff options
Diffstat (limited to 'src/MenuConfigurationRepository.cpp')
-rw-r--r-- | src/MenuConfigurationRepository.cpp | 30 |
1 files changed, 29 insertions, 1 deletions
diff --git a/src/MenuConfigurationRepository.cpp b/src/MenuConfigurationRepository.cpp index 9985e4b..e68ffa0 100644 --- a/src/MenuConfigurationRepository.cpp +++ b/src/MenuConfigurationRepository.cpp @@ -33,6 +33,7 @@ #include "PluginMenuNode.h" #include "CommandMenuNode.h" #include "SeparatorMenuNode.h" +#include <vdr/plugin.h> using namespace xmlpp; using namespace std; @@ -70,7 +71,7 @@ MenuConfigurationRepository::~MenuConfigurationRepository() delete _cachedMenuConfiguration; } -SubMenuNode* MenuConfigurationRepository::Load() +SubMenuNode* MenuConfigurationRepository::Load(bool appendUnconfiguredPlugins) { if (ConfigFileHasBeenChange()) { @@ -94,7 +95,13 @@ SubMenuNode* MenuConfigurationRepository::Load() _lastConfigFileModificationTime = CurrentConfigFileModificationTime(); delete _cachedMenuConfiguration; _cachedMenuConfiguration = new SubMenuNode("root"); + _configuredPlugins.clear(); CreateMenuTree(document->get_root_node(), _cachedMenuConfiguration); + + if (appendUnconfiguredPlugins) + { + AppendUnconfiguredPlugins(_cachedMenuConfiguration); + } } } @@ -104,9 +111,15 @@ SubMenuNode* MenuConfigurationRepository::Load() esyslog("Exception caught when parsing xml configuration. See stderr output for details."); } } + return _cachedMenuConfiguration; } +void MenuConfigurationRepository::Reset() +{ + _lastConfigFileModificationTime = 0; +} + bool MenuConfigurationRepository::ConfigFileHasBeenChange() { return (CurrentConfigFileModificationTime() != _lastConfigFileModificationTime); @@ -147,6 +160,7 @@ void MenuConfigurationRepository::CreateMenuTree(const Element* menuRoot, SubMen else if (type == "plugin") { menuNode->AddChild(new PluginMenuNode(name, GetTitle(childElement, ""))); + _configuredPlugins.push_back(name); } else if (type == "command") { @@ -162,6 +176,20 @@ void MenuConfigurationRepository::CreateMenuTree(const Element* menuRoot, SubMen } } +void MenuConfigurationRepository::AppendUnconfiguredPlugins(SubMenuNode* menuNode) +{ + int i = 0; + + while (cPlugin *plugin = cPluginManager::GetPlugin(i)) + { + if (find(_configuredPlugins.begin(), _configuredPlugins.end(), plugin->Name()) == _configuredPlugins.end()) + { + menuNode->AddChild(new PluginMenuNode(plugin->Name(), "")); + } + i++; + } +} + string MenuConfigurationRepository::UnicodeToLocaleOrIso8859(Glib::ustring unicodeString) { try |