summaryrefslogtreecommitdiff
path: root/RealtimeSync/xmlFreeFileSync.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'RealtimeSync/xmlFreeFileSync.cpp')
-rw-r--r--RealtimeSync/xmlFreeFileSync.cpp68
1 files changed, 46 insertions, 22 deletions
diff --git a/RealtimeSync/xmlFreeFileSync.cpp b/RealtimeSync/xmlFreeFileSync.cpp
index 36f0e2f8..b3c11d50 100644
--- a/RealtimeSync/xmlFreeFileSync.cpp
+++ b/RealtimeSync/xmlFreeFileSync.cpp
@@ -10,17 +10,47 @@
#ifdef FFS_WIN
-class CmpNoCase
+struct CmpNoCase
{
-public:
- bool operator()(const wxString& a, const wxString& b)
+ bool operator()(const wxString& a, const wxString& b) const
{
- return FreeFileSync::compareStringsWin32(a.c_str(), b.c_str(), a.length(), b.length()) < 0;
+ return a.CmpNoCase(b) < 0;
}
};
#endif
+xmlAccess::XmlRealConfig convertBatchToReal(const xmlAccess::XmlBatchConfig& batchCfg, const wxString& filename)
+{
+ xmlAccess::XmlRealConfig output;
+
+#ifdef FFS_WIN
+ std::set<wxString, CmpNoCase> uniqueFolders;
+#elif defined FFS_LINUX
+ std::set<wxString> uniqueFolders;
+#endif
+
+ //add main folders
+ uniqueFolders.insert(batchCfg.mainCfg.mainFolderPair.leftDirectory.c_str());
+ uniqueFolders.insert(batchCfg.mainCfg.mainFolderPair.rightDirectory.c_str());
+
+ //additional folders
+ for (std::vector<FreeFileSync::FolderPairEnh>::const_iterator i = batchCfg.mainCfg.additionalPairs.begin();
+ i != batchCfg.mainCfg.additionalPairs.end(); ++i)
+ {
+ uniqueFolders.insert(i->leftDirectory.c_str());
+ uniqueFolders.insert(i->rightDirectory.c_str());
+ }
+
+ output.directories.insert(output.directories.end(), uniqueFolders.begin(), uniqueFolders.end());
+
+ output.commandline = FreeFileSync::getInstallationDir() + globalFunctions::FILE_NAME_SEPARATOR + wxT("FreeFileSync.exe ") +
+ wxT("\"") + filename + wxT("\"");
+
+ return output;
+}
+
+
void RealtimeSync::readRealOrBatchConfig(const wxString& filename, xmlAccess::XmlRealConfig& config) //throw (xmlAccess::XmlError);
{
if (xmlAccess::getXmlType(filename) != xmlAccess::XML_BATCH_CONFIG)
@@ -37,32 +67,26 @@ void RealtimeSync::readRealOrBatchConfig(const wxString& filename, xmlAccess::Xm
}
catch (const xmlAccess::XmlError& e)
{
- if (e.getSeverity() != xmlAccess::XmlError::WARNING) //ignore parsing errors
+ if (e.getSeverity() != xmlAccess::XmlError::WARNING)
throw;
- }
-
-#ifdef FFS_WIN
- std::set<wxString, CmpNoCase> uniqueFolders;
-#elif defined FFS_LINUX
- std::set<wxString> uniqueFolders;
-#endif
- for (std::vector<FreeFileSync::FolderPair>::const_iterator i = batchCfg.directoryPairs.begin(); i != batchCfg.directoryPairs.end(); ++i)
- {
- uniqueFolders.insert(i->leftDirectory.c_str());
- uniqueFolders.insert(i->rightDirectory.c_str());
+ config = convertBatchToReal(batchCfg, filename); //do work despite parsing errors, then re-throw
+ throw; //
}
-
- config.directories.insert(config.directories.end(), uniqueFolders.begin(), uniqueFolders.end());
-
- config.commandline = FreeFileSync::getInstallationDir() + globalFunctions::FILE_NAME_SEPARATOR + wxT("FreeFileSync.exe ") +
- wxT("\"") + filename + wxT("\"");
+ config = convertBatchToReal(batchCfg, filename);
}
int RealtimeSync::getProgramLanguage()
{
xmlAccess::XmlGlobalSettings settings;
- xmlAccess::readGlobalSettings(settings);
+
+ try
+ {
+ xmlAccess::readGlobalSettings(settings);
+ }
+ catch (const xmlAccess::XmlError&)
+ {} //user default language if error occured
+
return settings.programLanguage;
}
bgstack15