Files
ls-2019-source/extra/LS_Service/LS_launcher/Batch/BatchManager.cpp
T
2026-11-07 13:30:45 +07:00

232 lines
4.4 KiB
C++

#include "StdAfx.h"
#include "Batch.h"
#include "../resource.h"
#include "../BatchDialog.h"
#include "BatchManager.h"
CBatchManager::CBatchManager(void) : m_currentIndex(0), m_batchDlg(NULL), m_current(0), m_elapse(0), m_beginTime(0)
{
Init();
}
CBatchManager::~CBatchManager(void)
{
Destroy();
}
void CBatchManager::Init()
{
m_batchs.reserve( 32 );
if(!m_batchDlg)
{
m_batchDlg = new CBatchDialog();
m_batchDlg->Create(IDD_BATCH_DIALOG, NULL);
m_batchDlg->SetWindowPos(&m_batchDlg->wndTopMost, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
m_consoleMode = FALSE;
}
}
void CBatchManager::Destroy()
{
for( unsigned i = 0 ; i < m_batchs.size() ; i++ )
{
if( m_batchs[i] )
{
delete m_batchs[i];
}
}
m_batchs.clear();
}
void CBatchManager::ShowDialog()
{
if(m_batchDlg)
{
CString log;
log.Format(_T("Elapsed : %lu s"), 0);
m_batchDlg->UpdateBatchResult(log);
m_batchDlg->CenterWindow();
m_batchDlg->ShowWindow(SW_SHOW);
}
}
void CBatchManager::End()
{
}
BOOL CBatchManager::AddBatchFile( TCHAR* batchFileName, CLS_launcherDlg* launcher )
{
CString checkNull = batchFileName;
if(checkNull.IsEmpty())
return FALSE;
Batch* batch = new Batch;
if( !batch->OpenFile( batchFileName ) )
{
delete batch;
Error(_T("File open"), _T("failed"), TRUE);
return FALSE;
}
if( !batch->ScanProcess( &m_Scanner, launcher ) )
{
delete batch;
Error(_T("Command parsing"), _T("failed"));
return FALSE;
}
m_batchs.push_back( batch );
return TRUE;
}
BOOL CBatchManager::Execute()
{
if( m_batchs.empty() )
return FALSE;
if( m_currentIndex >= m_batchs.size() )
return TRUE;
for( m_currentIndex ; m_currentIndex < m_batchs.size() ; m_currentIndex++ )
{
Batch *batch = m_batchs[m_currentIndex];
if( !batch ) continue;
if( !batch->Execute(this) )
{
return FALSE;
}
}
return TRUE;
}
BOOL CBatchManager::CheckContinue()
{
if( m_batchs.empty() )
return FALSE;
if( m_currentIndex >= m_batchs.size() )
return FALSE;
return m_batchs[m_currentIndex]->CheckContinue();
}
BOOL CBatchManager::Next()
{
if( m_currentIndex >= m_batchs.size() )
return FALSE;
if( !m_batchs[m_currentIndex]->Next() )
{
m_currentIndex++;
if( m_currentIndex >= m_batchs.size() )
return FALSE;
}
return TRUE;
}
BOOL CBatchManager::HaveBaches()
{
if(m_batchs.size() > 0) return TRUE;
return FALSE;
}
int CBatchManager::BeginProgress(const TCHAR* title, const int progress, const TCHAR* result)
{
m_beginTime = GetTickCount();
m_batchDlg->BeginProgress(title, progress, result, m_current);
return m_current;
}
void CBatchManager::DoingProgress(const int progress)
{
m_batchDlg->DoingProgress(m_current, progress);
}
void CBatchManager::ShowExecuteResult(const TCHAR* result, BOOL quit)
{
if(IsConsoleMode())
{
_tprintf(_T("\t\t %s \n"), result);
}
}
void CBatchManager::EndProgress(const int progress, const TCHAR* result, BOOL quit)
{
DWORD elapse = GetTickCount() - m_beginTime;
m_elapse += elapse;
CString log;
log.Format(_T("Elapsed : %0.2lf s"), (double)m_elapse / 1000.0);
m_batchDlg->EndProgress(m_current, progress, result);
m_batchDlg->UpdateBatchResult(log);
ShowExecuteResult(result, quit);
}
void CBatchManager::EndProgress(const int progress, const TCHAR* result)
{
DWORD elapse = GetTickCount() - m_beginTime;
m_elapse += elapse;
CString log;
log.Format(_T("Elapsed : %0.2lf s"), (double)m_elapse / 1000.0);
m_batchDlg->EndProgress(m_current, progress, result);
m_batchDlg->UpdateBatchResult(log);
}
void CBatchManager::Error(const TCHAR* title, const TCHAR* result, BOOL quit)
{
BeginProgress(title, 0, result);
EndProgress(0, result);
if(IsConsoleMode())
{
_tprintf(_T("%s %s \n"), title, result);
}
else
ShowDialog();
}
void CBatchManager::ResetExecute()
{
for( UINT i = 0 ; i < m_batchs.size() ; i ++ )
{
Batch* batch = m_batchs[i];
if( !batch ) continue;
batch->ResetExecute();
}
m_currentIndex = 0;
}
DWORD CBatchManager::GetCurrentState()
{
if( m_currentIndex >= m_batchs.size() )
return CST_UNKNOWN_COMMAND;
return m_batchs[m_currentIndex]->GetCurrentState();
}
void CBatchManager::SetConsoleMode(BOOL mode)
{
m_consoleMode = mode;
}
BOOL CBatchManager::IsConsoleMode()
{
return m_consoleMode;
}