// 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;
}
