Index: src/ch/task.cpp =================================================================== diff -u -N -r6e8aa26e2428e3bc71099255c5911f57bc722100 -r8dd3566d66a35a662872eaaa45eef5049e71c3dc --- src/ch/task.cpp (.../task.cpp) (revision 6e8aa26e2428e3bc71099255c5911f57bc722100) +++ src/ch/task.cpp (.../task.cpp) (revision 8dd3566d66a35a662872eaaa45eef5049e71c3dc) @@ -31,14 +31,14 @@ #include "TTaskConfiguration.h" #include "TSubTaskContext.h" -#include "Device IO.h" #include "TLocalFilesystem.h" #include "TSubTaskScanDirectory.h" #include "TSubTaskCopyMove.h" #include "TSubTaskDelete.h" //////////////////////////////////////////////////////////////////////////// // CTask members + CTask::CTask(chcore::IFeedbackHandler* piFeedbackHandler, size_t stSessionUniqueID) : m_log(), m_piFeedbackHandler(piFeedbackHandler), @@ -943,8 +943,30 @@ m_piFeedbackFactory = piFeedbackHandlerFactory; } -CTaskPtr CTaskArray::CreateTask() +CTaskPtr CTaskArray::CreateTask(const TTaskDefinition& tTaskDefinition) { + CTaskPtr spTask = CreateEmptyTask(); + if(spTask) + { + spTask->SetTaskDefinition(tTaskDefinition); + Add(spTask); + spTask->Store(); + } + + return spTask; +} + +CTaskPtr CTaskArray::ImportTask(const CString& strTaskPath) +{ + // load task definition from the new location + TTaskDefinition tTaskDefinition; + tTaskDefinition.Load(strTaskPath); + + return CreateTask(tTaskDefinition); +} + +CTaskPtr CTaskArray::CreateEmptyTask() +{ BOOST_ASSERT(m_piFeedbackFactory); if(!m_piFeedbackFactory) return CTaskPtr(); @@ -954,7 +976,7 @@ return CTaskPtr(); BOOST_ASSERT(m_stNextSessionUniqueID != NO_TASK_SESSION_UNIQUE_ID); - CTaskPtr spTask(boost::make_shared(piHandler, m_stNextSessionUniqueID++)); + CTaskPtr spTask(new CTask(piHandler, m_stNextSessionUniqueID++)); // NO_TASK_SESSION_UNIQUE_ID is a special value so it should not be used to identify tasks if(m_stNextSessionUniqueID == NO_TASK_SESSION_UNIQUE_ID) @@ -1151,7 +1173,7 @@ bWorking = finder.FindNextFile(); // load data - spTask = CreateTask(); + spTask = CreateEmptyTask(); try { spTask->Load(finder.GetFilePath());