140 lines
3.1 KiB
C++
140 lines
3.1 KiB
C++
// ConsoleUpdaterDlg.cpp : 구현 파일
|
|
//
|
|
|
|
#include "stdafx.h"
|
|
#include "ConsoleUpdater.h"
|
|
#include "ConsoleUpdaterDlg.h"
|
|
|
|
#include "DownCallBack.h"
|
|
#include "../Common/RegUtil.h"
|
|
#include "unzip.h"
|
|
|
|
#ifdef _DEBUG
|
|
#define new DEBUG_NEW
|
|
#endif
|
|
|
|
|
|
CString GetErrorMessage(DWORD dwError);
|
|
|
|
// CConsoleUpdaterDlg 대화 상자
|
|
|
|
CConsoleUpdaterDlg::CConsoleUpdaterDlg(CWnd* pParent /*=NULL*/)
|
|
: CDialog(CConsoleUpdaterDlg::IDD, pParent)
|
|
{
|
|
m_iTerasferring = 0;
|
|
m_bIsSelfUpdate = FALSE;
|
|
}
|
|
|
|
void CConsoleUpdaterDlg::DoDataExchange(CDataExchange* pDX)
|
|
{
|
|
CDialog::DoDataExchange(pDX);
|
|
DDX_Control(pDX, IDC_STC_TITLE, m_stcTitle);
|
|
DDX_Control(pDX, IDC_PRG_TOTAL, m_prgTotal);
|
|
DDX_Control(pDX, IDC_PRG_NOW, m_prgNow);
|
|
}
|
|
|
|
BEGIN_MESSAGE_MAP(CConsoleUpdaterDlg, CDialog)
|
|
END_MESSAGE_MAP()
|
|
|
|
|
|
// CConsoleUpdaterDlg 메시지 처리기
|
|
|
|
BOOL CConsoleUpdaterDlg::OnInitDialog()
|
|
{
|
|
CDialog::OnInitDialog();
|
|
|
|
// TODO: 여기에 추가 초기화 작업을 추가합니다.
|
|
m_prgTotal.SetRange(0, 100);
|
|
m_prgTotal.SetStep(1);
|
|
m_prgTotal.SetPos(0);
|
|
|
|
m_prgNow.SetRange(0, 100);
|
|
m_prgNow.SetStep(1);
|
|
m_prgNow.SetPos(0);
|
|
|
|
ShowWindow(SW_SHOW);
|
|
|
|
// AfxBeginThread(Transfer, this);
|
|
Transfer();
|
|
|
|
return TRUE; // 컨트롤에 대한 포커스를 설정하지 않을 경우 TRUE를 반환합니다.
|
|
}
|
|
|
|
void CConsoleUpdaterDlg::SetFileList(CStringArray& saFile)
|
|
{
|
|
m_saFile.Copy(saFile);
|
|
|
|
m_nTotalCount = (int)m_saFile.GetCount();
|
|
}
|
|
|
|
UINT CConsoleUpdaterDlg::Transfer()
|
|
{
|
|
CString sTitle, // 전송창 제목
|
|
srcFile, // 전송 받을 파일명
|
|
dstFile, // 저장할 파일명
|
|
strTemp;
|
|
|
|
for (m_iTerasferring = 0; m_iTerasferring < m_nTotalCount; m_iTerasferring++)
|
|
{
|
|
m_prgNow.SetPos(0);
|
|
|
|
// 전송받을 파일명 설정
|
|
srcFile = DOWN_URL;
|
|
srcFile += "/" + m_saFile[m_iTerasferring].Mid(m_saFile[m_iTerasferring].ReverseFind('\\') + 1);
|
|
srcFile = srcFile.Left(srcFile.ReverseFind('.'));
|
|
srcFile += ".zip";
|
|
|
|
char szTemp[MAX_PATH]={0};
|
|
GetCurrentPath(szTemp);
|
|
dstFile.Format("%s\\update\\%s",szTemp,srcFile.Mid(srcFile.ReverseFind('/') + 1));
|
|
|
|
sTitle.Format("(%d / %d) %s 다운로드 중...", m_iTerasferring + 1, m_nTotalCount, srcFile.Mid(srcFile.ReverseFind('/') + 1));
|
|
m_stcTitle.SetWindowText(sTitle);
|
|
|
|
CDownCallback dcb;
|
|
dcb.m_pdlg = this;
|
|
|
|
if (URLDownloadToFile(NULL, srcFile, dstFile, 0, (IBindStatusCallback*)&dcb) != S_OK)
|
|
{
|
|
if (AfxMessageBox("파일 전송 중 에러가 발생했습니다.\n계속 하시겠습니까?", MB_YESNO | MB_ICONQUESTION) != IDYES)
|
|
{
|
|
OnCancel();
|
|
PostMessage(WM_CLOSE);
|
|
return -1;
|
|
}
|
|
}
|
|
|
|
// Unzip
|
|
HZIP hz = OpenZip(dstFile,0);
|
|
ZIPENTRY ze;
|
|
GetZipItem(hz,-1,&ze);
|
|
int numitems=ze.index;
|
|
|
|
strTemp.Format("%s\\update\\",szTemp);
|
|
SetUnzipBaseDir(hz,strTemp);
|
|
GetZipItem(hz,0,&ze);
|
|
UnzipItem(hz,0,ze.name);
|
|
|
|
srcFile.Format("%s\\%s",dstFile.Left(dstFile.ReverseFind('\\')),ze.name);
|
|
dstFile.Format("%s\\%s",szTemp,ze.name);
|
|
|
|
if(lstrcmpi(ze.name,_T("SP-Updater.exe")) == 0)
|
|
m_bIsSelfUpdate = TRUE;
|
|
else
|
|
{
|
|
if(CopyFile(srcFile,dstFile,FALSE))
|
|
{
|
|
DeleteFile(srcFile);
|
|
}
|
|
|
|
}
|
|
|
|
CloseZip(hz);
|
|
//
|
|
}
|
|
|
|
OnOK();
|
|
|
|
return 0;
|
|
}
|