Index: src/libchcore/TSubTaskFastMove.cpp =================================================================== diff -u -N -ra5f396da5ed5ffb3fcd9fdf22afb5a7fd07e1ab8 -r9ba9390b8f79c7a3fd1f9d6d9e92038d92222621 --- src/libchcore/TSubTaskFastMove.cpp (.../TSubTaskFastMove.cpp) (revision a5f396da5ed5ffb3fcd9fdf22afb5a7fd07e1ab8) +++ src/libchcore/TSubTaskFastMove.cpp (.../TSubTaskFastMove.cpp) (revision 9ba9390b8f79c7a3fd1f9d6d9e92038d92222621) @@ -25,7 +25,6 @@ #include #include "TSubTaskContext.h" #include "TTaskConfiguration.h" -#include "TTaskDefinition.h" #include "TLocalFilesystem.h" #include "FeedbackHandlerBase.h" #include "TBasePathData.h" @@ -115,30 +114,29 @@ // log icpf::log_file& rLog = GetContext().GetLog(); - TTaskDefinition& rTaskDefinition = GetContext().GetTaskDefinition(); IFeedbackHandler* piFeedbackHandler = GetContext().GetFeedbackHandler(); TWorkerThreadController& rThreadController = GetContext().GetThreadController(); TBasePathDataContainer& rBasePathDataContainer = GetContext().GetBasePathDataContainer(); + const TConfig& rConfig = GetContext().GetConfig(); + TSmartPath pathDestination = GetContext().GetDestinationPath(); rLog.logi(_T("Performing initial fast-move operation...")); // new stats m_tSubTaskStats.SetCurrentBufferIndex(TBufferSizes::eBuffer_Default); - m_tSubTaskStats.SetTotalCount(rTaskDefinition.GetSourcePathCount()); + m_tSubTaskStats.SetTotalCount(rBasePathDataContainer.GetBasePaths().GetCount()); m_tSubTaskStats.SetProcessedCount(0); m_tSubTaskStats.SetTotalSize(0); m_tSubTaskStats.SetProcessedSize(0); m_tSubTaskStats.SetCurrentPath(TString()); // read filtering options TFileFiltersArray afFilters; - GetTaskPropValue(rTaskDefinition.GetConfiguration(), afFilters); + GetTaskPropValue(rConfig, afFilters); - //wchar_t wchDestinationDriveLetter = rTaskDefinition.GetDestinationPath().GetDriveLetter(); + bool bIgnoreDirs = GetTaskPropValue(rConfig); + bool bForceDirectories = GetTaskPropValue(rConfig); - bool bIgnoreDirs = GetTaskPropValue(rTaskDefinition.GetConfiguration()); - bool bForceDirectories = GetTaskPropValue(rTaskDefinition.GetConfiguration()); - // when using special options with move operation, we don't want to use fast-moving, since most probably // some searching and special processing needs to be done if(bIgnoreDirs || bForceDirectories) @@ -149,11 +147,11 @@ bool bRetry = true; bool bSkipInputPath = false; - size_t stSize = rTaskDefinition.GetSourcePathCount(); + size_t stSize = rBasePathDataContainer.GetBasePaths().GetCount(); size_t stIndex = m_tProgressInfo.GetCurrentIndex(); for(; stIndex < stSize ; stIndex++) { - TSmartPath pathCurrent = rTaskDefinition.GetSourcePathAt(stIndex); + TSmartPath pathCurrent = rBasePathDataContainer.GetBasePaths().GetAt(stIndex); // store currently processed index m_tProgressInfo.SetCurrentIndex(stIndex); @@ -179,7 +177,7 @@ bRetry = false; // read attributes of src file/folder - bool bExists = TLocalFilesystem::GetFileInfo(pathCurrent, spFileInfo, stIndex, &rTaskDefinition.GetSourcePaths()); + bool bExists = TLocalFilesystem::GetFileInfo(pathCurrent, spFileInfo, stIndex, &rBasePathDataContainer.GetBasePaths()); if(!bExists) { FEEDBACK_FILEERROR ferr = { pathCurrent.ToString(), NULL, eFastMoveError, ERROR_FILE_NOT_FOUND }; @@ -224,8 +222,9 @@ bool bResult = true; do { - TSmartPath pathDestinationPath = CalculateDestinationPath(spFileInfo, rTaskDefinition.GetDestinationPath(), 0); - bResult = TLocalFilesystem::FastMove(rTaskDefinition.GetSourcePathAt(stIndex), pathDestinationPath); + TSmartPath pathDestinationPath = CalculateDestinationPath(spFileInfo, pathDestination, 0); + TSmartPath pathSrc = rBasePathDataContainer.GetBasePaths().GetAt(stIndex); + bResult = TLocalFilesystem::FastMove(pathSrc, pathDestinationPath); if(!bResult) { DWORD dwLastError = GetLastError(); @@ -242,10 +241,10 @@ strFormat = _T("Error %errno while calling fast move %srcpath -> %dstpath (TSubTaskFastMove)"); strFormat.Replace(_T("%errno"), boost::lexical_cast(dwLastError).c_str()); strFormat.Replace(_T("%srcpath"), spFileInfo->GetFullFilePath().ToString()); - strFormat.Replace(_T("%dstpath"), rTaskDefinition.GetDestinationPath().ToString()); + strFormat.Replace(_T("%dstpath"), pathDestination.ToString()); rLog.loge(strFormat); - FEEDBACK_FILEERROR ferr = { rTaskDefinition.GetSourcePathAt(stIndex).ToString(), pathDestinationPath.ToString(), eFastMoveError, dwLastError }; + FEEDBACK_FILEERROR ferr = { pathSrc.ToString(), pathDestinationPath.ToString(), eFastMoveError, dwLastError }; IFeedbackHandler::EFeedbackResult frResult = (IFeedbackHandler::EFeedbackResult)piFeedbackHandler->RequestFeedback(IFeedbackHandler::eFT_FileError, &ferr); switch(frResult) {