diff options
-rw-r--r-- | src/menuconfiguration.cpp | 34 | ||||
-rw-r--r-- | src/menuconfiguration.h | 6 | ||||
-rw-r--r-- | src/menuorg.cpp | 9 | ||||
-rw-r--r-- | src/menuorg.h | 2 |
4 files changed, 33 insertions, 18 deletions
diff --git a/src/menuconfiguration.cpp b/src/menuconfiguration.cpp index e3a9d3b..38cc58a 100644 --- a/src/menuconfiguration.cpp +++ b/src/menuconfiguration.cpp @@ -52,9 +52,9 @@ const string MenuConfiguration::_dtd = " execute CDATA #REQUIRED\n" " confirm (yes|no) #IMPLIED>"; -MenuNode* MenuConfiguration::LoadMenu(string menuFileName) -{ - MenuNode* menuRoot = new MenuNode(); +MenuConfiguration::MenuConfiguration(string menuFileName) +{ + _configuration = NULL; try { @@ -70,26 +70,34 @@ MenuNode* MenuConfiguration::LoadMenu(string menuFileName) Document *pDoc = parser.get_document(); validator.validate( pDoc ); - const Element* rootElement = parser.get_document()->get_root_node(); - ParseElement(rootElement, menuRoot); + _configuration = parser.get_document()->get_root_node(); - AddUnconfiguredPlugins(menuRoot); } catch(const std::exception& ex) { - delete menuRoot; - menuRoot = NULL; - cerr << "menuorg: Exception caught when parsing xml configuration: " << ex.what(); esyslog("Exception caught when parsing xml configuration. See stderr output for details."); } +} - return menuRoot; +MenuNode* MenuConfiguration::MenuTree() +{ + if (_configuration) + { + MenuNode* menuRoot = new MenuNode(); + CreateMenuTree(_configuration, menuRoot); + AddUnconfiguredPlugins(menuRoot); + return menuRoot; + } + else + { + return NULL; + } } -void MenuConfiguration::ParseElement(const Element* element, MenuNode* menuNode) +void MenuConfiguration::CreateMenuTree(const Element* menuRoot, MenuNode* menuNode) { - Node::NodeList children = element->get_children(); + Node::NodeList children = menuRoot->get_children(); for (Node::NodeList::iterator i = children.begin(); i != children.end(); i++) { const xmlpp::Element* childElement = dynamic_cast<const xmlpp::Element*>(*i); @@ -104,7 +112,7 @@ void MenuConfiguration::ParseElement(const Element* element, MenuNode* menuNode) if ( type == "menu") { MenuNode* subMenu = AddSubMenuNode(name, menuNode); - ParseElement(childElement, subMenu); + CreateMenuTree(childElement, subMenu); } else if (type == "system") { diff --git a/src/menuconfiguration.h b/src/menuconfiguration.h index 8ef64b6..34ca315 100644 --- a/src/menuconfiguration.h +++ b/src/menuconfiguration.h @@ -37,12 +37,14 @@ class MenuConfiguration private: static const std::string _dtd; std::vector<std::string> _configuredPlugins; + const xmlpp::Element* _configuration; public: - MenuNode* LoadMenu(std::string menuFileName); + MenuConfiguration(std::string menuFileName); + MenuNode* MenuTree(); private: - void ParseElement(const xmlpp::Element* a_node, MenuNode* menuNode); + void CreateMenuTree(const xmlpp::Element* menuRoot, MenuNode* menuNode); eOSState MenuTextToVdrState(std::string menuText); bool FindPluginByName(std::string name, cPlugin*& plugin, int& pluginIndex); MenuNode* AddSubMenuNode(std::string name, MenuNode* menu); diff --git a/src/menuorg.cpp b/src/menuorg.cpp index 0b0111d..b764f07 100644 --- a/src/menuorg.cpp +++ b/src/menuorg.cpp @@ -44,11 +44,14 @@ MenuOrgPlugin::MenuOrgPlugin(void) // VDR OBJECTS TO EXIST OR PRODUCE ANY OUTPUT! _customMenuShouldBeActive = true; _unconfiguredPluginsShouldBeIncluded = true; + _subMenuProvider = NULL; + _menuConfiguration = NULL; } MenuOrgPlugin::~MenuOrgPlugin() { delete _subMenuProvider; + delete _menuConfiguration; } const char* MenuOrgPlugin::Version(void) @@ -103,12 +106,12 @@ bool MenuOrgPlugin::ProcessArgs(int argc, char *argv[]) bool MenuOrgPlugin::Initialize(void) { - MenuConfiguration menuConfiguration; - if(configFile.empty()) configFile = (string) ConfigDirectory() + "/menuorg.xml"; - MenuNode* menu = menuConfiguration.LoadMenu(configFile); + _menuConfiguration = new MenuConfiguration(configFile); + + MenuNode* menu = _menuConfiguration->MenuTree(); if (menu) { _subMenuProvider = new MainMenuItemsProvider(menu); diff --git a/src/menuorg.h b/src/menuorg.h index 8ef4213..749bf83 100644 --- a/src/menuorg.h +++ b/src/menuorg.h @@ -27,6 +27,7 @@ #include <string> class MainMenuItemsProvider; +class MenuConfiguration; class MenuOrgPlugin : public cPlugin { @@ -35,6 +36,7 @@ class MenuOrgPlugin : public cPlugin std::string configFile; bool _customMenuShouldBeActive; bool _unconfiguredPluginsShouldBeIncluded; + MenuConfiguration* _menuConfiguration; public: MenuOrgPlugin(void); |