// ************************************************************************** // * This file is part of the FreeFileSync project. It is distributed under * // * GNU General Public License: http://www.gnu.org/licenses/gpl.html * // * Copyright (C) Zenju (zenju AT gmx DOT de) - All Rights Reserved * // ************************************************************************** #include "xml_ffs.h" #include "../lib/ffs_paths.h" #include //#include //include FreeFileSync xml headers #include "../lib/process_xml.h" using namespace zen; xmlAccess::XmlRealConfig convertBatchToReal(const xmlAccess::XmlBatchConfig& batchCfg, const Zstring& filename) { std::set uniqueFolders; //add main folders uniqueFolders.insert(batchCfg.mainCfg.firstPair.leftDirectory); uniqueFolders.insert(batchCfg.mainCfg.firstPair.rightDirectory); //additional folders std::for_each(batchCfg.mainCfg.additionalPairs.begin(), batchCfg.mainCfg.additionalPairs.end(), [&](const FolderPairEnh & fp) { uniqueFolders.insert(fp.leftDirectory); uniqueFolders.insert(fp.rightDirectory); }); uniqueFolders.erase(Zstring()); xmlAccess::XmlRealConfig output; output.directories.assign(uniqueFolders.begin(), uniqueFolders.end()); output.commandline = Zstr("\"") + zen::getFreeFileSyncLauncher() + Zstr("\" \"") + filename + Zstr("\""); return output; } void rts::readRealOrBatchConfig(const Zstring& filename, xmlAccess::XmlRealConfig& config) //throw xmlAccess::FfsXmlError; { if (xmlAccess::getXmlType(filename) != xmlAccess::XML_TYPE_BATCH) { xmlAccess::readRealConfig(filename, config); return; } //convert batch config to RealtimeSync config xmlAccess::XmlBatchConfig batchCfg; try { xmlAccess::readConfig(filename, batchCfg); //throw xmlAccess::FfsXmlError; } catch (const xmlAccess::FfsXmlError& e) { if (e.getSeverity() == xmlAccess::FfsXmlError::WARNING) config = convertBatchToReal(batchCfg, filename); //do work despite parsing errors, then re-throw throw; // } config = convertBatchToReal(batchCfg, filename); } int rts::getProgramLanguage() { xmlAccess::XmlGlobalSettings settings; try { xmlAccess::readConfig(settings); } catch (const xmlAccess::FfsXmlError&) {} //user default language if error occurred return settings.programLanguage; }