1687 lines
42 KiB
C++
1687 lines
42 KiB
C++
// MainFrm.cpp : CMainFrame 클래스의 구현
|
|
//
|
|
|
|
#include "stdafx.h"
|
|
#include "ConsoleApp.h"
|
|
#include "MainFrm.h"
|
|
|
|
#include "RemoteView.h"
|
|
#include "RemoteTreeCtrl.h"
|
|
#include "RemoteListCtrl.h"
|
|
#include "LocalView.h"
|
|
#include "LocalTreeCtrl.h"
|
|
#include "LocalListCtrl.h"
|
|
|
|
#include "ConnectDlg.h"
|
|
#include "ConfigDlg.h"
|
|
#include "RegUtil.h"
|
|
#include "Crypt.h"
|
|
|
|
#include "Struct.h"
|
|
|
|
#ifdef _DEBUG
|
|
#define new DEBUG_NEW
|
|
#endif
|
|
|
|
|
|
CString GetErrorMessage(DWORD dwError);
|
|
|
|
bool WriteFile(HANDLE hFile, LPCVOID lpBuffer, DWORD nNumberOfBytesToWrite);
|
|
int GetCurrentPath(char* pszPath);
|
|
|
|
// CMainFrame
|
|
|
|
IMPLEMENT_DYNAMIC(CMainFrame, CFrameWnd)
|
|
|
|
BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
|
|
ON_WM_CREATE()
|
|
ON_WM_CLOSE()
|
|
ON_WM_SIZE()
|
|
ON_WM_ERASEBKGND()
|
|
ON_COMMAND(ID_FILE_RECONNECT, OnFileReconnect)
|
|
ON_UPDATE_COMMAND_UI(ID_FILE_RECONNECT, OnUpdateFileReconnect)
|
|
ON_COMMAND(ID_FILE_DISCONNECT, OnFileDisconnect)
|
|
ON_UPDATE_COMMAND_UI(ID_FILE_DISCONNECT, OnUpdateFileDisconnect)
|
|
ON_COMMAND(ID_FILE_UPLOAD, OnFileUpload)
|
|
ON_UPDATE_COMMAND_UI(ID_FILE_UPLOAD, OnUpdateFileUpload)
|
|
ON_COMMAND(ID_FILE_DOWNLOAD, OnFileDownload)
|
|
ON_UPDATE_COMMAND_UI(ID_FILE_DOWNLOAD, OnUpdateFileDownload)
|
|
ON_COMMAND(ID_VIEW_REFRESH, OnViewRefresh)
|
|
ON_COMMAND(ID_VIEW_LTREE, OnViewLtree)
|
|
ON_UPDATE_COMMAND_UI(ID_VIEW_LTREE, OnUpdateViewLtree)
|
|
ON_COMMAND(ID_VIEW_RTREE, OnViewRtree)
|
|
ON_UPDATE_COMMAND_UI(ID_VIEW_RTREE, OnUpdateViewRtree)
|
|
ON_COMMAND(ID_VIEW_LSTATUS, OnViewLstatus)
|
|
ON_UPDATE_COMMAND_UI(ID_VIEW_LSTATUS, OnUpdateViewLstatus)
|
|
ON_COMMAND(ID_VIEW_RSTATUS, OnViewRstatus)
|
|
ON_UPDATE_COMMAND_UI(ID_VIEW_RSTATUS, OnUpdateViewRstatus)
|
|
ON_COMMAND(ID_VIEW_MID_TOOLBAR, OnViewMidToolbar)
|
|
ON_UPDATE_COMMAND_UI(ID_VIEW_MID_TOOLBAR, OnUpdateViewMidToolbar)
|
|
ON_COMMAND(ID_VIEW_RLIST_TYPE1, OnViewRlistType1)
|
|
ON_UPDATE_COMMAND_UI(ID_VIEW_RLIST_TYPE1, OnUpdateViewRlistType1)
|
|
ON_COMMAND(ID_VIEW_RLIST_TYPE2, OnViewRlistType2)
|
|
ON_UPDATE_COMMAND_UI(ID_VIEW_RLIST_TYPE2, OnUpdateViewRlistType2)
|
|
ON_COMMAND(ID_VIEW_RLIST_TYPE3, OnViewRlistType3)
|
|
ON_UPDATE_COMMAND_UI(ID_VIEW_RLIST_TYPE3, OnUpdateViewRlistType3)
|
|
ON_COMMAND(ID_VIEW_RLIST_TYPE4, OnViewRlistType4)
|
|
ON_UPDATE_COMMAND_UI(ID_VIEW_RLIST_TYPE4, OnUpdateViewRlistType4)
|
|
ON_COMMAND(ID_VIEW_LLIST_TYPE0, OnViewLlistType0)
|
|
ON_UPDATE_COMMAND_UI(ID_VIEW_LLIST_TYPE0, OnUpdateViewLlistType0)
|
|
ON_COMMAND(ID_VIEW_LLIST_TYPE1, OnViewLlistType1)
|
|
ON_UPDATE_COMMAND_UI(ID_VIEW_LLIST_TYPE1, OnUpdateViewLlistType1)
|
|
ON_COMMAND(ID_VIEW_LLIST_TYPE2, OnViewLlistType2)
|
|
ON_UPDATE_COMMAND_UI(ID_VIEW_LLIST_TYPE2, OnUpdateViewLlistType2)
|
|
ON_COMMAND(ID_VIEW_LLIST_TYPE3, OnViewLlistType3)
|
|
ON_UPDATE_COMMAND_UI(ID_VIEW_LLIST_TYPE3, OnUpdateViewLlistType3)
|
|
ON_COMMAND(ID_VIEW_LLIST_TYPE4, OnViewLlistType4)
|
|
ON_UPDATE_COMMAND_UI(ID_VIEW_LLIST_TYPE4, OnUpdateViewLlistType4)
|
|
ON_COMMAND(ID_CFG_OVERWITE_ASK, OnCfgOverwriteAsk)
|
|
ON_UPDATE_COMMAND_UI(ID_CFG_OVERWITE_ASK, OnUpdateCfgOverwriteAsk)
|
|
ON_COMMAND(ID_CFG_OVERWITE1, OnCfgOverwrite1)
|
|
ON_UPDATE_COMMAND_UI(ID_CFG_OVERWITE1, OnUpdateCfgOverwrite1)
|
|
ON_COMMAND(ID_CFG_OVERWITE2, OnCfgOverwrite2)
|
|
ON_UPDATE_COMMAND_UI(ID_CFG_OVERWITE2, OnUpdateCfgOverwrite2)
|
|
ON_COMMAND(ID_CFG_OVERWITE3, OnCfgOverwrite3)
|
|
ON_UPDATE_COMMAND_UI(ID_CFG_OVERWITE3, OnUpdateCfgOverwrite3)
|
|
ON_COMMAND(ID_CFG_OVERWITE4, OnCfgOverwrite4)
|
|
ON_UPDATE_COMMAND_UI(ID_CFG_OVERWITE4, OnUpdateCfgOverwrite4)
|
|
ON_COMMAND(ID_CFG_CONFIG, OnCfgConfig)
|
|
|
|
ON_MESSAGE(WMU_TRANSFER_DLG_CLOSE, OnTransferDlgClose)
|
|
ON_MESSAGE(WMU_UPDATE_CONTROL_STATUS, OnUpdateControlStatus)
|
|
|
|
ON_XTP_CREATECONTROL()
|
|
END_MESSAGE_MAP()
|
|
|
|
|
|
// CMainFrame 생성/소멸
|
|
|
|
CMainFrame::CMainFrame()
|
|
{
|
|
// Load windows status...
|
|
m_bShowTopToolBar = COptions::GetOptionVal(OPTION_SHOWTOPTOOLBAR);
|
|
m_bShowMidToolBar = COptions::GetOptionVal(OPTION_SHOWMIDTOOLBAR);
|
|
|
|
m_bShowRemoteTree = COptions::GetOptionVal(OPTION_SHOWREMOTETREE);
|
|
m_bShowLocalTree = COptions::GetOptionVal(OPTION_SHOWLOCALTREE);
|
|
|
|
m_nRemoteListType = COptions::GetOptionVal(OPTION_REMOTELISTSTYLE);
|
|
m_nLocalListType = COptions::GetOptionVal(OPTION_LOCALLISTSTYLE);
|
|
|
|
m_bShowRemoteStatus = COptions::GetOptionVal(OPTION_SHOWREMOTESTATUS);
|
|
m_bShowLocalStatus = COptions::GetOptionVal(OPTION_SHOWLOCALSTATUS);
|
|
|
|
m_fl = FL_LOCAL;
|
|
|
|
// Initialize...
|
|
m_cbs = CBS_NONE;
|
|
m_bDragFromRemote = false;
|
|
m_htiDragTarget = NULL;
|
|
|
|
m_bInitialzed = false;
|
|
|
|
m_bSizing = false;
|
|
}
|
|
|
|
CMainFrame::~CMainFrame()
|
|
{
|
|
}
|
|
|
|
|
|
BOOL CMainFrame::PreTranslateMessage(MSG* pMsg)
|
|
{
|
|
switch (pMsg->message) {
|
|
case WM_KEYDOWN:
|
|
if (pMsg->wParam == VK_TAB) {
|
|
CWnd *pwndFocused = GetFocus();
|
|
|
|
// 정방향
|
|
if (!(GetKeyState(VK_SHIFT) & 128))
|
|
return TRUE;
|
|
// 역방향
|
|
else
|
|
return TRUE;
|
|
}
|
|
break;
|
|
}
|
|
|
|
return CFrameWnd::PreTranslateMessage(pMsg);
|
|
}
|
|
|
|
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
|
|
{
|
|
if (!CFrameWnd::PreCreateWindow(cs))
|
|
return FALSE;
|
|
|
|
|
|
cs.dwExStyle &= ~WS_EX_CLIENTEDGE;
|
|
cs.lpszClass = AfxRegisterWndClass(0);
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT /*lpcs*/, CCreateContext* pContext)
|
|
{
|
|
NONCLIENTMETRICS nc;
|
|
ZeroMemory(&nc, sizeof(nc));
|
|
nc.cbSize = sizeof(nc);
|
|
|
|
SystemParametersInfo(SPI_GETNONCLIENTMETRICS, 0, &nc, 0);
|
|
m_font.CreateFontIndirect(&nc.lfMenuFont);
|
|
SetFont(&m_font);
|
|
|
|
if (!m_splitter.CreateStatic(this, 2, 1)) {
|
|
TRACE0("Failed to create splitter window\n");
|
|
return FALSE;
|
|
}
|
|
|
|
if (!m_splitter.CreateView(0, 0, RUNTIME_CLASS(CRemoteView), CSize(0, 0), pContext)) {
|
|
TRACE0("Failed to create CView1\n");
|
|
return FALSE;
|
|
}
|
|
|
|
if (!m_splitter.CreateView(1, 0, RUNTIME_CLASS(CLocalView), CSize(0, 0), pContext)) {
|
|
TRACE0("Failed to create CView2\n");
|
|
return FALSE;
|
|
}
|
|
|
|
m_splitter.SetSplitterStyle(XT_SPLIT_NOFULLDRAG | XT_SPLIT_NOBORDER);
|
|
|
|
m_pRemoteView = (CRemoteView*)m_splitter.GetPane(0, 0);
|
|
m_pLocalView = (CLocalView*)m_splitter.GetPane(1, 0);
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
// CMainFrame 진단
|
|
|
|
#ifdef _DEBUG
|
|
void CMainFrame::AssertValid() const
|
|
{
|
|
CFrameWnd::AssertValid();
|
|
}
|
|
|
|
void CMainFrame::Dump(CDumpContext& dc) const
|
|
{
|
|
CFrameWnd::Dump(dc);
|
|
}
|
|
|
|
#endif //_DEBUG
|
|
|
|
|
|
// CMainFrame 메시지 처리기
|
|
|
|
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
|
|
{
|
|
if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
|
|
return -1;
|
|
|
|
if (!InitCommandBars())
|
|
return -1;
|
|
|
|
CXTPCommandBars* pCommandBars = GetCommandBars();
|
|
|
|
CXTPMenuBar* pMenuBar = pCommandBars->SetMenu(_T("Menu Bar"), IDR_MAINFRAME);
|
|
if (!pMenuBar) {
|
|
TRACE0("Failed to create menubar\n");
|
|
return -1;
|
|
}
|
|
|
|
#ifdef _OPENDISK
|
|
CXTPControls* pControls = NULL;
|
|
pControls = pMenuBar->GetControls();
|
|
pControls->FindControl(xtpControlButton, ID_HELP_HOMEPAGE, FALSE, TRUE)->SetCaption("Opendisk Console 홈페이지(&G)");
|
|
pControls->FindControl(xtpControlButton, ID_APP_ABOUT, FALSE, TRUE)->SetCaption("Opendisk Console 정보(&A)");
|
|
#endif
|
|
|
|
CXTPToolBar* pToolBar = (CXTPToolBar *)pCommandBars->Add(_T("Tool Bar"), xtpBarTop);
|
|
if (!pToolBar || !pToolBar->LoadToolBar(IDR_MAINFRAME)) {
|
|
TRACE0("Failed to create toolbar\n");
|
|
return -1;
|
|
}
|
|
|
|
UINT nCommands[] = {ID_FILE_RECONNECT, ID_FILE_DISCONNECT, ID_VIEW_REFRESH, ID_VIEW_RTREE, ID_VIEW_LTREE, ID_CFG_CONFIG};
|
|
|
|
CXTPPaintManager* pPaintManager = new CXTPNativeXPTheme();
|
|
|
|
XTP_COMMANDBARS_ICONSINFO* pIconinfo = pPaintManager->GetIconsInfo();
|
|
pIconinfo->bUseDisabledIcons = TRUE;
|
|
pIconinfo->bUseFadedIcons = TRUE;
|
|
pIconinfo->bIconsWithShadow = FALSE;
|
|
|
|
XTPPaintManager()->SetCustomTheme(pPaintManager);
|
|
XTPImageManager()->SetIcons(IDB_TOOLBAR, nCommands, sizeof(nCommands) / sizeof(UINT), CSize(24, 24));
|
|
XTPImageManager()->SetIcons(IDB_MENUBAR, nCommands, sizeof(nCommands) / sizeof(UINT), CSize(16, 16));
|
|
|
|
pCommandBars->GetCommandBarsOptions()->szLargeIcons = CSize(24, 24);
|
|
pCommandBars->GetCommandBarsOptions()->bLargeIcons = TRUE;
|
|
|
|
pCommandBars->GetCommandBarsOptions()->bShowExpandButtonAlways = FALSE;
|
|
|
|
RedrawWindow(NULL, NULL, RDW_INVALIDATE | RDW_UPDATENOW | RDW_ERASE | RDW_ALLCHILDREN);
|
|
|
|
GetCommandBars()->RedrawCommandBars();
|
|
|
|
SetIcon(::LoadIcon(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDR_MAINFRAME)), FALSE);
|
|
|
|
RestorePlacement();
|
|
|
|
LPITEMIDLIST piil;
|
|
SHFILEINFO shfi;
|
|
|
|
SHGetSpecialFolderLocation(m_hWnd, CSIDL_DRIVES, &piil);
|
|
SHGetFileInfo((LPCTSTR)piil, 0, &shfi, sizeof(shfi), SHGFI_PIDL | SHGFI_ICON | SHGFI_SMALLICON);
|
|
m_iComputerIcon = shfi.iIcon;
|
|
CoTaskMemFree(piil);
|
|
|
|
SHGetSpecialFolderLocation(m_hWnd, CSIDL_NETWORK, &piil);
|
|
SHGetFileInfo((LPCTSTR)piil, 0, &shfi, sizeof(shfi), SHGFI_PIDL | SHGFI_ICON | SHGFI_SMALLICON);
|
|
m_iNetworkIcon = shfi.iIcon;
|
|
CoTaskMemFree(piil);
|
|
|
|
int cDrive = 'C';
|
|
char szDrive[MAX_PATH];
|
|
while (TRUE) {
|
|
sprintf(szDrive, "%c:\\", cDrive);
|
|
if (!SHGetFileInfo(szDrive, 0, &shfi, sizeof(shfi), SHGFI_ICON | SHGFI_SMALLICON)) {
|
|
cDrive++;
|
|
continue;
|
|
}
|
|
|
|
m_iDriveIcon = shfi.iIcon;
|
|
break;
|
|
}
|
|
|
|
SHGetFileInfo("", FILE_ATTRIBUTE_DIRECTORY, &shfi, sizeof(shfi), SHGFI_ICON | SHGFI_SMALLICON);
|
|
m_iFolderIcon = shfi.iIcon;
|
|
|
|
m_bmFolder.LoadBitmap(IDB_M_FOLDER);
|
|
m_bmCopy.LoadBitmap(IDB_M_COPY);
|
|
m_bmCut.LoadBitmap(IDB_M_CUT);
|
|
m_bmPaste.LoadBitmap(IDB_M_PASTE);
|
|
|
|
SetWindowText(APP_TITLE);
|
|
|
|
PostMessage(WMU_UPDATE_CONTROL_STATUS);
|
|
|
|
ShowWindow(SW_SHOW);
|
|
SetForegroundWindow();
|
|
|
|
m_pwndRemote = &m_pRemoteView->m_tree;
|
|
m_pwndLocal = &m_pLocalView->m_tree;
|
|
|
|
ShowLoginDialog();
|
|
|
|
return 0;
|
|
}
|
|
|
|
void CMainFrame::OnClose()
|
|
{
|
|
CString sPos;
|
|
|
|
// dadamin add
|
|
Disconnect();
|
|
// dadamin add
|
|
|
|
WINDOWPLACEMENT wp;
|
|
GetWindowPlacement(&wp);
|
|
|
|
int nStatus = 0;
|
|
if (wp.showCmd == SW_MAXIMIZE || wp.showCmd == SW_SHOWMAXIMIZED)
|
|
nStatus = 1;
|
|
|
|
sPos.Format(_T("%d %d %d %d %d"), nStatus, wp.rcNormalPosition.left, wp.rcNormalPosition.top, wp.rcNormalPosition.right, wp.rcNormalPosition.bottom);
|
|
|
|
COptions::SetOption(OPTION_WINDOWSPOS, sPos);
|
|
|
|
// Splitter 위치 저장
|
|
int nCurRowSize, nMinRowSize;
|
|
m_splitter.GetRowInfo(0, nCurRowSize, nMinRowSize);
|
|
sPos.Format("%d", nCurRowSize);
|
|
COptions::SetOption(OPTION_SPLITTERSIZE, sPos);
|
|
|
|
CFrameWnd::OnClose();
|
|
}
|
|
|
|
void CMainFrame::OnSize(UINT nType, int cx, int cy)
|
|
{
|
|
// m_bSizing = true;
|
|
|
|
CFrameWnd::OnSize(nType, cx, cy);
|
|
|
|
// m_bSizing = false;
|
|
}
|
|
|
|
BOOL CMainFrame::OnEraseBkgnd(CDC* pDC)
|
|
{
|
|
return TRUE;
|
|
}
|
|
|
|
void CMainFrame::OnFileReconnect()
|
|
{
|
|
if (AfxMessageBox("다시 접속 하시겠습니까?", MB_YESNO | MB_ICONQUESTION) != IDYES)
|
|
return;
|
|
|
|
Disconnect();
|
|
Connect();
|
|
}
|
|
|
|
void CMainFrame::OnUpdateFileReconnect(CCmdUI *pCmdUI)
|
|
{
|
|
pCmdUI->Enable(m_mapHcl.GetCount() > 0);
|
|
}
|
|
|
|
void CMainFrame::OnFileDisconnect()
|
|
{
|
|
if (AfxMessageBox("접속을 끊으시겠습니까?", MB_YESNO | MB_ICONQUESTION) != IDYES)
|
|
return;
|
|
|
|
Disconnect();
|
|
ShowLoginDialog();
|
|
}
|
|
|
|
void CMainFrame::OnUpdateFileDisconnect(CCmdUI *pCmdUI)
|
|
{
|
|
pCmdUI->Enable(m_mapHcl.GetCount() > 0);
|
|
}
|
|
|
|
void CMainFrame::OnFileUpload()
|
|
{
|
|
Upload();
|
|
}
|
|
|
|
void CMainFrame::OnUpdateFileUpload(CCmdUI *pCmdUI)
|
|
{
|
|
pCmdUI->Enable(m_pLocalView->m_btnUpload.IsWindowEnabled());
|
|
}
|
|
|
|
void CMainFrame::OnFileDownload()
|
|
{
|
|
Download();
|
|
}
|
|
|
|
void CMainFrame::OnUpdateFileDownload(CCmdUI *pCmdUI)
|
|
{
|
|
pCmdUI->Enable(m_pLocalView->m_btnDownload.IsWindowEnabled());
|
|
}
|
|
|
|
void CMainFrame::OnViewMidToolbar()
|
|
{
|
|
m_bShowMidToolBar = !m_bShowMidToolBar;
|
|
m_pLocalView->RedrawControlEx();
|
|
}
|
|
|
|
void CMainFrame::OnUpdateViewMidToolbar(CCmdUI *pCmdUI)
|
|
{
|
|
pCmdUI->SetCheck(m_bShowMidToolBar);
|
|
}
|
|
|
|
void CMainFrame::OnViewRtree()
|
|
{
|
|
m_bShowRemoteTree = !m_bShowRemoteTree;
|
|
m_pRemoteView->RedrawControl();
|
|
}
|
|
|
|
void CMainFrame::OnUpdateViewRtree(CCmdUI *pCmdUI)
|
|
{
|
|
pCmdUI->SetCheck(m_bShowRemoteTree);
|
|
}
|
|
|
|
void CMainFrame::OnViewLtree()
|
|
{
|
|
m_bShowLocalTree = !m_bShowLocalTree;
|
|
m_pLocalView->RedrawControlEx();
|
|
}
|
|
|
|
void CMainFrame::OnUpdateViewLtree(CCmdUI *pCmdUI)
|
|
{
|
|
pCmdUI->SetCheck(m_bShowLocalTree);
|
|
}
|
|
|
|
void CMainFrame::OnViewRefresh()
|
|
{
|
|
BeginWaitMessage();
|
|
|
|
m_pLocalView->RefreshItem();
|
|
m_pRemoteView->RefreshItem();
|
|
|
|
EndWaitMessage();
|
|
}
|
|
|
|
void CMainFrame::OnViewRstatus()
|
|
{
|
|
m_bShowRemoteStatus = !m_bShowRemoteStatus;
|
|
m_pRemoteView->RedrawControl();
|
|
}
|
|
|
|
void CMainFrame::OnUpdateViewRstatus(CCmdUI *pCmdUI)
|
|
{
|
|
pCmdUI->SetCheck(m_bShowRemoteStatus);
|
|
}
|
|
|
|
void CMainFrame::OnViewLstatus()
|
|
{
|
|
m_bShowLocalStatus = !m_bShowLocalStatus;
|
|
m_pLocalView->RedrawControlEx();
|
|
}
|
|
|
|
void CMainFrame::OnUpdateViewLstatus(CCmdUI *pCmdUI)
|
|
{
|
|
pCmdUI->SetCheck(m_bShowLocalStatus);
|
|
}
|
|
|
|
void CMainFrame::OnViewRlistType1()
|
|
{
|
|
m_nRemoteListType = 1;
|
|
m_pRemoteView->ApplyListStyle();
|
|
}
|
|
|
|
void CMainFrame::OnUpdateViewRlistType1(CCmdUI *pCmdUI)
|
|
{
|
|
pCmdUI->SetCheck(m_nRemoteListType == 1);
|
|
}
|
|
|
|
void CMainFrame::OnViewRlistType2()
|
|
{
|
|
m_nRemoteListType = 2;
|
|
m_pRemoteView->ApplyListStyle();
|
|
}
|
|
|
|
void CMainFrame::OnUpdateViewRlistType2(CCmdUI *pCmdUI)
|
|
{
|
|
pCmdUI->SetCheck(m_nRemoteListType == 2);
|
|
}
|
|
|
|
void CMainFrame::OnViewRlistType3()
|
|
{
|
|
m_nRemoteListType = 3;
|
|
m_pRemoteView->ApplyListStyle();
|
|
}
|
|
|
|
void CMainFrame::OnUpdateViewRlistType3(CCmdUI *pCmdUI)
|
|
{
|
|
pCmdUI->SetCheck(m_nRemoteListType == 3);
|
|
}
|
|
|
|
void CMainFrame::OnViewRlistType4()
|
|
{
|
|
m_nRemoteListType = 4;
|
|
m_pRemoteView->ApplyListStyle();
|
|
}
|
|
|
|
void CMainFrame::OnUpdateViewRlistType4(CCmdUI *pCmdUI)
|
|
{
|
|
pCmdUI->SetCheck(m_nRemoteListType == 4);
|
|
}
|
|
|
|
void CMainFrame::OnViewLlistType0()
|
|
{
|
|
m_nLocalListType = 0;
|
|
m_pLocalView->ApplyListStyle();
|
|
}
|
|
|
|
void CMainFrame::OnUpdateViewLlistType0(CCmdUI *pCmdUI)
|
|
{
|
|
pCmdUI->SetCheck(m_nLocalListType == 0);
|
|
}
|
|
|
|
void CMainFrame::OnViewLlistType1()
|
|
{
|
|
m_nLocalListType = 1;
|
|
m_pLocalView->ApplyListStyle();
|
|
}
|
|
|
|
void CMainFrame::OnUpdateViewLlistType1(CCmdUI *pCmdUI)
|
|
{
|
|
pCmdUI->SetCheck(m_nLocalListType == 1);
|
|
}
|
|
|
|
void CMainFrame::OnViewLlistType2()
|
|
{
|
|
m_nLocalListType = 2;
|
|
m_pLocalView->ApplyListStyle();
|
|
}
|
|
|
|
void CMainFrame::OnUpdateViewLlistType2(CCmdUI *pCmdUI)
|
|
{
|
|
pCmdUI->SetCheck(m_nLocalListType == 2);
|
|
}
|
|
|
|
void CMainFrame::OnViewLlistType3()
|
|
{
|
|
m_nLocalListType = 3;
|
|
m_pLocalView->ApplyListStyle();
|
|
}
|
|
|
|
void CMainFrame::OnUpdateViewLlistType3(CCmdUI *pCmdUI)
|
|
{
|
|
pCmdUI->SetCheck(m_nLocalListType == 3);
|
|
}
|
|
|
|
void CMainFrame::OnViewLlistType4()
|
|
{
|
|
m_nLocalListType = 4;
|
|
m_pLocalView->ApplyListStyle();
|
|
}
|
|
|
|
void CMainFrame::OnUpdateViewLlistType4(CCmdUI *pCmdUI)
|
|
{
|
|
pCmdUI->SetCheck(m_nLocalListType == 4);
|
|
}
|
|
|
|
#define FILEEXISTS_ASK 0
|
|
#define FILEEXISTS_OVERWRITE 1
|
|
#define FILEEXISTS_RESUME 2
|
|
#define FILEEXISTS_RENAME 3
|
|
#define FILEEXISTS_SKIP 4
|
|
|
|
void CMainFrame::OnCfgOverwriteAsk()
|
|
{
|
|
COptions::SetOption(OPTION_WRITEPOLICY, FILEEXISTS_ASK);
|
|
}
|
|
|
|
void CMainFrame::OnUpdateCfgOverwriteAsk(CCmdUI *pCmdUI)
|
|
{
|
|
pCmdUI->SetCheck(COptions::GetOptionVal(OPTION_WRITEPOLICY) == FILEEXISTS_ASK);
|
|
}
|
|
|
|
void CMainFrame::OnCfgOverwrite1()
|
|
{
|
|
COptions::SetOption(OPTION_WRITEPOLICY, FILEEXISTS_OVERWRITE);
|
|
}
|
|
|
|
void CMainFrame::OnUpdateCfgOverwrite1(CCmdUI *pCmdUI)
|
|
{
|
|
pCmdUI->SetCheck(COptions::GetOptionVal(OPTION_WRITEPOLICY) == FILEEXISTS_OVERWRITE);
|
|
}
|
|
|
|
void CMainFrame::OnCfgOverwrite2()
|
|
{
|
|
COptions::SetOption(OPTION_WRITEPOLICY, FILEEXISTS_RESUME);
|
|
}
|
|
|
|
void CMainFrame::OnUpdateCfgOverwrite2(CCmdUI *pCmdUI)
|
|
{
|
|
pCmdUI->SetCheck(COptions::GetOptionVal(OPTION_WRITEPOLICY) == FILEEXISTS_RESUME);
|
|
}
|
|
|
|
void CMainFrame::OnCfgOverwrite3()
|
|
{
|
|
COptions::SetOption(OPTION_WRITEPOLICY, FILEEXISTS_RENAME);
|
|
}
|
|
|
|
void CMainFrame::OnUpdateCfgOverwrite3(CCmdUI *pCmdUI)
|
|
{
|
|
pCmdUI->SetCheck(COptions::GetOptionVal(OPTION_WRITEPOLICY) == FILEEXISTS_RENAME);
|
|
}
|
|
|
|
void CMainFrame::OnCfgOverwrite4()
|
|
{
|
|
COptions::SetOption(OPTION_WRITEPOLICY, FILEEXISTS_SKIP);
|
|
}
|
|
|
|
void CMainFrame::OnUpdateCfgOverwrite4(CCmdUI *pCmdUI)
|
|
{
|
|
pCmdUI->SetCheck(COptions::GetOptionVal(OPTION_WRITEPOLICY) == FILEEXISTS_SKIP);
|
|
}
|
|
|
|
void CMainFrame::OnCfgConfig()
|
|
{
|
|
CConfigDlg dlg;
|
|
dlg.DoModal();
|
|
}
|
|
|
|
LRESULT CMainFrame::OnUpdateControlStatus(WPARAM wParam, LPARAM lParam)
|
|
{
|
|
CRemoteTreeCtrl *prtree = m_pRemoteView->GetTreeCtrl();
|
|
CRemoteListCtrl *prlist = m_pRemoteView->GetListCtrl();
|
|
|
|
// 새폴더, 삭제 버튼
|
|
if (m_fl == FL_REMOTE) {
|
|
if (prtree->GetSelectedItem() == prtree->GetRootItem()) {
|
|
m_pLocalView->m_btnNewFolder.EnableWindow(FALSE);
|
|
m_pLocalView->m_btnDelete.EnableWindow(FALSE);
|
|
}
|
|
else {
|
|
m_pLocalView->m_btnNewFolder.EnableWindow(TRUE);
|
|
m_pLocalView->m_btnDelete.EnableWindow(m_pRemoteView->m_nSelectedCount > 0);
|
|
}
|
|
}
|
|
else {
|
|
if (m_pLocalView->GetSelectedPath() == "") {
|
|
m_pLocalView->m_btnNewFolder.EnableWindow(FALSE);
|
|
m_pLocalView->m_btnDelete.EnableWindow(FALSE);
|
|
}
|
|
else {
|
|
m_pLocalView->m_btnNewFolder.EnableWindow(TRUE);
|
|
m_pLocalView->m_btnDelete.EnableWindow(m_pLocalView->m_nSelectedCount > 0 && m_pLocalView->m_nSelectedSecialObj == 0);
|
|
}
|
|
}
|
|
|
|
// 올리기 버튼
|
|
if (prtree->GetSelectedItem() == prtree->GetRootItem()) {
|
|
m_pLocalView->m_btnUpload.EnableWindow(FALSE);
|
|
}
|
|
else {
|
|
if (m_pwndLocal == &m_pLocalView->m_tree)
|
|
m_pLocalView->m_btnUpload.EnableWindow(m_pLocalView->GetSelectedPath() != "");
|
|
else
|
|
m_pLocalView->m_btnUpload.EnableWindow(m_pLocalView->m_nSelectedCount > 0 && m_pLocalView->m_nSelectedSecialObj == 0);
|
|
}
|
|
|
|
// 내리기 버튼
|
|
if (m_pLocalView->GetSelectedPath() == "" || prtree->GetSelectedItem() == prtree->GetRootItem()) {
|
|
m_pLocalView->m_btnDownload.EnableWindow(FALSE);
|
|
}
|
|
else {
|
|
if (m_pwndRemote == &m_pRemoteView->m_tree)
|
|
m_pLocalView->m_btnDownload.EnableWindow(((PRTREEITEM_STRUCT)m_pRemoteView->m_tree.GetItemData(m_pRemoteView->m_tree.GetSelectedItem()))->nClass == TNS_FOLDER);
|
|
else
|
|
m_pLocalView->m_btnDownload.EnableWindow(m_pRemoteView->m_nSelectedCount > 0);
|
|
}
|
|
|
|
return S_OK;
|
|
}
|
|
|
|
LRESULT CMainFrame::OnTransferDlgClose(WPARAM wParam, LPARAM lParam)
|
|
{
|
|
if (wParam == NULL)
|
|
return S_OK;
|
|
|
|
UpdateVolumeInfo((HTREEITEM)wParam);
|
|
m_pRemoteView->RefreshItem();
|
|
|
|
return S_OK;
|
|
}
|
|
|
|
int CMainFrame::OnCreateControl(LPCREATECONTROLSTRUCT lpCreateControl)
|
|
{
|
|
switch (lpCreateControl->nID) {
|
|
// case IDR_POP_LLIST:
|
|
// lpCreateControl->controlType = xtpControlSplitButtonPopup;
|
|
// return TRUE;
|
|
case ID_INFORMATIONSTR:
|
|
lpCreateControl->buttonStyle = xtpButtonCaption;
|
|
return TRUE;
|
|
case ID_INFORMATION:
|
|
{
|
|
CXTPToolBar* ptb = DYNAMIC_DOWNCAST(CXTPToolBar, lpCreateControl->pCommandBar);
|
|
if (!ptb)
|
|
return FALSE;
|
|
|
|
CXTPControlComboBox* pComboUrl = (CXTPControlComboBox*)CXTPControlComboBox::CreateObject();
|
|
pComboUrl->AddString(_T("[알림]테스트1"));
|
|
pComboUrl->AddString(_T("[안내]테스트2"));
|
|
pComboUrl->AddString(_T("[이벤트]테스트2"));
|
|
pComboUrl->SetWidth(300);
|
|
pComboUrl->SetDropDownWidth(300);
|
|
pComboUrl->SetDropDownListStyle(FALSE);
|
|
pComboUrl->SetFlags(xtpFlagManualUpdate);
|
|
pComboUrl->SetCurSel(0);
|
|
|
|
lpCreateControl->pControl = pComboUrl;
|
|
return TRUE;
|
|
}
|
|
return TRUE;
|
|
case ID_VIEW_REFRESH:
|
|
case ID_VIEW_RTREE:
|
|
case ID_VIEW_LTREE:
|
|
case ID_CFG_CONFIG:
|
|
case ID_VIEW_ALL:
|
|
lpCreateControl->buttonStyle = xtpButtonIconAndCaption;
|
|
return TRUE;
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
BOOL CMainFrame::RestorePlacement()
|
|
{
|
|
int nStatus, nRowSize;
|
|
RECT rc;
|
|
|
|
CString sPos = COptions::GetOption(OPTION_WINDOWSPOS);
|
|
int nPos;
|
|
|
|
nPos = sPos.Find(" ");
|
|
if (nPos == -1) {
|
|
CenterWindow();
|
|
goto RECALC_SPLITTER_SIZE;
|
|
}
|
|
nStatus = _ttoi(sPos.Left(nPos));
|
|
sPos = sPos.Mid(nPos + 1);
|
|
|
|
nPos = sPos.Find(" ");
|
|
if (nPos == -1) {
|
|
CenterWindow();
|
|
goto RECALC_SPLITTER_SIZE;
|
|
}
|
|
rc.left = _ttoi(sPos.Left(nPos));
|
|
sPos = sPos.Mid(nPos + 1);
|
|
|
|
nPos = sPos.Find(" ");
|
|
if (nPos == -1) {
|
|
CenterWindow();
|
|
goto RECALC_SPLITTER_SIZE;
|
|
}
|
|
rc.top = _ttoi(sPos.Left(nPos));
|
|
sPos = sPos.Mid(nPos + 1);
|
|
|
|
nPos = sPos.Find(" ");
|
|
if (nPos == -1) {
|
|
CenterWindow();
|
|
goto RECALC_SPLITTER_SIZE;
|
|
}
|
|
rc.right = _ttoi(sPos.Left(nPos));
|
|
sPos = sPos.Mid(nPos + 1);
|
|
|
|
if (sPos == "") {
|
|
CenterWindow();
|
|
goto RECALC_SPLITTER_SIZE;
|
|
}
|
|
rc.bottom = _ttoi(sPos);
|
|
|
|
WINDOWPLACEMENT wp;
|
|
wp.length = sizeof(wp);
|
|
|
|
wp.flags = 0;
|
|
wp.rcNormalPosition = rc;
|
|
|
|
wp.showCmd = (nStatus == 1) ? SW_MAXIMIZE : SW_RESTORE;
|
|
|
|
if (!SetWindowPlacement(&wp))
|
|
return FALSE;
|
|
|
|
RECALC_SPLITTER_SIZE:
|
|
sPos = COptions::GetOption(OPTION_SPLITTERSIZE);
|
|
if (sPos != "")
|
|
nRowSize = atol(sPos);
|
|
else {
|
|
GetClientRect(&rc);
|
|
nRowSize = ((rc.bottom - rc.top) >> 1) - 30;
|
|
}
|
|
|
|
m_splitter.SetRowInfo(0, nRowSize, 0);
|
|
|
|
m_splitter.RecalcLayout();
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
void CMainFrame::RemoveDragSource(HTREEITEM hti, LPCTSTR pszPath)
|
|
{
|
|
if (m_htiDragTarget != hti)
|
|
return;
|
|
|
|
for (int i = 0; i < m_saDragSource.GetCount(); i++) {
|
|
if (m_saDragSource[i] == pszPath) {
|
|
m_saDragSource.RemoveAt(i);
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
|
|
void CMainFrame::ShowLoginDialog()
|
|
{
|
|
CString sUserId, sPassword;
|
|
|
|
BOOL bAutoConnect = COptions::GetOptionVal(OPTION_AUTOCONNECT);
|
|
if (m_bInitialzed || !bAutoConnect) {
|
|
CConnectDlg dlg;
|
|
|
|
dlg.m_bAutoConnect = bAutoConnect;
|
|
dlg.m_bSavePassword = COptions::GetOptionVal(OPTION_SAVEPASSWORD);
|
|
dlg.m_sUserId = COptions::GetOption(OPTION_USERID);
|
|
dlg.m_sPassword = dlg.m_bSavePassword ? CCrypt::Decrypt(CCrypt::Decrypt(COptions::GetOption(OPTION_PASSWORD))) : "";
|
|
|
|
if (dlg.DoModal() != IDOK) {
|
|
PostMessage(WM_CLOSE);
|
|
return;
|
|
}
|
|
|
|
m_sUserId = dlg.m_sUserId;
|
|
m_sPassword = dlg.m_sPassword;
|
|
|
|
dlg.m_sPassword = CCrypt::Encrypt(CCrypt::Encrypt(dlg.m_sPassword));
|
|
|
|
COptions::SetOption(OPTION_AUTOCONNECT, dlg.m_bAutoConnect);
|
|
COptions::SetOption(OPTION_SAVEPASSWORD, dlg.m_bSavePassword);
|
|
COptions::SetOption(OPTION_USERID, dlg.m_sUserId);
|
|
COptions::SetOption(OPTION_PASSWORD, dlg.m_bAutoConnect || dlg.m_bSavePassword ? dlg.m_sPassword : "");
|
|
}
|
|
else {
|
|
m_sUserId = COptions::GetOption(OPTION_USERID);
|
|
m_sPassword = CCrypt::Decrypt(CCrypt::Decrypt(COptions::GetOption(OPTION_PASSWORD)));
|
|
}
|
|
|
|
m_bInitialzed = true;
|
|
|
|
Connect();
|
|
}
|
|
|
|
void CMainFrame::Connect()
|
|
{
|
|
if (m_mapHcl.GetCount() > 0) {
|
|
if (AfxMessageBox("기존 접속을 끊으시겠습니까?", MB_YESNO | MB_ICONQUESTION) != IDYES)
|
|
return;
|
|
|
|
Disconnect();
|
|
}
|
|
|
|
char szUrl[MAX_PATH];
|
|
char szPath[MAX_PATH];
|
|
GetCurrentPath(szPath);
|
|
strcat(szPath,"\\");
|
|
strcat(szPath,INI_FILENAME);
|
|
GetPrivateProfileString("CONNECT", "URL", "", szUrl, MAX_PATH, szPath);
|
|
|
|
|
|
#ifdef _OLD
|
|
HCOMMLIB hcl = cl_init(szUrl, m_sUserId, m_sPassword, GetProxyHost(), GetProxyPort());
|
|
#else
|
|
HCOMMLIB hcl = cl_init(szUrl, "", m_sUserId, m_sPassword, GetProxyHost(), GetProxyPort());
|
|
#endif
|
|
if (!hcl) {
|
|
AfxMessageBox(GetErrorMessage(GetLastError()), MB_ICONERROR);
|
|
return;
|
|
}
|
|
|
|
m_mapHcl.SetAt(NULL, hcl);
|
|
m_pRemoteView->PostMessage(WMU_SHOW_VOLUMELIST, NULL, (LPARAM)TRUE);
|
|
}
|
|
|
|
void CMainFrame::Disconnect()
|
|
{
|
|
m_pRemoteView->ClearAllData();
|
|
|
|
HTREEITEM hti;
|
|
HCOMMLIB hcl;
|
|
for (POSITION pos = m_mapHcl.GetStartPosition(); pos != NULL; ) {
|
|
m_mapHcl.GetNextAssoc(pos, (LPVOID&)hti, (LPVOID&)hcl);
|
|
cl_free(hcl);
|
|
}
|
|
|
|
m_mapHcl.RemoveAll();
|
|
}
|
|
|
|
bool CMainFrame::ContNextOnError(LPCSTR pszErrMSg)
|
|
{
|
|
CString sMsg;
|
|
sMsg.Format("에러가 발생했습니다.\n%s\n\n계속 하시겠습니까?", pszErrMSg);
|
|
|
|
return AfxMessageBox(sMsg, MB_YESNO | MB_ICONERROR) == IDYES;
|
|
}
|
|
|
|
int CMainFrame::ConfirmExists(LPCSTR pszName, BOOL bMove /*= TRUE*/)
|
|
{
|
|
CString sMsg;
|
|
|
|
if(bMove)
|
|
sMsg.Format("'%s' 파일(폴더)이 이미 존재 합니다.\n [경고] 폴더일 경우 기존 폴더내의 전체 컨텐츠가 삭제된 후 이동됩니다.\n 덮어 쓰시겠습니까?", pszName);
|
|
else
|
|
sMsg.Format("'%s' 파일(폴더)이 이미 존재 합니다.\n [경고] 폴더일 경우 기존 폴더내의 전체 컨텐츠가 삭제된 후 복사됩니다.\n 덮어 쓰시겠습니까?", pszName);
|
|
|
|
|
|
return AfxMessageBox(sMsg, MB_YESNOCANCEL | MB_ICONQUESTION);
|
|
}
|
|
|
|
bool CMainFrame::MakeRemoteFolder(HTREEITEM hti, CString& sFolder)
|
|
{
|
|
HCOMMLIB hcl = (HCOMMLIB)m_mapHcl[hti];
|
|
ASSERT(hcl);
|
|
|
|
if (!cl_make_directory(hcl, sFolder)) {
|
|
AfxMessageBox(cl_get_error_message(hcl), MB_ICONERROR);
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
bool CMainFrame::Move1RemoteObject(HTREEITEM hti, CString& sSrcPath, CString& sDstPath)
|
|
{
|
|
BeginWaitCursor();
|
|
|
|
HCOMMLIB hcl = (HCOMMLIB)m_mapHcl[hti];
|
|
ASSERT(hcl);
|
|
|
|
if (!cl_move(hcl, sSrcPath, sDstPath, TRUE)) {
|
|
AfxMessageBox(cl_get_error_message(hcl), MB_ICONERROR);
|
|
return false;
|
|
}
|
|
|
|
RemoveDragSource(hti, sSrcPath);
|
|
|
|
UpdateVolumeInfo(hti);
|
|
|
|
EndWaitCursor();
|
|
|
|
return true;
|
|
}
|
|
|
|
bool CMainFrame::Delete1RemoteObject(HTREEITEM hti, CString& sPath)
|
|
{
|
|
HCOMMLIB hcl = (HCOMMLIB)m_mapHcl[hti];
|
|
ASSERT(hcl);
|
|
|
|
if (!cl_delete(hcl, sPath)) {
|
|
AfxMessageBox(cl_get_error_message(hcl), MB_ICONERROR);
|
|
return false;
|
|
}
|
|
|
|
RemoveDragSource(hti, sPath);
|
|
|
|
UpdateVolumeInfo(hti);
|
|
|
|
return true;
|
|
}
|
|
|
|
void CMainFrame::CopyRemoteObject(HTREEITEM hti, CStringArray& saSrcPath, CString& sDstPath, CStringArray& saSucceed)
|
|
{
|
|
saSucceed.RemoveAll();
|
|
|
|
BeginWaitCursor();
|
|
|
|
HCOMMLIB hcl = (HCOMMLIB)m_mapHcl[hti];
|
|
ASSERT(hcl);
|
|
|
|
bool bBreak = false;
|
|
for (int i = 0; i < saSrcPath.GetCount() && !bBreak; i++) {
|
|
CString sTargetPath = sDstPath + saSrcPath[i].Mid(saSrcPath[i].ReverseFind('/'));
|
|
if (saSrcPath[i] == sTargetPath) {
|
|
PRTREEITEM_STRUCT prti = (PRTREEITEM_STRUCT)m_pRemoteView->m_tree.GetItemData(m_pRemoteView->m_tree.GetItem(hti, sDstPath));
|
|
|
|
CString sName = sTargetPath.Mid(sTargetPath.ReverseFind('/') + 1);
|
|
CString sExt = "";
|
|
|
|
int iPos = sName.ReverseFind('.');
|
|
if (iPos >= 0) {
|
|
sExt = sName.Mid(iPos);
|
|
sName = sName.Left(iPos);
|
|
}
|
|
|
|
bool bFound = true;
|
|
for (int j = 1; bFound; j++) {
|
|
sTargetPath.Format("%s(%d)%s", sName, j, sExt);
|
|
|
|
bFound = false;
|
|
for (int k = 0; k < prti->paObject.GetCount(); k++) {
|
|
if (((PRLISTITEM_STRUCT)prti->paObject[k])->sName == sTargetPath) {
|
|
bFound = true;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
sTargetPath = sDstPath + "/" + sTargetPath;
|
|
// 2014.07.25 dadamin copy 기능 제거
|
|
#ifdef _USE_COPY_
|
|
if (cl_copy(hcl, saSrcPath[i], sTargetPath, FALSE))
|
|
saSucceed.Add(saSrcPath[i]);
|
|
else
|
|
bBreak = !ContNextOnError(cl_get_error_message(hcl));
|
|
#endif // _USE_COPY_
|
|
}
|
|
else {
|
|
PCLFILE_STRUCT pclfl = cl_get_file_list(hcl, sTargetPath, 0, NULL);
|
|
if (pclfl) {
|
|
cl_free_file_list(hcl, pclfl);
|
|
|
|
int nAnswer = ConfirmExists(sTargetPath.Mid(sTargetPath.ReverseFind('/') + 1), FALSE);
|
|
if (nAnswer == IDCANCEL)
|
|
bBreak = true;
|
|
else if (nAnswer == IDNO)
|
|
continue;
|
|
}
|
|
cl_free_file_list(hcl, pclfl);
|
|
// 2014.07.25 dadamin copy 기능 제거
|
|
#ifdef _USE_COPY_
|
|
if (!bBreak) {
|
|
if (cl_copy(hcl, saSrcPath[i], sTargetPath, TRUE))
|
|
saSucceed.Add(saSrcPath[i]);
|
|
else
|
|
bBreak = !ContNextOnError(cl_get_error_message(hcl));
|
|
}
|
|
#endif // _USE_COPY_
|
|
}
|
|
}
|
|
|
|
if (saSucceed.GetCount() > 0)
|
|
UpdateVolumeInfo(hti);
|
|
|
|
EndWaitCursor();
|
|
}
|
|
|
|
void CMainFrame::MoveRemoteObject(HTREEITEM hti, CStringArray& saSrcPath, CString& sDstPath, CStringArray& saSucceed)
|
|
{
|
|
saSucceed.RemoveAll();
|
|
|
|
// 2012-05-21 trozan
|
|
// 사용자 실수로 디렉토리 Move가 발생할 수 있어서 Alert 추가
|
|
CString strMsg;
|
|
strMsg.Format("\"%s\"로 이동하시겠습니까?\r\n취소하시려면 '아니요'를 눌러주세요.", sDstPath);
|
|
if(AfxMessageBox(strMsg, MB_ICONINFORMATION | MB_YESNO) == IDNO)
|
|
return;
|
|
|
|
BeginWaitCursor();
|
|
|
|
HCOMMLIB hcl = (HCOMMLIB)m_mapHcl[hti];
|
|
ASSERT(hcl);
|
|
|
|
bool bBreak = false;
|
|
CStringArray strSrc;
|
|
|
|
strSrc.Copy(saSrcPath);
|
|
|
|
for (int i = 0; i < strSrc.GetCount()&& !bBreak; i++)
|
|
{
|
|
CString sTargetPath = sDstPath + strSrc[i].Mid(strSrc[i].ReverseFind('/'));
|
|
if (strSrc[i] == sTargetPath)
|
|
continue;
|
|
else
|
|
{
|
|
PCLFILE_STRUCT pclfl = cl_get_file_list(hcl, sTargetPath, 0, NULL);
|
|
if (pclfl)
|
|
{
|
|
cl_free_file_list(hcl, pclfl);
|
|
|
|
int nAnswer = ConfirmExists(sTargetPath.Mid(sTargetPath.ReverseFind('/') + 1), TRUE);
|
|
if (nAnswer == IDCANCEL)
|
|
bBreak = true;
|
|
else if (nAnswer == IDNO)
|
|
continue;
|
|
}
|
|
cl_free_file_list(hcl, pclfl);
|
|
|
|
if (!bBreak)
|
|
{
|
|
if (cl_move(hcl, strSrc[i], sTargetPath, TRUE))
|
|
{
|
|
saSucceed.Add(strSrc[i]);
|
|
RemoveDragSource(hti, strSrc[i]);
|
|
}
|
|
else
|
|
bBreak = !ContNextOnError(cl_get_error_message(hcl));
|
|
}
|
|
}
|
|
}
|
|
|
|
if (saSucceed.GetCount() > 0)
|
|
UpdateVolumeInfo(hti);
|
|
|
|
strSrc.RemoveAll();
|
|
EndWaitCursor();
|
|
}
|
|
|
|
void CMainFrame::DeleteRemoteObject(HTREEITEM hti, CStringArray& saPath, CStringArray& saSucceed)
|
|
{
|
|
saSucceed.RemoveAll();
|
|
|
|
BeginWaitCursor();
|
|
|
|
HCOMMLIB hcl = (HCOMMLIB)m_mapHcl[hti];
|
|
ASSERT(hcl);
|
|
|
|
bool bBreak = false;
|
|
for (int i = 0; i < saPath.GetCount() && !bBreak; i++) {
|
|
if (cl_delete(hcl, saPath[i])) {
|
|
saSucceed.Add(saPath[i]);
|
|
RemoveDragSource(hti, saPath[i]);
|
|
}
|
|
else
|
|
bBreak = !ContNextOnError(cl_get_error_message(hcl));
|
|
}
|
|
|
|
if (saSucceed.GetCount() > 0)
|
|
UpdateVolumeInfo(hti);
|
|
|
|
EndWaitCursor();
|
|
}
|
|
|
|
bool CMainFrame::Upload(bool bUseSelected)
|
|
{
|
|
CRemoteTreeCtrl* ptree = m_pRemoteView->GetTreeCtrl();
|
|
|
|
HTREEITEM htiVolume = bUseSelected ? ptree->GetVolumeItem(ptree->GetSelectedItem()) :m_htiDragTarget;
|
|
PRTREEITEM_STRUCT prtiVolume = (PRTREEITEM_STRUCT)ptree->GetItemData(htiVolume);
|
|
HCOMMLIB hcl = (HCOMMLIB)m_mapHcl[htiVolume];
|
|
|
|
BeginWaitCursor();
|
|
|
|
if (bUseSelected) {
|
|
m_saDragSource.RemoveAll();
|
|
if (!m_pLocalView->GetSelectedObject(m_saDragSource))
|
|
return false;
|
|
|
|
m_sDragTarget = m_pRemoteView->m_tree.GetPath();
|
|
// if (m_sDragTarget == "")
|
|
// return false;
|
|
}
|
|
|
|
// 변수 초기화
|
|
HANDLE hReadPipe = NULL;
|
|
HANDLE hWritePipe = NULL;
|
|
CString strTemp;
|
|
|
|
PROCESS_INFORMATION pi;
|
|
STARTUPINFO si;
|
|
ZeroMemory(&pi, sizeof(pi));
|
|
ZeroMemory(&si, sizeof(si));
|
|
|
|
// 파이프 생성
|
|
SECURITY_ATTRIBUTES sa;
|
|
|
|
sa.nLength = sizeof(SECURITY_ATTRIBUTES);
|
|
sa.bInheritHandle = TRUE;
|
|
sa.lpSecurityDescriptor = NULL;
|
|
|
|
if (!CreatePipe(&hReadPipe, &hWritePipe, &sa, 0)) {
|
|
EndWaitCursor();
|
|
AfxMessageBox(GetErrorMessage(GetLastError()), MB_ICONERROR);
|
|
return false;
|
|
}
|
|
|
|
bool bResult = false;
|
|
|
|
LPSTR pszFileList = NULL;
|
|
|
|
SetHandleInformation(hWritePipe, HANDLE_FLAG_INHERIT, 0);
|
|
|
|
// 전송 프로그램 실행
|
|
char szCmdLine[MAX_PATH];
|
|
#ifdef _DEBUG
|
|
sprintf(szCmdLine, "SPCTran.exe %s", EXECUTE_PARAM);
|
|
#else
|
|
sprintf(szCmdLine, "SPCTran.exe %s", EXECUTE_PARAM);
|
|
#endif
|
|
|
|
si.cb = sizeof(si);
|
|
si.hStdError = hWritePipe;
|
|
si.hStdOutput = hWritePipe;
|
|
si.hStdInput = hReadPipe;
|
|
si.dwFlags |= STARTF_USESTDHANDLES;
|
|
|
|
if (!CreateProcess(NULL,
|
|
szCmdLine, // command line
|
|
NULL, // process security attributes
|
|
NULL, // primary thread security attributes
|
|
TRUE, // handles are inherited
|
|
0, // creation flags
|
|
NULL, // use parent's environment
|
|
NULL, // use parent's current directory
|
|
&si, // STARTUPINFO pointer
|
|
&pi)) // receives PROCESS_INFORMATION
|
|
goto EXIT_FUNCTION;
|
|
|
|
// 전송 정보 보내기...
|
|
TRANPARAM_STRUCT tp;
|
|
tp.hwnd = GetSafeHwnd();
|
|
tp.pParam = htiVolume;
|
|
tp.nAction = TPA_UPLOAD;
|
|
strcpy(tp.szHost, prtiVolume->saAttr[1] + "/dav");
|
|
|
|
|
|
strTemp.Format("XXX SP-Console : %s\n",tp.szHost);
|
|
OutputDebugString(strTemp);
|
|
|
|
strcpy(tp.szDstPath, m_sDragTarget + "/");
|
|
strcpy(tp.szUserId, ptree->GetItemText(htiVolume));
|
|
strcat(tp.szUserId, "@");
|
|
strcat(tp.szUserId, m_sUserId);
|
|
strcpy(tp.szPassword, m_sPassword);
|
|
strcpy(tp.szProxyHost, GetProxyHost());
|
|
tp.nProxyPort = GetProxyPort();
|
|
tp.nFreeBytes = _atoi64(prtiVolume->saAttr[2]) - _atoi64(prtiVolume->saAttr[3]);
|
|
|
|
tp.nFileListSize = 0;
|
|
for (int i = 0; i < m_saDragSource.GetCount(); i++)
|
|
tp.nFileListSize += m_saDragSource[i].GetLength() + 1;
|
|
|
|
pszFileList = new char[tp.nFileListSize];
|
|
if (!pszFileList)
|
|
goto EXIT_FUNCTION;
|
|
|
|
|
|
for (int i = 0, p = 0; i < m_saDragSource.GetCount(); i++) {
|
|
strcpy(&pszFileList[p], m_saDragSource[i]);
|
|
p += m_saDragSource[i].GetLength() + 1;
|
|
}
|
|
|
|
if (!WriteFile(hWritePipe, (LPVOID)&tp, sizeof(tp)))
|
|
goto EXIT_FUNCTION;
|
|
|
|
if (!WriteFile(hWritePipe, (LPVOID)pszFileList, tp.nFileListSize))
|
|
goto EXIT_FUNCTION;
|
|
|
|
bResult = true;
|
|
|
|
EXIT_FUNCTION:
|
|
if (!bResult)
|
|
AfxMessageBox(GetErrorMessage(GetLastError()), MB_ICONERROR);
|
|
|
|
EndWaitCursor();
|
|
|
|
if (pszFileList)
|
|
delete []pszFileList;
|
|
|
|
if (hReadPipe)
|
|
CloseHandle(hReadPipe);
|
|
|
|
if (hWritePipe)
|
|
CloseHandle(hWritePipe);
|
|
|
|
if (pi.hProcess)
|
|
CloseHandle(pi.hProcess);
|
|
|
|
if (pi.hThread)
|
|
CloseHandle(pi.hThread);
|
|
|
|
EndWaitCursor();
|
|
|
|
return bResult;
|
|
}
|
|
|
|
bool CMainFrame::Download(bool bUseSelected)
|
|
{
|
|
CString s;
|
|
|
|
CRemoteTreeCtrl* ptree = m_pRemoteView->GetTreeCtrl();
|
|
|
|
HTREEITEM htiVolume = bUseSelected ? ptree->GetVolumeItem(ptree->GetSelectedItem()) : m_htiDragTarget;
|
|
PRTREEITEM_STRUCT prtiVolume = (PRTREEITEM_STRUCT)ptree->GetItemData(htiVolume);
|
|
HCOMMLIB hcl = (HCOMMLIB)m_mapHcl[htiVolume];
|
|
|
|
BeginWaitCursor();
|
|
|
|
if (bUseSelected) {
|
|
m_saDragSource.RemoveAll();
|
|
if (!m_pRemoteView->GetSelectedObject(m_saDragSource))
|
|
return false;
|
|
|
|
m_sDragTarget = m_pLocalView->GetSelectedPath();
|
|
if (m_sDragTarget == "")
|
|
return false;
|
|
}
|
|
|
|
// 변수 초기화
|
|
HANDLE hReadPipe = NULL;
|
|
HANDLE hWritePipe = NULL;
|
|
|
|
PROCESS_INFORMATION pi;
|
|
STARTUPINFO si;
|
|
ZeroMemory(&pi, sizeof(pi));
|
|
ZeroMemory(&si, sizeof(si));
|
|
|
|
// 파이프 생성
|
|
SECURITY_ATTRIBUTES sa;
|
|
|
|
sa.nLength = sizeof(SECURITY_ATTRIBUTES);
|
|
sa.bInheritHandle = TRUE;
|
|
sa.lpSecurityDescriptor = NULL;
|
|
|
|
if (!CreatePipe(&hReadPipe, &hWritePipe, &sa, 0)) {
|
|
EndWaitCursor();
|
|
AfxMessageBox(GetErrorMessage(GetLastError()), MB_ICONERROR);
|
|
return false;
|
|
}
|
|
|
|
bool bResult = false;
|
|
|
|
LPSTR pszFileList = NULL;
|
|
|
|
SetHandleInformation(hWritePipe, HANDLE_FLAG_INHERIT, 0);
|
|
|
|
// 전송 프로그램 실행
|
|
char szCmdLine[MAX_PATH];
|
|
|
|
sprintf(szCmdLine, "SPCTran.exe %s", EXECUTE_PARAM);
|
|
|
|
si.cb = sizeof(si);
|
|
si.hStdError = hWritePipe;
|
|
si.hStdOutput = hWritePipe;
|
|
si.hStdInput = hReadPipe;
|
|
si.dwFlags |= STARTF_USESTDHANDLES;
|
|
|
|
if (!CreateProcess(NULL,
|
|
szCmdLine, // command line
|
|
NULL, // process security attributes
|
|
NULL, // primary thread security attributes
|
|
TRUE, // handles are inherited
|
|
0, // creation flags
|
|
NULL, // use parent's environment
|
|
NULL, // use parent's current directory
|
|
&si, // STARTUPINFO pointer
|
|
&pi)) // receives PROCESS_INFORMATION
|
|
goto EXIT_FUNCTION;
|
|
|
|
// 전송 정보 보내기...
|
|
TRANPARAM_STRUCT tp;
|
|
tp.hwnd = GetSafeHwnd();
|
|
tp.pParam = NULL;
|
|
tp.nAction = TPA_DOWNLOAD;
|
|
strcpy(tp.szHost, prtiVolume->saAttr[1] + "/dav");
|
|
strcpy(tp.szDstPath, m_sDragTarget + "\\");
|
|
strcpy(tp.szUserId, ptree->GetItemText(htiVolume));
|
|
strcat(tp.szUserId, "@");
|
|
strcat(tp.szUserId, m_sUserId);
|
|
strcpy(tp.szPassword, m_sPassword);
|
|
strcpy(tp.szProxyHost, GetProxyHost());
|
|
tp.nProxyPort = GetProxyPort();
|
|
tp.nFreeBytes = -1;
|
|
|
|
tp.nFileListSize = 0;
|
|
for (int i = 0; i < m_saDragSource.GetCount(); i++)
|
|
tp.nFileListSize += m_saDragSource[i].GetLength() + 1;
|
|
|
|
pszFileList = new char[tp.nFileListSize];
|
|
if (!pszFileList)
|
|
goto EXIT_FUNCTION;
|
|
|
|
for (int i = 0, p = 0; i < m_saDragSource.GetCount(); i++) {
|
|
strcpy(&pszFileList[p], m_saDragSource[i]);
|
|
p += m_saDragSource[i].GetLength() + 1;
|
|
}
|
|
|
|
if (!WriteFile(hWritePipe, (LPVOID)&tp, sizeof(tp)))
|
|
goto EXIT_FUNCTION;
|
|
|
|
if (!WriteFile(hWritePipe, (LPVOID)pszFileList, tp.nFileListSize))
|
|
goto EXIT_FUNCTION;
|
|
|
|
bResult = true;
|
|
|
|
EXIT_FUNCTION:
|
|
if (!bResult)
|
|
AfxMessageBox(GetErrorMessage(GetLastError()), MB_ICONERROR);
|
|
|
|
EndWaitCursor();
|
|
|
|
if (pszFileList)
|
|
delete []pszFileList;
|
|
|
|
if (hReadPipe)
|
|
CloseHandle(hReadPipe);
|
|
|
|
if (hWritePipe)
|
|
CloseHandle(hWritePipe);
|
|
|
|
if (pi.hProcess)
|
|
CloseHandle(pi.hProcess);
|
|
|
|
if (pi.hThread)
|
|
CloseHandle(pi.hThread);
|
|
|
|
EndWaitCursor();
|
|
|
|
return bResult;
|
|
}
|
|
|
|
void CMainFrame::SaveUrl()
|
|
{
|
|
CRemoteTreeCtrl *ptree = m_pRemoteView->GetTreeCtrl();
|
|
CRemoteListCtrl *plist = m_pRemoteView->GetListCtrl();
|
|
|
|
HTREEITEM htiSelected = ptree->GetSelectedItem();
|
|
HTREEITEM htiVolume = ptree->GetVolumeItem(htiSelected);
|
|
|
|
HCOMMLIB hcl = (HCOMMLIB)m_mapHcl[htiVolume];
|
|
ASSERT(hcl);
|
|
|
|
CFileDialog dlg(FALSE, ".txt", ptree->GetItemText(htiVolume) + ".txt", OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, "텍스트 파일 (*.txt)|*.txt|");
|
|
dlg.m_pOFN->lpstrTitle = "URL 저장 파일명 선택";
|
|
|
|
if (dlg.DoModal() != IDOK)
|
|
return;
|
|
|
|
CString sFileName = dlg.GetPathName();
|
|
|
|
CStdioFile file;
|
|
CFileException fe;
|
|
if (!file.Open(sFileName, CFile::modeCreate | CFile::modeWrite, &fe)) {
|
|
char szError[MAX_PATH];
|
|
fe.GetErrorMessage(szError, sizeof(szError));
|
|
CString sError;
|
|
sError.Format("파일을 만들 수 없습니다.\n%s", szError);
|
|
AfxMessageBox(sError, MB_ICONERROR);
|
|
return;
|
|
}
|
|
|
|
BOOL bSubSearch = COptions::GetOptionVal(OPTION_SEARCHSUBURL);
|
|
|
|
CString sSTag, sETag;
|
|
switch (COptions::GetOptionVal(OPTION_URLTAGTYPE)) {
|
|
case 1:
|
|
sSTag = "<img src=\"";
|
|
sETag = "\">";
|
|
break;
|
|
case 2:
|
|
sSTag = "<a href=\"";
|
|
sETag = "\">";
|
|
break;
|
|
case 3:
|
|
sSTag = COptions::GetOption(OPTION_URLSTAG);
|
|
sETag = COptions::GetOption(OPTION_URLETAG);
|
|
break;
|
|
}
|
|
|
|
CString sBasePath = ptree->GetPath(htiSelected) + "/";
|
|
CString sURL;
|
|
//#ifdef _DEBUG
|
|
// sURL = "http://" + ((PRTREEITEM_STRUCT)ptree->GetItemData(htiVolume))->saAttr[1];
|
|
//#else
|
|
#ifdef _LGU
|
|
sURL = "http://" + ptree->GetItemText(htiVolume) + ".x-cdn.com";
|
|
#else
|
|
sURL = "http://" + ptree->GetItemText(htiVolume) + ".ktsh.co.kr";
|
|
#endif //
|
|
//#endif
|
|
|
|
BeginWaitCursor();
|
|
|
|
POSITION pos = plist->GetFirstSelectedItemPosition();
|
|
while (pos) {
|
|
int iItem = plist->GetNextSelectedItem(pos);
|
|
|
|
PRLISTITEM_STRUCT prli = (PRLISTITEM_STRUCT)plist->GetItemData(iItem);
|
|
CString sURI = sURL + sBasePath + prli->sName;
|
|
|
|
if (prli->bFolder) {
|
|
if (!bSubSearch)
|
|
continue;
|
|
|
|
UINT nFileCount;
|
|
PCLFILE_STRUCT pclfl = cl_get_file_list(hcl, sBasePath + prli->sName, 2, &nFileCount);
|
|
if (!pclfl)
|
|
continue;
|
|
|
|
for (UINT i = 1; i < nFileCount; i++) {
|
|
if (pclfl[i].attr & CLFILEATTR_FOLDER)
|
|
continue;
|
|
|
|
SaveFileUrl(sURL + pclfl[i].path, file, sSTag, sETag);
|
|
}
|
|
cl_free_file_list(hcl, pclfl);
|
|
} // is folder?
|
|
else {
|
|
SaveFileUrl(sURI, file, sSTag, sETag);
|
|
} // is not folder?
|
|
}
|
|
|
|
file.Close();
|
|
|
|
EndWaitCursor();
|
|
|
|
AfxMessageBox("저장 했습니다.");
|
|
}
|
|
|
|
void CMainFrame::SaveFileUrl(CString sURI, CStdioFile& file, CString sStag, CString sEtag)
|
|
{
|
|
CString sText;
|
|
|
|
sText = sStag;
|
|
sText += sURI;
|
|
sText += sEtag + "\n";
|
|
|
|
file.WriteString(sText);
|
|
}
|
|
|
|
void CMainFrame::GetFolderInfo(HTREEITEM hti,LPRFOLDERINFO_STRUCT pfolderinfo)
|
|
{
|
|
PCLFILE_STRUCT pclf;
|
|
UINT nFileCount;
|
|
|
|
CRemoteTreeCtrl* ptree = m_pRemoteView->GetTreeCtrl();
|
|
|
|
CString sName;
|
|
sName = ptree->GetPath(hti);
|
|
|
|
HTREEITEM htiVolume = ptree->GetVolumeItem(hti);
|
|
HCOMMLIB hcl = (HCOMMLIB)m_mapHcl[htiVolume];
|
|
CString sId = ptree->GetItemText(htiVolume);
|
|
|
|
pclf = cl_get_file_list(hcl,sName,2,&nFileCount);
|
|
|
|
for (UINT i = 1; i < nFileCount; i++)
|
|
{
|
|
if (pclf[i].attr & CLFILEATTR_FOLDER)
|
|
pfolderinfo->nCountFolder++;
|
|
else
|
|
pfolderinfo->nCountFile++;
|
|
pfolderinfo->nSize += pclf[i].size;
|
|
}
|
|
|
|
pfolderinfo->strName = sName;
|
|
cl_free_file_list(hcl,pclf);
|
|
}
|
|
|
|
void CMainFrame::UpdateVolumeInfo(HTREEITEM hti)
|
|
{
|
|
CRemoteTreeCtrl* ptree = m_pRemoteView->GetTreeCtrl();
|
|
|
|
if (hti == ptree->GetRootItem())
|
|
return;
|
|
|
|
BeginWaitCursor();
|
|
|
|
HTREEITEM htiVolume = ptree->GetVolumeItem(hti);
|
|
HCOMMLIB hcl = (HCOMMLIB)m_mapHcl[htiVolume];
|
|
CString sId = ptree->GetItemText(htiVolume);
|
|
|
|
__int64 nTotalBytes, nUsedBytes;
|
|
if (cl_get_service_info(hcl, sId, &nTotalBytes, &nUsedBytes)) {
|
|
if (nUsedBytes > nTotalBytes)
|
|
nUsedBytes = nTotalBytes;
|
|
|
|
CString sTotalBytes, sUsedBytes;
|
|
sTotalBytes.Format("%I64d", nTotalBytes);
|
|
sUsedBytes.Format("%I64d", nUsedBytes);
|
|
|
|
PRTREEITEM_STRUCT prti = (PRTREEITEM_STRUCT)ptree->GetItemData(htiVolume);
|
|
prti->saAttr[2] = sTotalBytes;
|
|
prti->saAttr[3] = sUsedBytes;
|
|
|
|
prti = (PRTREEITEM_STRUCT)ptree->GetItemData(ptree->GetRootItem());
|
|
for (int i = 0; i < prti->paObject.GetCount(); i++) {
|
|
PRLISTITEM_STRUCT prli = (PRLISTITEM_STRUCT)prti->paObject[i];
|
|
if (prli->sName == sId) {
|
|
prli->nSize = nTotalBytes;
|
|
prli->saAttr[1].Format("%I64d", nTotalBytes);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
EndWaitCursor();
|
|
}
|
|
|
|
void CMainFrame::BeginWaitMessage(CCmdTarget *pct)
|
|
{
|
|
BeginWaitCursor();
|
|
// m_pwmdlg->ShowWindow(SW_SHOW);
|
|
}
|
|
|
|
void CMainFrame::EndWaitMessage(CCmdTarget *pct)
|
|
{
|
|
// m_pwmdlg->ShowWindow(SW_HIDE);
|
|
EndWaitCursor();
|
|
}
|
|
|
|
void CMainFrame::SetFocus(CWnd* pwnd)
|
|
{
|
|
if (pwnd == m_pRemoteView || pwnd == &m_pRemoteView->m_capTitle || pwnd == &m_pRemoteView->m_cboAddr
|
|
|| pwnd == &m_pRemoteView->m_tree || pwnd == &m_pRemoteView->m_list) {
|
|
m_fl = FL_REMOTE;
|
|
if (pwnd == &m_pRemoteView->m_tree || pwnd == &m_pRemoteView->m_list)
|
|
m_pwndRemote = pwnd;
|
|
}
|
|
else {
|
|
m_fl = FL_LOCAL;
|
|
if (pwnd == &m_pLocalView->m_tree || pwnd == &m_pLocalView->m_list)
|
|
m_pwndLocal = pwnd;
|
|
}
|
|
|
|
m_pRemoteView->RedrawFocus();
|
|
m_pLocalView->RedrawFocus();
|
|
|
|
PostMessage(WMU_UPDATE_CONTROL_STATUS);
|
|
}
|
|
|
|
CString CMainFrame::GetProxyHost()
|
|
{
|
|
CString sHost = "";
|
|
|
|
if (!COptions::GetOptionVal(OPTION_USEIEPROXY))
|
|
sHost = COptions::GetOption(OPTION_PROXYHOST);
|
|
else {
|
|
CRegUtil ru;
|
|
if (ru.OpenKey(HKEY_CURRENT_USER, "Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings")) {
|
|
if (ru.GetNumValue("ProxyEnable") == 1) {
|
|
sHost = ru.GetStrValue("ProxyServer");
|
|
int iPos = sHost.Find("://");
|
|
if (iPos >= 0)
|
|
sHost = sHost.Mid(iPos + 3);
|
|
iPos = sHost.Find(':');
|
|
if (iPos >= 0)
|
|
sHost = sHost.Left(iPos);
|
|
}
|
|
else
|
|
sHost = "";
|
|
|
|
ru.CloseKey();
|
|
}
|
|
}
|
|
|
|
|
|
return sHost;
|
|
}
|
|
|
|
int CMainFrame::GetProxyPort()
|
|
{
|
|
int nPort = 0;
|
|
|
|
if (!COptions::GetOptionVal(OPTION_USEIEPROXY))
|
|
nPort = atoi(COptions::GetOption(OPTION_PROXYPORT));
|
|
else {
|
|
CRegUtil ru;
|
|
if (ru.OpenKey(HKEY_CURRENT_USER, "Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings")) {
|
|
if (ru.GetNumValue("ProxyEnable") == 1) {
|
|
CString sHost = ru.GetStrValue("ProxyServer");
|
|
int iPos = sHost.Find("://");
|
|
if (iPos >= 0)
|
|
sHost = sHost.Mid(iPos + 3);
|
|
iPos = sHost.Find(':');
|
|
if (iPos >= 0)
|
|
nPort = atoi(sHost.Mid(iPos + 1));
|
|
else
|
|
nPort = 80;
|
|
}
|
|
|
|
ru.CloseKey();
|
|
}
|
|
}
|
|
|
|
|
|
return nPort;
|
|
}
|