#include "headers.hxx" #include "UpdatesPage.hpp" #include "resource.h" #include "common.hpp" #include "repair.hpp" #include "AnalisysResults.hpp" #include "CSVDSReader.hpp" UpdatesPage::UpdatesPage ( const CSVDSReader& csvReader409_, const CSVDSReader& csvReaderIntl_, const String& domain_, const String& rootContainerDn_, const String& ldiffName_, const String& csvName_, const String& saveName_, const String& logPath_, AnalisysResults& res, bool *someRepairWasRun_ ) : csvReader409(csvReader409_), csvReaderIntl(csvReaderIntl_), domain(domain_), rootContainerDn(rootContainerDn_), ldiffName(ldiffName_), csvName(csvName_), saveName(saveName_), logPath(logPath_), results(res), someRepairWasRun(someRepairWasRun_), WizardPage ( IDD_UPDATES, IDS_UPDATES_PAGE_TITLE, IDS_UPDATES_PAGE_SUBTITLE, true ) { LOG_CTOR(UpdatesPage); } UpdatesPage::~UpdatesPage() { LOG_DTOR(UpdatesPage); } long WINAPI startRepair(long arg) { LOG_FUNCTION(startRepair); UpdatesPage *page=(UpdatesPage *)arg; HRESULT hr=S_OK; do { // CoInitialize must be called per thread hr = ::CoInitialize(0); ASSERT(SUCCEEDED(hr)); Repair repair ( page->csvReader409, page->csvReaderIntl, page->domain, page->rootContainerDn, page->results, page->ldiffName, page->csvName, page->saveName, page->logPath, page, page->someRepairWasRun ); HWND prog=GetDlgItem(page->hwnd,IDC_PROGRESS_REPAIR); long nProgress=repair.getTotalProgress(); SendMessage(prog,PBM_SETRANGE,0,MAKELPARAM(0, nProgress)); hr=repair.run(); CoUninitialize(); BREAK_ON_FAILED_HRESULT(hr); } while(0); hrError=hr; page->FinishProgress(); return 0; } bool UpdatesPage::OnSetActive() { LOG_FUNCTION(UpdatesPage::OnSetActive); EnableWindow(GetDlgItem(Win::GetParent(hwnd),IDCANCEL),false); Win::PropSheet_SetWizButtons( Win::GetParent(hwnd), 0 ); pos=0; HANDLE hA=CreateThread( NULL,0, (LPTHREAD_START_ROUTINE) startRepair, this, 0, 0 ); CloseHandle(hA); return true; } void UpdatesPage::StepProgress(long steps) { LOG_FUNCTION(UpdatesPage::StepProgress); HWND prog=GetDlgItem(hwnd,IDC_PROGRESS_REPAIR); pos+=steps; SendMessage(prog,PBM_SETPOS,pos,0); } void UpdatesPage::FinishProgress() { LOG_FUNCTION(UpdatesPage::FinishProgress); Win::PropSheet_SetWizButtons(Win::GetParent(hwnd),PSWIZB_NEXT); if (FAILED(hrError)) { error=String::format(IDS_REPAIR_ERROR,error.c_str()); } HWND text=GetDlgItem(hwnd,IDC_UPDATE_COMPLETE); Win::ShowWindow(text,SW_SHOW); Win::PropSheet_SetWizButtons( Win::GetParent(hwnd), PSWIZB_NEXT ); }