summaryrefslogtreecommitdiff
path: root/RealtimeSync/xmlProcessing.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'RealtimeSync/xmlProcessing.cpp')
-rw-r--r--RealtimeSync/xmlProcessing.cpp86
1 files changed, 86 insertions, 0 deletions
diff --git a/RealtimeSync/xmlProcessing.cpp b/RealtimeSync/xmlProcessing.cpp
new file mode 100644
index 00000000..7b640455
--- /dev/null
+++ b/RealtimeSync/xmlProcessing.cpp
@@ -0,0 +1,86 @@
+#include "xmlProcessing.h"
+#include <wx/filefn.h>
+#include <wx/intl.h>
+
+
+class RtsXmlParser : public xmlAccess::XmlParser
+{
+public:
+ RtsXmlParser(const TiXmlElement* rootElement) : xmlAccess::XmlParser(rootElement) {}
+
+ void readXmlRealConfig(xmlAccess::XmlRealConfig& outputCfg);
+};
+
+
+
+void readXmlRealConfig(const TiXmlDocument& doc, xmlAccess::XmlRealConfig& outputCfg);
+bool writeXmRealSettings(const xmlAccess::XmlRealConfig& outputCfg, TiXmlDocument& doc);
+
+
+void xmlAccess::readRealConfig(const wxString& filename, XmlRealConfig& config)
+{
+ //load XML
+ if (!wxFileExists(filename))
+ throw XmlError(wxString(_("File does not exist:")) + wxT(" \"") + filename + wxT("\""));
+
+ TiXmlDocument doc;
+ if (!loadXmlDocument(filename, XML_REAL_CONFIG, doc))
+ throw XmlError(wxString(_("Error reading file:")) + wxT(" \"") + filename + wxT("\""));
+
+ RtsXmlParser parser(doc.RootElement());
+ parser.readXmlRealConfig(config); //read GUI layout configuration
+
+ if (parser.errorsOccured())
+ throw XmlError(wxString(_("Error parsing configuration file:")) + wxT(" \"") + filename + wxT("\"\n\n") +
+ parser.getErrorMessageFormatted(), XmlError::WARNING);
+}
+
+
+void xmlAccess::writeRealConfig(const XmlRealConfig& outputCfg, const wxString& filename)
+{
+ TiXmlDocument doc;
+ getDefaultXmlDocument(XML_REAL_CONFIG, doc);
+
+ //populate and write XML tree
+ if ( !writeXmRealSettings(outputCfg, doc) || //add GUI layout configuration settings
+ !saveXmlDocument(filename, doc)) //save XML
+ throw XmlError(wxString(_("Error writing file:")) + wxT(" \"") + filename + wxT("\""));
+ return;
+}
+
+//--------------------------------------------------------------------------------
+
+
+void RtsXmlParser::readXmlRealConfig(xmlAccess::XmlRealConfig& outputCfg)
+{
+ //read directories for monitoring
+ const TiXmlElement* directoriesToWatch = TiXmlHandleConst(root).FirstChild("Directories").ToElement();
+
+ readXmlElementLogging("Folder", directoriesToWatch, outputCfg.directories);
+
+ //commandline to execute
+ readXmlElementLogging("Commandline", root, outputCfg.commandline);
+
+ //delay
+ readXmlElementLogging("Delay", root, outputCfg.delay);
+}
+
+
+bool writeXmRealSettings(const xmlAccess::XmlRealConfig& outputCfg, TiXmlDocument& doc)
+{
+ TiXmlElement* root = doc.RootElement();
+ if (!root) return false;
+
+ //directories to monitor
+ TiXmlElement* directoriesToWatch = new TiXmlElement("Directories");
+ root->LinkEndChild(directoriesToWatch);
+ xmlAccess::addXmlElement("Folder", outputCfg.directories, directoriesToWatch);
+
+ //commandline to execute
+ xmlAccess::addXmlElement("Commandline", outputCfg.commandline, root);
+
+ //delay
+ xmlAccess::addXmlElement("Delay", outputCfg.delay, root);
+
+ return true;
+}
bgstack15