summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/menuconfiguration.cpp34
-rw-r--r--src/menuconfiguration.h6
-rw-r--r--src/menuorg.cpp9
-rw-r--r--src/menuorg.h2
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);