bool CTaskList::LoadTasks() { CINIFile* pTasksIni = new CINIFile(cTasksFile); CTask* pTask = NULL; CDateTime dtNow = DTNow(); int iSections = pTasksIni->GetSectionsCount(); for (int t = 0; t < iSections; t++) { CString sSect = pTasksIni->GetNextSection(); if (sSect.Empty()) continue; pTask = new CTask(); m_aTasks.Add(pTask); // Получим указатель на структуру, содержащую данные задачи PTaskInfo pTaskInfo = pTask->GetPTaskInfo(); // Заполним данные задачи из INI файла pTaskInfo->sName = sSect; pTaskInfo->sSrcFolder = pTasksIni->GetString(sSect.C(), TEXT("Source folder")); pTaskInfo->sDestFolder = pTasksIni->GetString(sSect.C(), TEXT("Dest folder")); pTaskInfo->sDestGenName = pTasksIni->GetString(sSect.C(), TEXT("Generate name")); pTaskInfo->sIncludeMask = pTasksIni->GetString(sSect.C(), TEXT("Incl mask")); pTaskInfo->sExcludeMask = pTasksIni->GetString(sSect.C(), TEXT("Excl mask")); pTaskInfo->bSubFolders = pTasksIni->GetBool(sSect.C(), TEXT("Subfolders")); pTaskInfo->bScheduled = pTasksIni->GetBool(sSect.C(), TEXT("Scheduled")); pTaskInfo->sSchedule = pTasksIni->GetString(sSect.C(), TEXT("Schedule")); pTaskInfo->bDoArchive = pTasksIni->GetBool(sSect.C(), TEXT("Do archive")); pTaskInfo->bArchCompress = pTasksIni->GetNumeric<BYTE>(sSect.C(), TEXT("Compress level")); pTaskInfo->bArchSFX = pTasksIni->GetBool(sSect.C(), TEXT("SFX")); pTaskInfo->bArchDelFiles = pTasksIni->GetBool(sSect.C(), TEXT("Del files")); pTaskInfo->bArchLock = pTasksIni->GetBool(sSect.C(), TEXT("Lock")); pTaskInfo->sArchTaskCmd = pTasksIni->GetString(sSect.C(), TEXT("Archiver cmd")); pTaskInfo->i64FinishedBytes = pTasksIni->GetNumeric<__int64>(sSect.C(), TEXT("Finished bytes")); // "Распакуем" строку последнего запуска в CDateTime CDateTime dtLastRun; dtLastRun.UnpackFromString(pTasksIni->GetString(sSect.C(), TEXT("Last run"), TEXT("00000000000000"))); pTask->SetLastRun(dtLastRun); // построим дерево расписания для задачи pTask->BuildScheduleTree(); // и подсчитаем время след. запуска pTask->CalcNextRun(dtNow); } delete pTasksIni; return true; }
CTask* CTaskList::AddTask(PTaskInfo TaskInfo) { // Создадим новый объект-задачу CTask* pTask = new CTask(); m_aTasks.Add(pTask); // Присвоим переданную информацию о задаче только что созданному объекту *(pTask->GetPTaskInfo()) = *TaskInfo; return pTask; }
bool CTaskList::SaveTasks() { //CMemTextFile* pTasks = new CMemTextFile(); //CMemOutUStream* pTasks = new CMemOutUStream(cTasksFile); CMemIniOutW* pTasks = new CMemIniOutW(cTasksFile); pTasks->AddString(L"Desc ", L"Small Backup tasks file"); pTasks->AddString(L"Version ", L"1"); pTasks->WriteLine(); for (int t = 0; t < m_aTasks.Size(); t++) { CTask* pTask = m_aTasks[t]; PTaskInfo pTaskInfo = pTask->GetPTaskInfo(); pTasks->AddSection( pTaskInfo->sName.C() ); pTasks->AddString( L"Source folder ", pTaskInfo->sSrcFolder.C() ); pTasks->AddString( L"Dest folder ", pTaskInfo->sDestFolder.C() ); pTasks->AddString( L"Generate name ", pTaskInfo->sDestGenName.C() ); pTasks->AddString( L"Incl mask ", pTaskInfo->sIncludeMask.C() ); pTasks->AddString( L"Excl mask ", pTaskInfo->sExcludeMask.C() ); pTasks->AddBoolean( L"Subfolders ", pTaskInfo->bSubFolders ); pTasks->AddBoolean( L"Scheduled ", pTaskInfo->bScheduled ); pTasks->AddString( L"Schedule ", pTaskInfo->sSchedule.C() ); pTasks->AddString( L"Last run ", pTask->GetLastRun().PackToString().C() ); pTasks->AddBoolean( L"Do archive ", pTaskInfo->bDoArchive ); pTasks->AddNumeric( L"Compress level ", pTaskInfo->bArchCompress ); pTasks->AddBoolean( L"SFX ", pTaskInfo->bArchSFX ); pTasks->AddBoolean( L"Del files ", pTaskInfo->bArchDelFiles ); pTasks->AddBoolean( L"Lock ", pTaskInfo->bArchLock ); pTasks->AddString( L"Archiver cmd ", pTaskInfo->sArchTaskCmd.C() ); pTasks->WriteLine(); pTasks->AddNumeric( L"Finished bytes ", pTaskInfo->i64FinishedBytes ); } pTasks->SaveFile(); delete pTasks; return true; }