Index: src/libchcore/TSubTaskCopyMove.cpp =================================================================== diff -u -N -r0380c176d1cfcdfd1cd2adfe01d9c1c5c38df9f1 -r7ba9f25ab2c2a42bac9f5455ecb98aaf6e29f02d --- src/libchcore/TSubTaskCopyMove.cpp (.../TSubTaskCopyMove.cpp) (revision 0380c176d1cfcdfd1cd2adfe01d9c1c5c38df9f1) +++ src/libchcore/TSubTaskCopyMove.cpp (.../TSubTaskCopyMove.cpp) (revision 7ba9f25ab2c2a42bac9f5455ecb98aaf6e29f02d) @@ -48,6 +48,7 @@ #include "TFilesystemFeedbackWrapper.h" #include "TFilesystemFileFeedbackWrapper.h" #include "log.h" +#include "TDestinationPathProvider.h" namespace chcore { @@ -138,9 +139,6 @@ unsigned long long ullCurrentItemProcessedSize = m_tSubTaskStats.GetCurrentItemProcessedSize(); bool bCurrentFileSilentResume = m_tSubTaskStats.CanCurrentItemSilentResume(); - bool bIgnoreFolders = GetTaskPropValue(rConfig); - bool bForceDirectories = GetTaskPropValue(rConfig); - // create a buffer of size m_nBufferSize CUSTOM_COPY_PARAMS ccp; ccp.bProcessed = false; @@ -151,6 +149,14 @@ AdjustBufferIfNeeded(ccp.dbBuffer, ccp.tBufferSizes, true); + bool bIgnoreFolders = GetTaskPropValue(rConfig); + bool bForceDirectories = GetTaskPropValue(rConfig); + + TDestinationPathProvider tDstPathProvider(spFilesystem, pathDestination, + bIgnoreFolders, bForceDirectories, + GetTaskPropValue(GetContext().GetConfig()), + GetTaskPropValue(GetContext().GetConfig())); + // log TString strFormat; strFormat = _T("Processing files/folders (ProcessFiles):\r\n\tOnlyCreate: %create\r\n\tFiles/folders count: %filecount\r\n\tIgnore Folders: %ignorefolders\r\n\tDest path: %dstpath\r\n\tCurrent index (0-based): %currindex"); @@ -194,7 +200,7 @@ } // set dest path with filename - ccp.pathDstFile = CalculateDestinationPath(spFileInfo, pathDestination, ((int)bForceDirectories) << 1 | (int)bIgnoreFolders); + ccp.pathDstFile = tDstPathProvider.CalculateDestinationPath(spFileInfo); // are the files/folders lie on the same partition ? bool bMove = GetContext().GetOperationType() == eOperation_Move; @@ -263,7 +269,7 @@ TFileInfoPtr spFileInfo = rFilesCache.GetAt(fcAttrIndex - 1); if(spFileInfo->IsDirectory()) { - TSmartPath pathDstDir = CalculateDestinationPath(spFileInfo, pathDestination, ((int)bForceDirectories) << 1 | (int)bIgnoreFolders); + TSmartPath pathDstDir = tDstPathProvider.CalculateDestinationPath(spFileInfo); spFilesystem->SetFileDirectoryTime(pathDstDir, spFileInfo->GetCreationTime(), spFileInfo->GetLastAccessTime(), spFileInfo->GetLastWriteTime()); }