📄 linkcreatordlg.cpp
字号:
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 + -