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

📄 sitemanager.cpp

📁 一个FTP下载的源代码。代码质量非常高
💻 CPP
📖 第 1 页 / 共 5 页
字号:
				name2.MakeLower();
				CString childstr=m_cTree.GetItemText(child);
				childstr.MakeLower();
				if (childstr==name2)			
				{
					child=m_cTree.GetChildItem(hParent);
					newname.Format(_T("%s (%d)"), name, i);
					i++;
					continue;
				}
				child=m_cTree.GetNextSiblingItem(child);
			}
			HTREEITEM item=m_cTree.InsertItem(newname, 2, 2, hParent, TVI_SORT);
			pSite->name=newname;
			pSite->NodeType=SITE;
			m_cTree.SetItemData(item, (DWORD)pSite);
			if (!COptions::GetOptionVal(OPTION_SITEMANAGERNOEXPANDFOLDERS))
				m_cTree.Expand(hParent, TVE_EXPAND);
		}
		else
		{ //URL list
			t_SiteManagerItem *pSite=new t_SiteManagerItem;
			pSite->nPort=0;
			pSite->bFirewallBypass=0;
			pSite->bPassDontSave=0;
			
			pos=str.Find('/');
			if (pos!=-1)
			{
				pSite->RemoteDir=str.Mid(pos+1);
				str=str.Left(pos);
				if (str=="")
				{
					delete pSite;
					AfxMessageBox(IDS_ERRORMSG_CANTIMPORTFILE,MB_ICONSTOP);
					return;
				}
			}
			pos=str.ReverseFind('@');
			if (pos!=-1)
			{
				CString tmp=str.Left(pos);
				int pos2=tmp.ReverseFind(':');
				if (pos2==-1)
				{
					delete pSite;
					AfxMessageBox(IDS_ERRORMSG_CANTIMPORTFILE,MB_ICONSTOP);
					return;
				}
				str=str.Mid(pos+1);
				pSite->User=tmp.Left(pos2);
				pSite->Pass=tmp.Mid(pos2+1);
			}
			pos=str.ReverseFind(':');
			if (pos!=-1)
			{
				pSite->nPort=_ttoi(str.Mid(pos+1));
				str=str.Left(pos);
				
			}

			if (!pSite->nPort)
			{
				pSite->nPort=21;
			}
			if (pSite->User=="")
				pSite->nLogonType=0;
			else
				pSite->nLogonType=1;
			pSite->Host=str;
			name=str;
			HTREEITEM hParent=m_cTree.GetRootItem();
			CString newname=name;
			HTREEITEM child=m_cTree.GetChildItem(hParent);
			int i=2;
			while (child)
			{
				CString name2=newname;
				name2.MakeLower();
				CString childstr=m_cTree.GetItemText(child);
				childstr.MakeLower();
				if (childstr==name2)			
				{
					child=m_cTree.GetChildItem(hParent);
					newname.Format(_T("%s (%d)"), name, i);
					i++;
					continue;
				}
				child=m_cTree.GetNextSiblingItem(child);
			}
			HTREEITEM item=m_cTree.InsertItem(newname, 2, 2, hParent, TVI_SORT);
			pSite->name=newname;
			pSite->NodeType=SITE;
			m_cTree.SetItemData(item, (DWORD)pSite);
			if (!COptions::GetOptionVal(OPTION_SITEMANAGERNOEXPANDFOLDERS))
				m_cTree.Expand(hParent, TVE_EXPAND);
		}
	}
	m_cTree.Expand(m_cTree.GetRootItem(), TVE_EXPAND);
	CString msg;
	msg.Format(IDS_STATUSMSG_FILEIMPORTED,filename);
	AfxMessageBox(msg, MB_ICONINFORMATION);
}

void CSiteManager::ImportXML(CMarkupSTL *pMarkup, HTREEITEM &parent)
{
	while (pMarkup->FindChildElem())
	{
		if (pMarkup->GetChildTagName()==_T("Folder") )
		{
			CString name=pMarkup->GetChildAttrib( _T("Name") );
			HTREEITEM child=m_cTree.GetChildItem(parent);
			int i=2;
			//Iterate parent's children, looking for one that has the same name as the one we are importing.
			while (child)
			{
				CString name2=name;
				name2.MakeLower();
				CString childstr=m_cTree.GetItemText(child);
				childstr.MakeLower();
				if (childstr==name2)			
					break;
				child=m_cTree.GetNextSiblingItem(child);
			}
			HTREEITEM hItem;
			if (!child) //We didn't find one, insert one
			{
				hItem=m_cTree.InsertItem(name, parent, TVI_SORT);
				t_SiteManagerItem *pFolder=new t_SiteManagerItem;
				pFolder->name = name;
				pFolder->NodeType = FOLDER;
				m_cTree.SetItemData(hItem, (DWORD)pFolder);
			}
			else //We found one, so we will update it
				hItem=child;
			pMarkup->IntoElem();
			ImportXML(pMarkup, hItem);
			pMarkup->OutOfElem();

			if (!COptions::GetOptionVal(OPTION_SITEMANAGERNOEXPANDFOLDERS))
				m_cTree.Expand(hItem, TVE_EXPAND);
		}
		else if (pMarkup->GetChildTagName()==_T("Site") )
		{
			t_SiteManagerItem *site=GetDataXML(pMarkup);
			if (site)
			{
				CString name=pMarkup->GetChildAttrib( _T("Name") );
				CString newname=name;
				HTREEITEM child=m_cTree.GetChildItem(parent);
				int i=2;
				while (child)
				{
					CString name2=newname;
					name2.MakeLower();
					CString childstr=m_cTree.GetItemText(child);
					childstr.MakeLower();
					if (childstr==name2)			
					{
						child=m_cTree.GetChildItem(parent);
						newname.Format(_T("%s (%d)"), name, i);
						i++;
						continue;
					}
					child=m_cTree.GetNextSiblingItem(child);
				}
				HTREEITEM item=m_cTree.InsertItem(newname, 2, 2, parent, TVI_SORT);
				site->name = newname;
				site->NodeType = SITE;
				m_cTree.SetItemData(item, (DWORD)site);
				if (!COptions::GetOptionVal(OPTION_SITEMANAGERNOEXPANDFOLDERS))
					m_cTree.Expand(item, TVE_EXPAND);
				if (_ttoi(pMarkup->GetChildAttrib( _T("DefaultSite") )))
					m_DefaultSite=item;
			}
		}
	}
}

int CSiteManager::AddAndShow(t_server &server)
{
	m_addserver=server;
	m_bAddServer=TRUE;
	return DoModal();
}

int CSiteManager::ImportAndShow(CString FileToImport)
{
	m_FileToImport=FileToImport;
	return DoModal();
}

void CSiteManager::OnClose() 
{
	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;		
	}
	CDialog::OnClose();
}

void CSiteManager::SaveSingleSite(CString name, t_SiteManagerItem *site)
{
	name.TrimLeft( _T("\\") );
	SetKey(name,"Host",site->Host);
	CString str;
	str.Format(_T("%d"), site->nPort);
	SetKey(name,"Port",str);
	SetKey(name,"User",site->User);
	SetKey(name,"Remote Dir",site->RemoteDir);
	SetKey(name,"Local Dir",site->LocalDir);
	if (_ttoi(COptions::GetOption(OPTION_RUNINSECUREMODE)) || site->bPassDontSave)
		SetKey(name, _T("Pass"), _T(""));
	else
		SetKey(name, "Pass", CCrypt::encrypt(site->Pass));
	str.Format(_T("%d"), site->nLogonType+1);
	SetKey(name,"Logontype",str);
	str=site->bFirewallBypass?"1":"0";
	SetKey(name,"FW Bypass",str);
	str=site->bPassDontSave?"1":"0";
	SetKey(name,"Dont Save Pass",str);
	str.Format(_T("%d"), site->nServerType);
	SetKey(name,"Server Type",str);
	str.Format(_T("%d"), site->nPasv);
	SetKey(name, "Pasv Mode", str);
	str.Format(_T("%d"), site->nTimeZoneOffset);
	SetKey(name, "Time Zone Offset", str);
	str.Format(_T("%d"), site->nTimeZoneOffset2);
	SetKey(name, "Time Zone Offset Minutes", str);
	SetKey(name, "Comments", site->Comments);
}

void CSiteManager::SaveSingleSiteXML(CMarkupSTL *pMarkup, t_SiteManagerItem *site)
{
	pMarkup->AddChildAttrib( _T("Host"), site->Host);
	pMarkup->AddChildAttrib( _T("Port"), site->nPort);
	pMarkup->AddChildAttrib( _T("User"), site->User);
	pMarkup->AddChildAttrib( _T("RemoteDir"), site->RemoteDir);
	pMarkup->AddChildAttrib( _T("LocalDir"), site->LocalDir);
	if (_ttoi(COptions::GetOption(OPTION_RUNINSECUREMODE)) || site->bPassDontSave)
		pMarkup->AddChildAttrib( _T("Pass"), _T(""));
	else
		pMarkup->AddChildAttrib( _T("Pass"), CCrypt::encrypt(site->Pass));
	pMarkup->AddChildAttrib( _T("Logontype"), site->nLogonType);
	pMarkup->AddChildAttrib( _T("FWBypass"), site->bFirewallBypass);
	pMarkup->AddChildAttrib( _T("DontSavePass"), site->bPassDontSave);
	pMarkup->AddChildAttrib( _T("ServerType"), site->nServerType);
	pMarkup->AddChildAttrib( _T("PasvMode"), site->nPasv);
	pMarkup->AddChildAttrib( _T("TimeZoneOffset"), site->nTimeZoneOffset);
	pMarkup->AddChildAttrib( _T("TimeZoneOffsetMinutes"), site->nTimeZoneOffset2);
	pMarkup->AddChildAttrib( _T("Comments"), site->Comments);
}

void CSiteManager::OnPassdontsave() 
{
	UpdateData(TRUE);
	m_PassCtrl.EnableWindow(!m_bPassDontSave);			
	m_Pass="";
	UpdateData(FALSE);
}

//
// Read Sites from the Windows Registry
//
// Parameters:
// substring - registry subkey which contains the set of sites to read.
// parent	 - parent to which the sites and folders found within given
//			   Registry key are children.
//
void CSiteManager::ReadTree(CString substring, const LPVOID &parent, LPVOID lpData, LPVOID lpDefault,
							BUILDSITETREEPROC_NEW_ITEM NewItemProc, BUILDSITETREEPROC_NEW_FOLDER NewFolderProc, 
							BUILDSITETREEPROC_AFTER AfterProc)
{
	substring.TrimLeft( _T("\\") );
	substring.TrimRight( _T("\\") );
	HKEY key;
	if (RegOpenKey(HKEY_CURRENT_USER,"Software\\FileZilla\\Site Manager\\"+substring,&key)==ERROR_SUCCESS)
	{
		TCHAR buffer[1000];
		int index=0;
		unsigned char value[1000];
		DWORD length=1000;
		CString value2=value;
		value[0]=0;
		RegQueryValueEx(key, _T(""), 0, 0, value, &length);
		if (!_tcscmp((LPCTSTR)value, _T("Folder") ) || substring=="")
		{
			CString name;
			if (substring.ReverseFind( '\\' )!=-1)
				name=substring.Mid(substring.ReverseFind( '\\' )+1);
			else
				name=substring;
			LPVOID item = parent;
			if (substring!="")
			{
				if (NewFolderProc)
					NewFolderProc( lpData, name, item);
			}
			length=1000;
			while(RegEnumKeyEx(key, index, buffer, &length, 0, 0, 0, 0)==ERROR_SUCCESS)
			{
				ReadTree(substring+"\\"+buffer, item, lpData, lpDefault, NewItemProc, NewFolderProc, AfterProc);
				index++;
				length=1000;
			}
			if (AfterProc)
				AfterProc(lpData, name, item);
		}
		else
		{
			CString name;
			if (substring.ReverseFind('\\')!=-1)
				name=substring.Mid(substring.ReverseFind('\\')+1);
			else
				name=substring;
			t_SiteManagerItem *site=GetData(substring);
			if (site)
			{
				site->name = name;
				site->NodeType = SITE;
				if ( NewItemProc)
					NewItemProc( lpData, name, parent, site, GetKey(substring,"Default Site")=="1", lpDefault);
			}
			index++;
			length=1000;
		}
		RegCloseKey(key);
	}
}

//
// Read Sites from the XML Markup
//
// Parameters:
// pMarkup - pointer to CMarkup object preset to be pointing to the first item
//           in a set of sites (either a <Sites> or <Folder> tag)
// parent  - parent to which the sites and folders found under the current
//           branch are children.
//
void CSiteManager::ReadTreeXML(CMarkupSTL *pMarkup, const LPVOID &parent, LPVOID lpData, LPVOID lpDefault, BUILDSITETREEPROC_NEW_ITEM NewItemProc,
							BUILDSITETREEPROC_NEW_FOLDER NewFolderProc, BUILDSITETREEPROC_AFTER AfterProc)
{
	while (pMarkup->FindChildElem())
	{
		if (pMarkup->GetChildTagName()==_T("Folder") )
		{
			LPVOID item = parent;
			CString name=pMarkup->GetChildAttrib( _T("Name") );
			if (NewFolderProc)
					NewFolderProc(lpData, name, item);
			pMarkup->IntoElem();
			ReadTreeXML(pMarkup, item, lpData, lpDefault, NewItemProc, NewFolderProc, AfterProc);
			pMarkup->OutOfElem();
			if (AfterProc)
				AfterProc(lpData, name, item);

		}
		else if (pMarkup->GetChildTagName()==_T("Site") )
		{
			t_SiteManagerItem *site=GetDataXML(pMarkup);
			if (site)
			{
				site->NodeType = SITE;
				CString name=pMarkup->GetChildAttrib( _T("Name") );
				if ( NewItemProc)
					NewItemProc(lpData, name, parent, site, _ttoi(pMarkup->GetChildAttrib( _T("DefaultSite") ))?1:0, lpDefault);
			}
		}
	}
}

void CSiteManager::OnSelchangingSitemanagertree(NMHDR* pNMHDR, LRESULT* pResult) 
{
	NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
	if (!CheckValid())
	{
		*pResult = 1;
		return;
	}
	pNMTreeView->itemNew;
	pNMTreeView->itemOld;
	*pResult = 0;
}

void CSiteManager::OnSelchangedSitemanagertree(NMHDR* pNMHDR, LRESULT* pResult) 
{
	NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
	t_SiteManagerItem *pSiteManagerItem = (t_SiteManagerItem *)pNMTreeView->itemNew.lParam;
	ASSERT(pSiteManagerItem);
	if (pSiteManagerItem->NodeType == SITE)
	{
		DisplaySite(pSiteManagerItem);
	}
	else
		DisplaySite(0);
	*pResult = 0;
}

void CSiteManager::DisplaySite(t_SiteManagerItem *site)
{
	if (site && site->NodeType == SITE)
	{
		m_Host=site->Host;
		m_Port.Format( _T("%d"), site->nPort);
		m_Logontype=site->nLogonType;
		if (site->bPassDontSave)
			site->Pass="";
		if (m_Logontype)
		{
			m_User=site->User;
			m_Pass=site->Pass;
		}
		else
		{
			m_User="anonymous";
			m_Pass="anon@";
		}
		m_bFwBypass=site->bFirewallBypass;
		m_bPassDontSave=site->bPassDontSave;
		m_nDefault=(m_cTree.GetSelectedItem()==m_DefaultSite)?0:-1;
		m_cServerType.SetCurSel(site->nServerType);
		m_nServerType=site->nServerType;
		CWnd *pComments = GetDlgItem(IDC_SITEMANAGER_COMMENTS);
		if (pComments)
			pComments->SetWindowText(site->Comments);
	}
	else
	{
		m_Host="";
		m_Port="";
		m_User="";
		m_Pass="";
		m_Logontype=-1;
		m_bFwBypass=0;
		m_nDefault=-1;
		m_cServerType.SetCurSel(-1);
		CWnd *pComments = GetDlgItem(IDC_SITEMANAGER_COMMENTS);
		if (pComments)
			pComments->SetWindowText(_T(""));
	}
	UpdateData(FALSE);
	SetCtrlState();
}

void CSiteManager::OnItemexpandedSitemanagertree(NMHDR* pNMHDR, LRESULT* pResult) 
{
	NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
	
	int image=(pNMTreeView->itemNew.state&TVIS_EXPANDED)?1:0;
	m_cTree.SetItemImage(pNMTreeView->itemNew.hItem,image,image);
	*pResult = 0;
}

BOOL CSiteManager::PreTranslateMessage(MSG* pMsg) 
{
	if (pMsg->message==WM_KEYDOWN)
	{
		CEdit *edit=m_cTree.GetEditControl();
		if (edit) //Send key messages to the edit field
		{
			if (pMsg->wParam==VK_RETURN || pMsg->wParam==VK_ESCAPE)
			{
				edit->SendMessage(WM_KEYDOWN, pMsg->wParam, pMsg->lParam);
				return TRUE;
			}
		}
		else if (pMsg->wParam==VK_F2)
		{
			HTREEITEM item=m_cTree.GetSelectedItem();
			if (!item)
				return TRUE;
			if (!m_cTree.GetParentItem(item))
				return TRUE;
			m_cTree.EditLabel(item);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -