summaryrefslogtreecommitdiff
path: root/RealtimeSync/xmlProcessing.cpp
diff options
context:
space:
mode:
authorDaniel Wilhelm <daniel@wili.li>2014-04-18 17:00:17 +0200
committerDaniel Wilhelm <daniel@wili.li>2014-04-18 17:00:17 +0200
commitfd0853d2623dd278b08288331ed42e3be59252fb (patch)
treea7645daeaef8bdbed064faf4eb88e72cee58726c /RealtimeSync/xmlProcessing.cpp
parent2.1 (diff)
downloadFreeFileSync-fd0853d2623dd278b08288331ed42e3be59252fb.tar.gz
FreeFileSync-fd0853d2623dd278b08288331ed42e3be59252fb.tar.bz2
FreeFileSync-fd0853d2623dd278b08288331ed42e3be59252fb.zip
2.2
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