⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sitemanager.cpp

📁 一个FTP下载的源代码。代码质量非常高
💻 CPP
📖 第 1 页 / 共 5 页
字号:
					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 + -