📄 sitemanager.cpp
字号:
pMarkup->AddChildAttrib(_T("Name"), m_cTree.GetItemText(item));
}
}
if (pSite->NodeType == SITE)
{
SaveSingleSiteXML(pMarkup, pSite);
pMarkup->SetChildAttrib( _T("DefaultSite"), (item==m_DefaultSite) ? _T("1") : _T("0") );
}
pMarkup->IntoElem();
if (path!="")
path+="/"+m_cTree.GetItemText(item);
else
path=m_cTree.GetItemText(item);
continue;
}
HTREEITEM parent=m_cTree.GetParentItem(item);
pSite = reinterpret_cast<t_SiteManagerItem *>(m_cTree.GetItemData(item));
if (pSite)
delete pSite;
m_cTree.DeleteItem(item);
item=parent;
int pos=path.ReverseFind('/');
if (pos!=-1)
path=path.Left(pos);
else
path="";
pMarkup->OutOfElem();
pMarkup->ResetChildPos();
}
}
void CSiteManager::OnCancel()
{
m_cTree.SetRedraw(FALSE);
HTREEITEM item=m_cTree.GetChildItem(TVI_ROOT);
while(item)
{
if (m_cTree.ItemHasChildren(item))
{
item=m_cTree.GetChildItem(item);
continue;
}
t_SiteManagerItem *site=(t_SiteManagerItem *)m_cTree.GetItemData(item);
if (site)
delete site;
HTREEITEM parent=m_cTree.GetParentItem(item);
m_cTree.DeleteItem(item);
item=parent;
}
m_cTree.SetRedraw(TRUE);
CDialog::OnCancel();
}
void CSiteManager::OnRadio()
{
UpdateData(TRUE);
if (!m_Logontype)
{
m_User="anonymous";
m_Pass="anon@";
}
else
{
HTREEITEM item=m_cTree.GetSelectedItem();
ASSERT(item);
t_SiteManagerItem *site=(t_SiteManagerItem*)m_cTree.GetItemData(item);
ASSERT(site);
m_User=site->User;
if (!m_bPassDontSave)
m_Pass=site->Pass;
else
m_Pass="";
}
UpdateData(FALSE);
SetCtrlState();
}
void CSiteManager::OnExit()
{
m_cTree.SetRedraw(FALSE);
if (CheckValid())
{
SaveData();
CDialog::OnCancel();
OnClose();
}
m_cTree.SetRedraw(TRUE);
}
void CSiteManager::OnKillfocusHost()
{
UpdateData(TRUE);
t_SiteManagerItem *data=(t_SiteManagerItem *)m_cTree.GetItemData(m_cTree.GetSelectedItem());
int pos=m_Host.Find(':');
if (pos!=-1)
{
int pos2=m_Host.Find('/');
if (pos2!=-1 && pos2==(pos+1))
{
int pos3=m_Host.Find('/',pos2+1);
if (pos3!=-1 && pos3==(pos2+1))
{
if (pos==3)
{
CString tmp=m_Host.Left(pos+3);
tmp.MakeLower();
if (tmp!="ftp://")
{
return;
}
else
{
m_Host=m_Host.Right(m_Host.GetLength()-pos-3);
}
}
else if (pos==4)
{
CString tmp=m_Host.Left(pos+3);
tmp.MakeLower();
if (tmp=="ftps://")
{
m_cServerType.SetCurSel(1);
m_Host=m_Host.Right(m_Host.GetLength()-pos-3);
}
else if (tmp=="sftp://")
{
m_cServerType.SetCurSel(3);
m_Host=m_Host.Right(m_Host.GetLength()-pos-3);
}
else
return;
}
}
}
}
pos=m_Host.Find('/');
if (pos!=-1)
{
if (m_Host.GetLength()>(pos+1) && m_Host[pos+1]==' ')
data->RemoteDir=m_Host.Right(m_Host.GetLength()-pos);
else
data->RemoteDir=m_Host.Right(m_Host.GetLength()-pos-1);
CServerPath path(data->RemoteDir);
data->RemoteDir = path.GetPath();
m_Host=m_Host.Left(pos);
if (m_Host=="")
{
return;
}
}
pos=m_Host.ReverseFind('@');
if (pos!=-1)
{
CString tmp=m_Host.Left(pos);
int pos2=tmp.Find(':');
if (pos2==-1)
{
return;
}
m_Host=m_Host.Right(m_Host.GetLength()-pos-1);
m_User=tmp.Left(pos2);
m_Pass=tmp.Right(tmp.GetLength()-pos2-1);
m_Logontype=1;
SetCtrlState();
}
pos=m_Host.ReverseFind(':');
if (pos!=-1)
{
m_Port=m_Host.Right(m_Host.GetLength()-pos-1);
m_Host=m_Host.Left(pos);
}
UpdateData(FALSE);
}
void CSiteManager::OnSitemanagerSaveexit()
{
OnExit();
}
BOOL ReadString(CArchive &ar,CString &str)
{
if (!ar.ReadString(str))
return FALSE;
int pos=str.Find( _T(": ") );
if (pos==-1)
return FALSE;
str=str.Mid(pos+2);
return TRUE;
}
void CSiteManager::OnSitemanagerFileImport()
{
if (!CheckValid())
return;
CString str;
str.LoadString(IDS_SITEMANAGER_XMLFILES);
CFileDialog dlg(TRUE, _T("xml"), _T("FTP Sites"), OFN_FILEMUSTEXIST, str);
if (dlg.DoModal()==IDOK)
{
Import(dlg.GetPathName());
}
}
void CSiteManager::OnSitemanagerFileExportAsurllist()
{
if (!CheckValid())
return;
USES_CONVERSION;
CString str;
str.LoadString(IDS_SITEMANAGER_TEXTFILES);
CFileDialog dlg(FALSE, _T("txt"), _T("FTP Sites"), OFN_OVERWRITEPROMPT, str);
if (dlg.DoModal()==IDOK)
{
CFile file;
if (!file.Open(dlg.GetFileName(),CFile::modeCreate|CFile::modeWrite|CFile::shareDenyWrite))
{
AfxMessageBox(IDS_ERRORMSG_CANTCREATEFILE,MB_ICONSTOP);
return;
}
HTREEITEM item=m_cTree.GetRootItem();
while (item)
{
while(m_cTree.ItemHasChildren(item))
item=m_cTree.GetChildItem(item);
t_SiteManagerItem *site=(t_SiteManagerItem *)m_cTree.GetItemData(item);
ASSERT(site);
if (site->NodeType == SITE)
{
CString url,tmp;
if (site->nLogonType)
{
url=site->User+":"+site->Pass+"@";
}
url+=site->Host;
tmp.Format(_T("%d"),site->nPort);
if (tmp!="21")
url+=":"+tmp;
str=GetKey(tmp, _T("Remote Dir") );
if (site->RemoteDir!="")
url+="/"+site->RemoteDir;
url+="\r\n";
LPCSTR lpszAscii=T2CA(url);
file.Write(lpszAscii, strlen(lpszAscii));
}
HTREEITEM item2=m_cTree.GetNextSiblingItem(item);
while (!item2)
{
item=m_cTree.GetParentItem(item);
item2=m_cTree.GetNextSiblingItem(item);
if (!item)
break;
}
item=item2;
}
file.Close();
}
}
void CSiteManager::OnSitemanagerFileExportWithalldetails()
{
USES_CONVERSION;
if (!CheckValid())
return;
CString str;
str.LoadString(IDS_SITEMANAGER_XMLFILES);
CFileDialog dlg(FALSE, _T("xml"), _T("FTP Sites"), OFN_OVERWRITEPROMPT, str);
if (dlg.DoModal()==IDOK)
{
CMarkupSTL markup;
markup.AddElem( _T("FileZilla") );
markup.AddChildElem( _T("Sites") );
markup.IntoElem();
HTREEITEM item=m_cTree.GetRootItem();
while (item)
{
while(m_cTree.ItemHasChildren(item))
{
if (item!=m_cTree.GetRootItem())
{
markup.AddChildElem( _T("Folder") );
markup.AddChildAttrib( _T("Name"), m_cTree.GetItemText(item));
markup.IntoElem();
}
item=m_cTree.GetChildItem(item);
}
t_SiteManagerItem *site=(t_SiteManagerItem *)m_cTree.GetItemData(item);
ASSERT(site);
if (site->NodeType == SITE)
{
markup.AddChildElem( _T("Site") );
markup.AddChildAttrib(_T("Name"), m_cTree.GetItemText(item));
SaveSingleSiteXML(&markup, site);
}
else
{
markup.AddChildElem( _T("Folder") );
markup.AddChildAttrib( _T("Name"), m_cTree.GetItemText(item));
}
HTREEITEM item2=m_cTree.GetNextSiblingItem(item);
while (!item2)
{
markup.OutOfElem();
item=m_cTree.GetParentItem(item);
item2=m_cTree.GetNextSiblingItem(item);
if (!item)
break;
}
item=item2;
}
if (!markup.Save(dlg.GetPathName()))
AfxMessageBox(IDS_ERRORMSG_CANTCREATEFILE,MB_ICONSTOP);
}
}
void CSiteManager::Import(CString filename)
{
//First try to read it as XML file
CMarkupSTL markup;
if (markup.Load(filename))
{
if (markup.FindChildElem( _T("Sites") ))
{
markup.IntoElem();
HTREEITEM item=m_cTree.GetRootItem();
ImportXML(&markup, item);
m_cTree.Expand(m_cTree.GetRootItem(), TVE_EXPAND);
CString msg;
msg.Format(IDS_STATUSMSG_FILEIMPORTED, filename);
AfxMessageBox(msg,MB_ICONINFORMATION);
}
else
AfxMessageBox(IDS_ERRORMSG_CANTIMPORTFILE, MB_ICONSTOP);
return;
}
CFile file;
if (!file.Open(filename,CFile::modeRead|CFile::shareDenyWrite))
{
AfxMessageBox(IDS_ERRORMSG_CANTOPENFILE,MB_ICONSTOP);
return;
}
CArchive ar(&file,CArchive::load );
CString str;
while (ar.ReadString(str))
{
if (str=="")
continue;
CString name;
int pos;
if ((pos=str.Find( _T(": ") ))!=-1)
{ //Server list with details
t_SiteManagerItem *pSite=new t_SiteManagerItem;
pSite->nPort=0;
pSite->bFirewallBypass=0;
pSite->bPassDontSave=0;
CString folder;
do
{
if (str=="")
break;
if (str.Left(6)=="Name: ")
{
str=str.Mid(6);
name=str;
pSite->name=str;
}
if (str.Left(8)=="Folder: ")
{
str=str.Mid(8);
folder=str;
}
else if (str.Left(6)=="Host: ")
{
str=str.Mid(6);
pSite->Host=str;
}
else if (str.Left(6)=="Port: ")
{
str=str.Mid(6);
pSite->nPort=_ttoi(str);
}
else if (str.Left(6)=="User: ")
{
str=str.Mid(6);
pSite->User=str;
}
else if (str.Left(6)=="Pass: ")
{
str=str.Mid(6);
pSite->Pass=str;
}
else if (str.Left(11)=="Local Dir: ")
{
str=str.Mid(11);
pSite->LocalDir=str;
}
else if (str.Left(12)=="Remote Dir: ")
{
str=str.Mid(12);
pSite->RemoteDir=str;
}
else if (str.Left(17)=="Firewall Bypass: ")
{
str=str.Mid(17);
pSite->bFirewallBypass=_ttoi(str);
}
else if (str.Left(16)=="Dont Save Pass: ")
{
str=str.Mid(16);
pSite->bPassDontSave=_ttoi(str);
}
else if (str.Left(13)=="Server Type: ")
{
str=str.Mid(13);
pSite->nServerType=_ttoi(str);
}
} while (ar.ReadString(str));
if (pSite->bPassDontSave)
pSite->Pass="";
if (name=="" || !pSite->nPort || pSite->Host=="" || pSite->User=="")
{
delete pSite;
AfxMessageBox(IDS_ERRORMSG_CANTIMPORTFILE, MB_ICONSTOP);
return;
}
HTREEITEM hParent=m_cTree.GetRootItem();
folder.TrimRight( _T("\\") );
folder.TrimLeft( _T("\\") );
folder.Replace( _T("\\\\"), _T("\\"));
while (folder!="")
{
CString segment;
int pos=folder.Find( _T("\\") );
if (pos==-1)
{
segment=folder;
folder="";
}
else
{
segment=folder.Left(pos);
folder=folder.Mid(pos+1);
}
HTREEITEM hItem=m_cTree.GetChildItem(hParent);
while (hItem)
{
if (!m_cTree.GetItemText(hItem).CompareNoCase(segment))
break;
hItem=m_cTree.GetNextSiblingItem(hItem);
}
if (!hItem)
{
hItem=m_cTree.InsertItem(segment, hParent, TVI_SORT);
pSite->name = segment;
pSite->NodeType = FOLDER;
m_cTree.SetItemData(hItem, DWORD(pSite));
}
if (!COptions::GetOptionVal(OPTION_SITEMANAGERNOEXPANDFOLDERS) || m_cTree.GetRootItem()==hParent)
m_cTree.Expand(hParent, TVE_EXPAND);
hParent=hItem;
}
CString newname=name;
HTREEITEM child=m_cTree.GetChildItem(hParent);
int i=2;
while (child)
{
CString name2=newname;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -