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

📄 linkcreatordlg.cpp

📁 Pipe类 Pipe类 Pipe类 Pipe类 Pipe类
💻 CPP
📖 第 1 页 / 共 2 页
字号:
LRESULT CLinkCreatorDlg::OnFileHashed(WPARAM wParam, LPARAM lParam)
{
	m_pKnownFile = (CKnownFile*)lParam;
	m_ctrlProgress.SetPos(0);

	RenewFileLink();

	// continue with next file to hash
	if (!theApp.m_saHashList.IsEmpty()) {
		if (StartNextFile())
			return TRUE;
	}
	
	GetDlgItem(IDC_STATUS)->SetWindowText(_T(""));
	
	GetDlgItem(IDC_START)->EnableWindow(TRUE);
	GetDlgItem(IDC_CANCEL)->EnableWindow(FALSE);
	GetDlgItem(IDC_WITHAICH)->EnableWindow(TRUE);
	GetDlgItem(IDC_WITHHASHSET)->EnableWindow(TRUE);

	return TRUE;
}

LRESULT CLinkCreatorDlg::OnHashFailed(WPARAM wParam, LPARAM lParam)
{
	m_ctrlProgress.SetPos(0);

	if (!theApp.m_saHashList.IsEmpty()) {
		if (StartNextFile())
			return TRUE;
	}

	GetDlgItem(IDC_STATUS)->SetWindowText(_T(""));
	GetDlgItem(IDC_START)->EnableWindow(TRUE);
	GetDlgItem(IDC_CANCEL)->EnableWindow(FALSE);
	GetDlgItem(IDC_WITHAICH)->EnableWindow(TRUE);
	GetDlgItem(IDC_WITHHASHSET)->EnableWindow(TRUE);

	return TRUE;
}

LRESULT CLinkCreatorDlg::OnProgress(WPARAM wParam, LPARAM lParam)
{
	m_ctrlProgress.SetPos(wParam);
	return TRUE;
}

void CLinkCreatorDlg::OnClose()
{
	if (m_pKnownFile) {
		delete m_pKnownFile;
		m_pKnownFile = NULL;
	}
	OnCancel();
}

void CLinkCreatorDlg::OnBnClickedAddhttp()
{
	CString strSource;
	GetDlgItemText(IDC_HTTPPATH,strSource);
	if (strSource.GetLength() < 12){
		AfxMessageBox(GetResString(IDS_INVALIDURL), MB_ICONSTOP, MB_OK);
		return;
	}

	if (IsDlgButtonChecked(IDC_CHECKSOURCE) && strSource.Right(1)!=_T("/") ) {
		SetCursor(LoadCursor(NULL, IDC_WAIT));

		if (m_iLocalFilesize==0) {
			CString filepath;
			m_ctrFilePath.GetWindowText(filepath);
			if (!IsValidFile(filepath)) {
				AfxMessageBox(GetResString(IDS_CANTOPENFILE) + filepath, MB_ICONSTOP, MB_OK);
				return;
			}
		}

		// receive header & check filesize
		UINT64 filesize=GetHTTPRequestDataSize(strSource);
		SetCursor(LoadCursor(NULL,IDC_ARROW));

		if (filesize==0) {
			AfxMessageBox(GetResString(IDS_ERR_WEBSOURCECHECK), MB_ICONSTOP, MB_OK);
			return;
		}
		else if (filesize != m_iLocalFilesize ) {
			AfxMessageBox(GetResString(IDS_ERR_WEBSOURCECHECK_NOMATCH), MB_ICONSTOP, MB_OK);
			return;
		}

	}


	m_ctrlHttpSources.AddString(strSource); 

	SetDlgItemText(IDC_HTTPPATH,_T(""));

	SetButtonStates();
	RenewFileLink();
}

void CLinkCreatorDlg::OnBnClickedHttpclear()
{
	m_ctrlHttpSources.ResetContent();
	SetButtonStates();
	RenewFileLink();
}

void CLinkCreatorDlg::OnBnClickedHttpremove()
{
	if (m_ctrlHttpSources.GetCurSel() != LB_ERR)
	{
		m_ctrlHttpSources.DeleteString(m_ctrlHttpSources.GetCurSel());
		SetButtonStates();
		RenewFileLink();
	}
}

void CLinkCreatorDlg::OnBnClickedBrowse()
{
	CFileDialog dlgFile(TRUE, 0, 0,OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST, 0, NULL, 0);
	if (dlgFile.DoModal()==IDOK){
		if (IsValidFile(dlgFile.GetPathName()))
			m_ctrFilePath.SetWindowText(dlgFile.GetPathName());
		else 
			AfxMessageBox(GetResString(IDS_CANTOPENFILE) + dlgFile.GetPathName(), MB_ICONSTOP, MB_OK);
		//SetStartButtonState();
	}
}

void CLinkCreatorDlg::OnBnCopy2Clipboard()
{
	CString strLink;
	m_ctrlResults.GetWindowText(strLink);
	CopyTextToClipboard(strLink);
}


void CLinkCreatorDlg::OnBnClickedWithHashset()
{
	if (m_pKnownFile)
		RenewFileLink();
}

void CLinkCreatorDlg::OnBnClickedWithAICH()
{
	if (m_pKnownFile && m_pKnownFile->m_pAICHHashSet &&
		m_pKnownFile->m_pAICHHashSet->GetStatus()==AICH_HASHSETCOMPLETE)
	{
		RenewFileLink();
	}
}

void CLinkCreatorDlg::OnSelchangeLang()
{
	if (m_ctrlLang.GetCurSel() != CB_ERR)
	{
		LANGID lid = (LANGID)m_ctrlLang.GetItemData(m_ctrlLang.GetCurSel());
		theApp.SetLang(lid);
		Localize();
	}
}

void CLinkCreatorDlg::RenewFileLink()
{
	if (!m_pKnownFile)
	{
		m_ctrlResults.SetWindowText(_T(""));
		return;
	}

	CString strWebsources = _T("");
	CString strClientSources = _T("");

	for(int i = 0; i != m_ctrlHttpSources.GetCount(); i++){
		CString strBuffer;
		m_ctrlHttpSources.GetText(i, strBuffer);

		// for multiple file hashing, use only httpsources without filename (to be appended)
		if (theApp.bFolderJob && strBuffer.Right(1) != _T("/") )
			continue;

		if (strBuffer.Right(1) == CString(_T("/")))
			strBuffer += StripInvalidFilenameChars(m_pKnownFile->GetFileName(), false);
		strWebsources.AppendFormat(_T("s=%s|"), strBuffer);
	}

	if (m_ctrlClientSources.GetCount()>0) {
		for(int i = 0; i != m_ctrlClientSources.GetCount(); i++){
			CString strBuffer;
			m_ctrlClientSources.GetText(i, strBuffer);
			strClientSources.AppendFormat(_T(",%s"), strBuffer);
		}
		strClientSources=_T("/|sources")+strClientSources+_T("|");
	}

	if (!theApp.bFolderJob)
		m_ctrlResults.SetWindowText(_T(""));


	CString strLink;
	m_ctrlResults.GetWindowText(strLink);

	bool bHashset = (m_ctrlWithHashset.GetCheck() == BST_CHECKED);
	bool bAICH = (m_ctrlAICH.GetCheck() == BST_CHECKED);

	CString newlink=CreateED2kLink(m_pKnownFile, strWebsources + strClientSources, bAICH, bHashset);

	if (strlen(newlink)>2038){
		if (IsDlgButtonChecked(IDC_LENGTHCHECK)) {
			// remove http sources until strlen is <=2038
			while (strlen(newlink)>2038) {
				int pos1=newlink.Find(_T("|s="));
				if (pos1==-1)
					break;
				int pos2=newlink.Find(_T("|"),pos1+1);
				if (pos2==-1)
					break;
				newlink.Delete(pos1,pos2-pos1);
			}

		}// else newlink=GetResString(IDS_TOOLONG_FOR_LINK) + _T(": \r\n") + newlink;
	}

	strLink += newlink;
	strLink += _T("\r\n");

	m_ctrlResults.SetWindowText(strLink);

	if (theApp.bFolderJob) {
		delete m_pKnownFile;
		m_pKnownFile=NULL;
	}

}


void CLinkCreatorDlg::OnBnClickedAddClientSource()
{
	CString newsource;
	GetDlgItemText(IDC_CLIENTSOURCE,newsource);

	if (newsource.IsEmpty())
		return;

	// check syntax
	bool syntaxok=true;
	CString host,sport;
	int port;
	int pos=newsource.Find(':');
	if (pos>4) {
		host=newsource.Left(pos);
		sport=newsource.Mid(pos+1);
		port=atoi(sport);

		// check ip
		if (_istdigit(host.GetAt(0))) {
			if (inet_addr(host) == INADDR_NONE )
				syntaxok=false;
		}

		// check port
		if (port<1 || port>65535)
			syntaxok=false;
	} else 
		syntaxok=false;
	
	if (!syntaxok)
	{
		AfxMessageBox(GetResString(IDS_ERRCLIENTSOURCE), MB_ICONSTOP, MB_OK);
        return;
	}

	m_ctrlClientSources.AddString(newsource); 
	SetDlgItemText(IDC_CLIENTSOURCE,_T(""));
	SetButtonStates();
	RenewFileLink();
}

void CLinkCreatorDlg::OnBnClickedClientremove()
{
	if (m_ctrlClientSources.GetCurSel() != LB_ERR)
	{
		m_ctrlClientSources.DeleteString(m_ctrlClientSources.GetCurSel());
		SetButtonStates();
		RenewFileLink();
	}
}

void CLinkCreatorDlg::OnBnClickedClientsourceclear()
{
	m_ctrlClientSources.ResetContent();
	SetButtonStates();
	RenewFileLink();
}

bool CLinkCreatorDlg::IsValidFile(CString filepath)
{
	// check local file existance and accessability
	bool flag=false;
	m_iLocalFilesize=0;

	if (!filepath.IsEmpty()) {
		HANDLE fHandle=CreateFile(filepath,    // file to open
                   GENERIC_READ,          // open for reading
                   FILE_SHARE_READ,       // share for reading
                   NULL,                  // default security
                   OPEN_EXISTING,         // existing file only
                   FILE_ATTRIBUTE_NORMAL, // normal file
                   NULL); 
			
		if (fHandle!=INVALID_HANDLE_VALUE){

			DWORD dwl,dwh;
			dwl=GetFileSize(fHandle, &dwh);
			if (dwl!=INVALID_FILE_SIZE) {
				m_iLocalFilesize= dwh;
				m_iLocalFilesize<<=32;
				m_iLocalFilesize+= dwl;
			} else 
				m_iLocalFilesize=0;
			
			CloseHandle(fHandle);

			if (m_iLocalFilesize>0) {
				if (m_iLocalFilesize> MAX_EMULE_FILE_SIZE ) {
					MessageBox(GetResString(IDS_FILETOOLARGE));

				} else 
					flag=true;
			}
		}
	}
//	GetDlgItem(IDC_START)->EnableWindow(flag);
	return flag;
}

void CLinkCreatorDlg::SetButtonStates()
{
	CString buffer;

	// websources

	// add
	GetDlgItemText(IDC_HTTPPATH,buffer);
	bool checkflag=true;
	if (IsDlgButtonChecked(IDC_CHECKSOURCE))
		if (GetDlgItem(IDC_START)->IsWindowEnabled()==FALSE)
			checkflag=false;
	GetDlgItem(IDC_ADDHTTP)->EnableWindow(buffer.GetLength()>12 && buffer.Left(7).CompareNoCase("http://")==0 && checkflag );
	
	// remove
	GetDlgItem(IDC_HTTPREMOVE)->EnableWindow((m_ctrlHttpSources.GetCurSel() != LB_ERR));

	// clear
	GetDlgItem(IDC_HTTPCLEAR)->EnableWindow( m_ctrlHttpSources.GetCount()>0 );


	// clientsources

	// add
	GetDlgItemText(IDC_CLIENTSOURCE,buffer);
	GetDlgItem(IDC_ADDCLIENT)->EnableWindow(buffer.GetLength()>6/* && buffer.Find(':')>4*/);

	// remove
	GetDlgItem(IDC_CLIENTREMOVE)->EnableWindow((m_ctrlClientSources.GetCurSel() != LB_ERR));

	// clear
	GetDlgItem(IDC_CLIENTSOURCECLEAR)->EnableWindow( m_ctrlClientSources.GetCount()>0 );
}

void CLinkCreatorDlg::OnLbnSelchangeHttplist()
{
	SetButtonStates();
}

void CLinkCreatorDlg::OnLbnSelchangeClientsourceslist()
{
	SetButtonStates();
}

BOOL CLinkCreatorDlg::PreTranslateMessage(MSG* pMsg)
{
	if (pMsg->message == WM_LBUTTONDBLCLK && pMsg->hwnd ==RESULTWND ) {
		WINDOWPLACEMENT wp;
		wp.length=sizeof(WINDOWPLACEMENT);
		GetDlgItem(IDC_RESULT)->GetWindowPlacement(&wp);

		if (resultbig) {
			wp.rcNormalPosition.top=436;
		} else {
			wp.rcNormalPosition.top=6;
		}
		GetDlgItem(IDC_RESULT)->SetWindowPlacement(&wp);

		resultbig = !resultbig;

		GetDlgItem(IDC_FILEPATH)->ShowWindow(resultbig?SW_HIDE:SW_SHOW);
		GetDlgItem(IDC_HTTPPATH)->ShowWindow(resultbig?SW_HIDE:SW_SHOW);
		GetDlgItem(IDC_CLIENTSOURCE)->ShowWindow(resultbig?SW_HIDE:SW_SHOW);
		GetDlgItem(IDC_WITHAICH)->ShowWindow(resultbig?SW_HIDE:SW_SHOW);
		GetDlgItem(IDC_WITHHASHSET)->ShowWindow(resultbig?SW_HIDE:SW_SHOW);
		GetDlgItem(IDC_CHECKSOURCE)->ShowWindow(resultbig?SW_HIDE:SW_SHOW);
		GetDlgItem(IDC_BROWSE)->ShowWindow(resultbig?SW_HIDE:SW_SHOW);
		GetDlgItem(IDC_ADDHTTP)->ShowWindow(resultbig?SW_HIDE:SW_SHOW);
		GetDlgItem(IDC_HTTPLIST)->ShowWindow(resultbig?SW_HIDE:SW_SHOW);
		GetDlgItem(IDC_HTTPREMOVE)->ShowWindow(resultbig?SW_HIDE:SW_SHOW);
		GetDlgItem(IDC_HTTPCLEAR)->ShowWindow(resultbig?SW_HIDE:SW_SHOW);
		GetDlgItem(IDC_ADDCLIENT)->ShowWindow(resultbig?SW_HIDE:SW_SHOW);
		GetDlgItem(IDC_CLIENTSOURCESLIST)->ShowWindow(resultbig?SW_HIDE:SW_SHOW);
		GetDlgItem(IDC_CLIENTREMOVE)->ShowWindow(resultbig?SW_HIDE:SW_SHOW);
		GetDlgItem(IDC_CLIENTSOURCECLEAR)->ShowWindow(resultbig?SW_HIDE:SW_SHOW);
		GetDlgItem(IDC_SOURCESFRAME)->ShowWindow(resultbig?SW_HIDE:SW_SHOW);
		GetDlgItem(IDC_LENGTHCHECK)->ShowWindow(resultbig?SW_HIDE:SW_SHOW);

		return TRUE;
	}
	return CDialog::PreTranslateMessage(pMsg);
}

void CLinkCreatorDlg::OnEnChangeFilepath()
{
	m_iLocalFilesize=0;
}

⌨️ 快捷键说明

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