Index: src/ch/FileFilter.cpp =================================================================== diff -u -N -r591f291e22d2ece89acb266c8aa0b05c257a407c -rc54aa186fda8c0af84325325276245e9d8fcfa26 --- src/ch/FileFilter.cpp (.../FileFilter.cpp) (revision 591f291e22d2ece89acb266c8aa0b05c257a407c) +++ src/ch/FileFilter.cpp (.../FileFilter.cpp) (revision c54aa186fda8c0af84325325276245e9d8fcfa26) @@ -19,6 +19,7 @@ #include "stdafx.h" #include "FileInfo.h" #include "FileFilter.h" +#include "TConfig.h" //////////////////////////////////////////////////////////////////////////// bool _tcicmp(TCHAR c1, TCHAR c2) @@ -184,6 +185,124 @@ delete [] pszData; } +void CFileFilter::StoreInConfig(TConfig& rConfig) const +{ + rConfig.SetValue(_T("IncludeMask.Use"), m_bUseMask); + rConfig.SetValue(_T("IncludeMask.MaskList.Mask"), m_astrMask); + + rConfig.SetValue(_T("ExcludeMask.Use"), m_bUseExcludeMask); + rConfig.SetValue(_T("ExcludeMask.MaskList.Mask"), m_astrExcludeMask); + + rConfig.SetValue(_T("SizeA.Use"), m_bUseSize); + rConfig.SetValue(_T("SizeA.FilteringType"), m_iSizeType1); + rConfig.SetValue(_T("SizeA.Value"), m_ullSize1); + rConfig.SetValue(_T("SizeB.Use"), m_bUseSize2); + rConfig.SetValue(_T("SizeB.FilteringType"), m_iSizeType2); + rConfig.SetValue(_T("SizeB.Value"), m_ullSize2); + + rConfig.SetValue(_T("DateA.Use"), m_bUseDate); + rConfig.SetValue(_T("DateA.Type"), m_iDateType); // created/last modified/last accessed + rConfig.SetValue(_T("DateA.FilteringType"), m_iDateType1); // before/after + rConfig.SetValue(_T("DateA.EnableDatePart"), m_bDate1); + rConfig.SetValue(_T("DateA.DateValue"), m_tDate1.GetTime()); + rConfig.SetValue(_T("DateA.EnableTimePart"), m_bTime1); + rConfig.SetValue(_T("DateA.TimeValue"), m_tTime1.GetTime()); + + rConfig.SetValue(_T("DateB.Type"), m_bUseDate2); + rConfig.SetValue(_T("DateB.FilteringType"), m_iDateType2); + rConfig.SetValue(_T("DateB.EnableDatePart"), m_bDate2); + rConfig.SetValue(_T("DateB.DateValue"), m_tDate2.GetTime()); + rConfig.SetValue(_T("DateB.EnableTimePart"), m_bTime2); + rConfig.SetValue(_T("DateB.TimeValue"), m_tTime2.GetTime()); + + rConfig.SetValue(_T("Attributes.Use"), m_bUseAttributes); + rConfig.SetValue(_T("Attributes.Archive"), m_iArchive); + rConfig.SetValue(_T("Attributes.ReadOnly"), m_iReadOnly); + rConfig.SetValue(_T("Attributes.Hidden"), m_iHidden); + rConfig.SetValue(_T("Attributes.System"), m_iSystem); + rConfig.SetValue(_T("Attributes.Directory"), m_iDirectory); +} + +void CFileFilter::ReadFromConfig(const TConfig& rConfig) +{ + __time64_t tTime = 0; + + if(!rConfig.GetValue(_T("IncludeMask.Use"), m_bUseMask)) + m_bUseMask = false; + + m_astrMask.clear(); + rConfig.GetValue(_T("IncludeMask.MaskList.Mask"), m_astrMask); + + if(!rConfig.GetValue(_T("ExcludeMask.Use"), m_bUseExcludeMask)) + m_bUseExcludeMask = false; + + m_astrExcludeMask.clear(); + rConfig.GetValue(_T("ExcludeMask.MaskList.Mask"), m_astrExcludeMask); + + if(!rConfig.GetValue(_T("SizeA.Use"), m_bUseSize)) + m_bUseSize = false; + if(!rConfig.GetValue(_T("SizeA.FilteringType"), m_iSizeType1)) + m_iSizeType1 = EQ; + if(!rConfig.GetValue(_T("SizeA.Value"), m_ullSize1)) + m_ullSize1 = 0; + if(!rConfig.GetValue(_T("SizeB.Use"), m_bUseSize2)) + m_bUseSize2 = false; + if(!rConfig.GetValue(_T("SizeB.FilteringType"), m_iSizeType2)) + m_iSizeType2 = EQ; + if(!rConfig.GetValue(_T("SizeB.Value"), m_ullSize2)) + m_ullSize2 = 0; + + if(!rConfig.GetValue(_T("DateA.Use"), m_bUseDate)) + m_bUseDate = false; + + if(!rConfig.GetValue(_T("DateA.Type"), m_iDateType)) // created/last modified/last accessed + m_iDateType = DATE_CREATED; + if(!rConfig.GetValue(_T("DateA.FilteringType"), m_iDateType1)) // before/after + m_iDateType1 = EQ; + if(!rConfig.GetValue(_T("DateA.EnableDatePart"), m_bDate1)) + m_bDate1 = false; + + if(!rConfig.GetValue(_T("DateA.DateValue"), tTime)) + tTime = 0; + m_tDate1 = tTime; + + if(!rConfig.GetValue(_T("DateA.EnableTimePart"), m_bTime1)) + m_bTime1 = false; + + if(!rConfig.GetValue(_T("DateA.TimeValue"), tTime)) + tTime = 0; + m_tTime1 = tTime; + + if(!rConfig.GetValue(_T("DateB.Type"), m_bUseDate2)) + m_bUseDate2 = false; + if(!rConfig.GetValue(_T("DateB.FilteringType"), m_iDateType2)) + m_iDateType2 = EQ; + if(!rConfig.GetValue(_T("DateB.EnableDatePart"), m_bDate2)) + m_bDate2 = false; + + if(!rConfig.GetValue(_T("DateB.DateValue"), tTime)) + tTime = 0; + m_tDate2 = tTime; + if(!rConfig.GetValue(_T("DateB.EnableTimePart"), m_bTime2)) + m_bTime2 = false; + if(!rConfig.GetValue(_T("DateB.TimeValue"), tTime)) + tTime = 0; + m_tTime2 = tTime; + + if(!rConfig.GetValue(_T("Attributes.Use"), m_bUseAttributes)) + m_bUseAttributes = false; + if(!rConfig.GetValue(_T("Attributes.Archive"), m_iArchive)) + m_iArchive = 0; + if(!rConfig.GetValue(_T("Attributes.ReadOnly"), m_iReadOnly)) + m_iReadOnly = false; + if(!rConfig.GetValue(_T("Attributes.Hidden"), m_iHidden)) + m_iHidden = 0; + if(!rConfig.GetValue(_T("Attributes.System"), m_iSystem)) + m_iSystem = 0; + if(!rConfig.GetValue(_T("Attributes.Directory"), m_iDirectory)) + m_iDirectory = 0; +} + bool CFileFilter::Match(const CFileInfoPtr& spInfo) const { // check by mask @@ -467,6 +586,32 @@ return false; } +void CFiltersArray::StoreInConfig(TConfig& rConfig, PCTSTR pszNodeName) const +{ + rConfig.DeleteNode(pszNodeName); + BOOST_FOREACH(const CFileFilter& rFilter, m_vFilters) + { + TConfig cfgNode; + rFilter.StoreInConfig(cfgNode); + rConfig.AddSubConfig(CString(pszNodeName) + _T(".FilterDefinition"), cfgNode); + } +} + +void CFiltersArray::ReadFromConfig(const TConfig& rConfig, PCTSTR pszNodeName) +{ + m_vFilters.clear(); + + std::vector vConfigs; + rConfig.ExtractMultiSubConfigs(pszNodeName, vConfigs); + BOOST_FOREACH(const TConfig& rCfg, vConfigs) + { + CFileFilter tFilter; + tFilter.ReadFromConfig(rCfg); + + m_vFilters.push_back(tFilter); + } +} + bool CFiltersArray::IsEmpty() const { return m_vFilters.empty();