Index: src/libchcore/TTask.cpp =================================================================== diff -u -N -rb1ecc12ba4c1f2a7b4acd6e82fc4193535e55ff0 -r9ba9390b8f79c7a3fd1f9d6d9e92038d92222621 --- src/libchcore/TTask.cpp (.../TTask.cpp) (revision b1ecc12ba4c1f2a7b4acd6e82fc4193535e55ff0) +++ src/libchcore/TTask.cpp (.../TTask.cpp) (revision 9ba9390b8f79c7a3fd1f9d6d9e92038d92222621) @@ -43,12 +43,12 @@ TTask::TTask(const ITaskSerializerPtr& spSerializer, IFeedbackHandler* piFeedbackHandler) : m_log(), m_piFeedbackHandler(piFeedbackHandler), - m_arrSourcePathsInfo(m_tTaskDefinition.GetSourcePaths()), - m_files(m_tTaskDefinition.GetSourcePaths()), + m_arrSourcePathsInfo(m_vSourcePaths), + m_files(m_vSourcePaths), m_bForce(false), m_bContinue(false), m_eCurrentState(eTaskState_None), - m_tSubTaskContext(m_tTaskDefinition, m_arrSourcePathsInfo, m_files, m_cfgTracker, m_log, piFeedbackHandler, m_workerThread, m_fsLocal), + m_tSubTaskContext(m_tConfiguration, m_arrSourcePathsInfo, m_files, m_cfgTracker, m_log, piFeedbackHandler, m_workerThread, m_fsLocal), m_tSubTasksArray(), m_spSerializer(spSerializer) { @@ -64,11 +64,16 @@ void TTask::SetTaskDefinition(const TTaskDefinition& rTaskDefinition) { - m_tTaskDefinition = rTaskDefinition; + m_pathDestinationPath = rTaskDefinition.GetDestinationPath(); + m_tConfiguration = rTaskDefinition.GetConfiguration(); + m_vSourcePaths = rTaskDefinition.GetSourcePaths(); + m_strTaskName = rTaskDefinition.GetTaskName(); - m_tSubTasksArray.Init(m_tTaskDefinition.GetOperationPlan(), m_tSubTaskContext); - m_arrSourcePathsInfo.SetCount(m_tTaskDefinition.GetSourcePathCount()); + m_tSubTasksArray.Init(rTaskDefinition.GetOperationPlan(), m_tSubTaskContext); + m_arrSourcePathsInfo.SetCount(m_vSourcePaths.GetCount()); m_files.Clear(); + m_tSubTaskContext.SetOperationType(m_tSubTasksArray.GetOperationType()); + m_tSubTaskContext.SetDestinationPath(m_pathDestinationPath); } void TTask::OnRegisterTask() @@ -94,30 +99,30 @@ void TTask::SetBufferSizes(const TBufferSizes& bsSizes) { - m_tTaskDefinition.GetConfiguration().DelayNotifications(); - SetTaskPropValue(m_tTaskDefinition.GetConfiguration(), bsSizes.GetDefaultSize()); - SetTaskPropValue(m_tTaskDefinition.GetConfiguration(), bsSizes.GetOneDiskSize()); - SetTaskPropValue(m_tTaskDefinition.GetConfiguration(), bsSizes.GetTwoDisksSize()); - SetTaskPropValue(m_tTaskDefinition.GetConfiguration(), bsSizes.GetCDSize()); - SetTaskPropValue(m_tTaskDefinition.GetConfiguration(), bsSizes.GetLANSize()); - SetTaskPropValue(m_tTaskDefinition.GetConfiguration(), bsSizes.IsOnlyDefault()); - m_tTaskDefinition.GetConfiguration().ResumeNotifications(); + m_tConfiguration.DelayNotifications(); + SetTaskPropValue(m_tConfiguration, bsSizes.GetDefaultSize()); + SetTaskPropValue(m_tConfiguration, bsSizes.GetOneDiskSize()); + SetTaskPropValue(m_tConfiguration, bsSizes.GetTwoDisksSize()); + SetTaskPropValue(m_tConfiguration, bsSizes.GetCDSize()); + SetTaskPropValue(m_tConfiguration, bsSizes.GetLANSize()); + SetTaskPropValue(m_tConfiguration, bsSizes.IsOnlyDefault()); + m_tConfiguration.ResumeNotifications(); } void TTask::GetBufferSizes(TBufferSizes& bsSizes) { - bsSizes.SetDefaultSize(GetTaskPropValue(m_tTaskDefinition.GetConfiguration())); - bsSizes.SetOneDiskSize(GetTaskPropValue(m_tTaskDefinition.GetConfiguration())); - bsSizes.SetTwoDisksSize(GetTaskPropValue(m_tTaskDefinition.GetConfiguration())); - bsSizes.SetCDSize(GetTaskPropValue(m_tTaskDefinition.GetConfiguration())); - bsSizes.SetLANSize(GetTaskPropValue(m_tTaskDefinition.GetConfiguration())); - bsSizes.SetOnlyDefault(GetTaskPropValue(m_tTaskDefinition.GetConfiguration())); + bsSizes.SetDefaultSize(GetTaskPropValue(m_tConfiguration)); + bsSizes.SetOneDiskSize(GetTaskPropValue(m_tConfiguration)); + bsSizes.SetTwoDisksSize(GetTaskPropValue(m_tConfiguration)); + bsSizes.SetCDSize(GetTaskPropValue(m_tConfiguration)); + bsSizes.SetLANSize(GetTaskPropValue(m_tConfiguration)); + bsSizes.SetOnlyDefault(GetTaskPropValue(m_tConfiguration)); } // thread void TTask::SetPriority(int nPriority) { - SetTaskPropValue(m_tTaskDefinition.GetConfiguration(), nPriority); + SetTaskPropValue(m_tConfiguration, nPriority); } void TTask::Load() @@ -135,7 +140,7 @@ // update members according to the task definition // make sure to resize paths info array size to match source paths count m_arrSourcePathsInfo.SetCount(m_tTaskDefinition.GetSourcePathCount()); - GetTaskPropValue(m_tTaskDefinition.GetConfiguration(), m_afFilters); + GetTaskPropValue(m_tConfiguration, m_afFilters); //////////////////////////////// // now rarely changing task progress data @@ -241,7 +246,7 @@ { boost::unique_lock lock(m_lock); - m_workerThread.StartThread(DelegateThreadProc, this, GetTaskPropValue(m_tTaskDefinition.GetConfiguration())); + m_workerThread.StartThread(DelegateThreadProc, this, GetTaskPropValue(m_tConfiguration)); } void TTask::ResumeProcessing() @@ -307,35 +312,35 @@ m_tLocalStats.GetSnapshot(spSnapshot); - spSnapshot->SetTaskName(m_tTaskDefinition.GetTaskName()); - spSnapshot->SetThreadPriority(GetTaskPropValue(m_tTaskDefinition.GetConfiguration())); - spSnapshot->SetDestinationPath(m_tTaskDefinition.GetDestinationPath().ToString()); + spSnapshot->SetTaskName(m_strTaskName); + spSnapshot->SetThreadPriority(GetTaskPropValue(m_tConfiguration)); + spSnapshot->SetDestinationPath(m_pathDestinationPath.ToString()); spSnapshot->SetFilters(m_afFilters); spSnapshot->SetTaskState(m_eCurrentState); - spSnapshot->SetOperationType(m_tTaskDefinition.GetOperationType()); + spSnapshot->SetOperationType(m_tSubTasksArray.GetOperationType()); - spSnapshot->SetIgnoreDirectories(GetTaskPropValue(m_tTaskDefinition.GetConfiguration())); - spSnapshot->SetCreateEmptyFiles(GetTaskPropValue(m_tTaskDefinition.GetConfiguration())); + spSnapshot->SetIgnoreDirectories(GetTaskPropValue(m_tConfiguration)); + spSnapshot->SetCreateEmptyFiles(GetTaskPropValue(m_tConfiguration)); TSubTaskStatsSnapshotPtr spCurrentSubTask = spSnapshot->GetSubTasksStats().GetCurrentSubTaskSnapshot(); int iCurrentBufferIndex = spCurrentSubTask ? spCurrentSubTask->GetCurrentBufferIndex() : TBufferSizes::eBuffer_Default; switch(iCurrentBufferIndex) { case TBufferSizes::eBuffer_Default: - spSnapshot->SetCurrentBufferSize(GetTaskPropValue(m_tTaskDefinition.GetConfiguration())); + spSnapshot->SetCurrentBufferSize(GetTaskPropValue(m_tConfiguration)); break; case TBufferSizes::eBuffer_OneDisk: - spSnapshot->SetCurrentBufferSize(GetTaskPropValue(m_tTaskDefinition.GetConfiguration())); + spSnapshot->SetCurrentBufferSize(GetTaskPropValue(m_tConfiguration)); break; case TBufferSizes::eBuffer_TwoDisks: - spSnapshot->SetCurrentBufferSize(GetTaskPropValue(m_tTaskDefinition.GetConfiguration())); + spSnapshot->SetCurrentBufferSize(GetTaskPropValue(m_tConfiguration)); break; case TBufferSizes::eBuffer_CD: - spSnapshot->SetCurrentBufferSize(GetTaskPropValue(m_tTaskDefinition.GetConfiguration())); + spSnapshot->SetCurrentBufferSize(GetTaskPropValue(m_tConfiguration)); break; case TBufferSizes::eBuffer_LAN: - spSnapshot->SetCurrentBufferSize(GetTaskPropValue(m_tTaskDefinition.GetConfiguration())); + spSnapshot->SetCurrentBufferSize(GetTaskPropValue(m_tConfiguration)); break; default: THROW_CORE_EXCEPTION(eErr_UnhandledCase); @@ -462,15 +467,15 @@ OnBeginOperation(); // enable configuration changes tracking - m_tTaskDefinition.GetConfiguration().ConnectToNotifier(TTaskConfigTracker::NotificationProc, &m_cfgTracker); - m_tTaskDefinition.GetConfiguration().ConnectToNotifier(TTask::OnCfgOptionChanged, this); + m_tConfiguration.ConnectToNotifier(TTaskConfigTracker::NotificationProc, &m_cfgTracker); + m_tConfiguration.ConnectToNotifier(TTask::OnCfgOptionChanged, this); // set thread options HANDLE hThread = GetCurrentThread(); - ::SetThreadPriorityBoost(hThread, GetTaskPropValue(m_tTaskDefinition.GetConfiguration())); + ::SetThreadPriorityBoost(hThread, GetTaskPropValue(m_tConfiguration)); // determine when to scan directories - bool bReadTasksSize = GetTaskPropValue(m_tTaskDefinition.GetConfiguration()); + bool bReadTasksSize = GetTaskPropValue(m_tConfiguration); // prepare context for subtasks if(bReadTasksSize) @@ -535,8 +540,8 @@ SetContinueFlag(false); SetForceFlag(false); - m_tTaskDefinition.GetConfiguration().DisconnectFromNotifier(TTaskConfigTracker::NotificationProc); - m_tTaskDefinition.GetConfiguration().DisconnectFromNotifier(TTask::OnCfgOptionChanged); + m_tConfiguration.DisconnectFromNotifier(TTaskConfigTracker::NotificationProc); + m_tConfiguration.DisconnectFromNotifier(TTask::OnCfgOptionChanged); // and the real end OnEndOperation(); @@ -547,8 +552,8 @@ { } - m_tTaskDefinition.GetConfiguration().DisconnectFromNotifier(TTaskConfigTracker::NotificationProc); - m_tTaskDefinition.GetConfiguration().DisconnectFromNotifier(TTask::OnCfgOptionChanged); + m_tConfiguration.DisconnectFromNotifier(TTaskConfigTracker::NotificationProc); + m_tConfiguration.DisconnectFromNotifier(TTask::OnCfgOptionChanged); // log m_log.loge(_T("Caught exception in ThrdProc")); @@ -609,7 +614,7 @@ if(rsetChanges.HasValue(TaskPropData::GetPropertyName())) { - pTask->m_workerThread.ChangePriority(GetTaskPropValue(pTask->GetTaskDefinition().GetConfiguration())); + pTask->m_workerThread.ChangePriority(GetTaskPropValue(pTask->m_tConfiguration)); } }