📄 wnddownloads.cpp
字号:
if ( dlg.DoModal() != IDOK ) break;
pLock.Lock();
if ( Downloads.Check( pDownload ) )
{
dlg.Create( pDownload, bShared );
pDownload->Remove();
}
}
else
{
pDownload->Remove();
}
}
}
Update();
}
void CDownloadsWnd::OnUpdateDownloadsClearIncomplete(CCmdUI *pCmdUI)
{
Prepare();
if ( CCoolBarItem* pcCmdUI = CCoolBarItem::FromCmdUI( pCmdUI ) )
pcCmdUI->Show( m_bSelNotCompleteAndNoPreview || ! m_bSelDownload );
pCmdUI->Enable( m_bSelNotCompleteAndNoPreview );
}
void CDownloadsWnd::OnDownloadsClearIncomplete()
{
CSingleLock pLock( &Transfers.m_pSection, TRUE );
CList<CDownload*> pList;
for ( POSITION pos = Downloads.GetIterator() ; pos ; )
{
CDownload* pDownload = Downloads.GetNext( pos );
if ( pDownload->m_bSelected ) pList.AddTail( pDownload );
}
while ( ! pList.IsEmpty() )
{
CDownload* pDownload = pList.RemoveHead();
if ( Downloads.Check( pDownload ) )
{
if ( ! pDownload->IsCompleted() && ! pDownload->IsPreviewVisible() )
{
if ( pDownload->IsStarted() )
{
CDeleteFileDlg dlg;
dlg.m_sName = pDownload->m_sRemoteName;
BOOL bShared = pDownload->IsShared();
pLock.Unlock();
if ( dlg.DoModal() != IDOK ) break;
pLock.Lock();
if ( Downloads.Check( pDownload ) ) dlg.Create( pDownload, bShared );
}
if ( Downloads.Check( pDownload ) ) pDownload->Remove();
}
}
}
Update();
}
void CDownloadsWnd::OnUpdateDownloadsClearComplete(CCmdUI *pCmdUI)
{
Prepare();
if ( CCoolBarItem* pcCmdUI = CCoolBarItem::FromCmdUI( pCmdUI ) )
pcCmdUI->Show( m_bSelCompletedAndNoPreview );
pCmdUI->Enable( m_bSelCompletedAndNoPreview );
}
void CDownloadsWnd::OnDownloadsClearComplete()
{
for ( POSITION pos = Downloads.GetIterator() ; pos ; )
{
CDownload* pDownload = Downloads.GetNext( pos );
if ( pDownload->m_bSelected )
{
if ( pDownload->IsCompleted() && ! pDownload->IsPreviewVisible() )
{
pDownload->Remove();
}
}
}
Update();
}
void CDownloadsWnd::OnUpdateDownloadsLaunch(CCmdUI* pCmdUI)
{
Prepare();
if ( CCoolBarItem* pcCmdUI = CCoolBarItem::FromCmdUI( pCmdUI ) )
pcCmdUI->Show( m_bSelStartedAndNotMoving || ! m_bSelCompleted );
pCmdUI->Enable( m_bSelCompleted || m_bSelStartedAndNotMoving );
}
void CDownloadsWnd::OnDownloadsLaunch()
{
CSingleLock pLock( &Transfers.m_pSection, TRUE );
CList<CDownload*> pList;
int nCount = 0;
for ( POSITION pos = Downloads.GetIterator() ; pos ; )
{
CDownload* pDownload = Downloads.GetNext( pos );
if ( pDownload->m_bSelected ) pList.AddTail( pDownload );
}
while ( ! pList.IsEmpty() )
{
CDownload* pDownload = pList.RemoveHead();
if ( Downloads.Check( pDownload ) )
{
CString strName = pDownload->m_sLocalName;
if ( pDownload->IsCompleted() )
{
if ( pDownload->m_pTorrent.m_nFiles > 1 )
{
CString strPath = DownloadGroups.GetCompletedPath( pDownload );
strPath += _T("\\");
strPath += pDownload->m_pTorrent.m_sName;
if ( GetFileAttributes( strPath ) & FILE_ATTRIBUTE_DIRECTORY )
{
ShellExecute( NULL, NULL, strPath, NULL, NULL, SW_SHOWNORMAL );
continue;
}
}
if ( pDownload->m_bVerify == TS_FALSE )
{
CString strFormat, strMessage;
LoadString( strFormat, IDS_LIBRARY_VERIFY_FAIL );
strMessage.Format( strFormat, (LPCTSTR)strName );
pLock.Unlock();
UINT nResponse = AfxMessageBox( strMessage, MB_ICONEXCLAMATION|MB_YESNOCANCEL|MB_DEFBUTTON2 );
if ( nResponse == IDCANCEL ) break;
pLock.Lock();
if ( nResponse == IDNO ) continue;
}
pLock.Unlock();
if ( ! CFileExecutor::Execute( strName, FALSE ) ) break;
pLock.Lock();
if ( ++nCount >= 5 ) break;
}
else if ( pDownload->IsStarted() && ! pDownload->IsMoving() )
{
if ( pDownload->CanPreview() )
{
pDownload->Preview( &pLock );
}
else
{
pLock.Unlock();
if ( ! CFileExecutor::Execute( strName, FALSE ) ) break;
pLock.Lock();
}
if ( ++nCount >= 3 ) break;
}
}
}
}
void CDownloadsWnd::OnUpdateDownloadsLaunchComplete(CCmdUI* pCmdUI)
{
Prepare();
if ( CCoolBarItem* pItem = CCoolBarItem::FromCmdUI( pCmdUI ) )
pItem->Show( m_bSelCompleted );
pCmdUI->Enable( m_bSelCompleted );
}
void CDownloadsWnd::OnDownloadsLaunchComplete()
{
OnDownloadsLaunch();
}
void CDownloadsWnd::OnUpdateDownloadsLaunchCopy(CCmdUI* pCmdUI)
{
Prepare();
if ( CCoolBarItem* pcCmdUI = CCoolBarItem::FromCmdUI( pCmdUI ) )
pcCmdUI->Show( m_bSelStartedAndNotMoving || ! m_bSelCompleted );
pCmdUI->Enable( m_bSelCompleted || m_bSelStartedAndNotMoving );
}
void CDownloadsWnd::OnDownloadsLaunchCopy()
{
CSingleLock pLock( &Transfers.m_pSection, TRUE );
CList<CDownload*> pList;
int nCount = 0;
for ( POSITION pos = Downloads.GetIterator() ; pos ; )
{
CDownload* pDownload = Downloads.GetNext( pos );
if ( pDownload->m_bSelected ) pList.AddTail( pDownload );
}
while ( ! pList.IsEmpty() )
{
CDownload* pDownload = pList.RemoveHead();
if ( Downloads.Check( pDownload ) )
{
if ( pDownload->IsStarted() && ! pDownload->IsMoving() )
{
CString strType;
int nExtPos = pDownload->m_sLocalName.ReverseFind( '.' );
if ( nExtPos > 0 ) strType = pDownload->m_sLocalName.Mid( nExtPos + 1 );
strType = _T("|") + strType + _T("|");
if ( _tcsistr( Settings.Library.SafeExecute, strType ) == NULL ||
pDownload->CanPreview() )
{
CString strFormat, strPrompt;
LoadString( strFormat, IDS_LIBRARY_CONFIRM_EXECUTE );
strPrompt.Format( strFormat, (LPCTSTR)pDownload->m_sLocalName );
pLock.Unlock();
int nResult = AfxMessageBox( strPrompt, MB_ICONQUESTION|MB_YESNOCANCEL|MB_DEFBUTTON2 );
pLock.Lock();
if ( nResult == IDCANCEL ) break;
else if ( nResult == IDNO ) continue;
}
if ( Downloads.Check( pDownload ) ) pDownload->Preview( &pLock );
if ( ++nCount >= 3 ) break;
}
}
}
}
void CDownloadsWnd::OnUpdateDownloadsEnqueue(CCmdUI* pCmdUI)
{
Prepare();
if ( CCoolBarItem* pcCmdUI = CCoolBarItem::FromCmdUI( pCmdUI ) )
pcCmdUI->Show( m_bSelStartedAndNotMoving || ! m_bSelCompleted );
pCmdUI->Enable( m_bSelCompleted || m_bSelStartedAndNotMoving );
}
void CDownloadsWnd::OnDownloadsEnqueue()
{
CSingleLock pLock( &Transfers.m_pSection, TRUE );
CList<CDownload*> pList;
for ( POSITION pos = Downloads.GetIterator() ; pos ; )
{
CDownload* pDownload = Downloads.GetNext( pos );
if ( pDownload->m_bSelected ) pList.AddTail( pDownload );
}
while ( ! pList.IsEmpty() )
{
CDownload* pDownload = pList.RemoveHead();
if ( Downloads.Check( pDownload ) )
{
if ( pDownload->IsStarted() )
{
CString strPath = pDownload->m_sLocalName;
pLock.Unlock();
CFileExecutor::Enqueue( strPath );
pLock.Lock();
}
}
}
}
void CDownloadsWnd::OnUpdateDownloadsSources(CCmdUI* pCmdUI)
{
Prepare();
pCmdUI->Enable( m_bSelNotMoving );
}
void CDownloadsWnd::OnDownloadsSources()
{
CSingleLock pLock( &Transfers.m_pSection, TRUE );
for ( POSITION pos = Downloads.GetIterator() ; pos ; )
{
CDownload* pDownload = Downloads.GetNext( pos );
if ( pDownload->m_bSelected )
{
if ( ! pDownload->IsMoving() ) pDownload->FindMoreSources();
}
}
Update();
}
void CDownloadsWnd::OnUpdateDownloadsUrl(CCmdUI* pCmdUI)
{
Prepare();
pCmdUI->Enable( m_bSelNotMoving );
}
void CDownloadsWnd::OnDownloadsUrl()
{
CSingleLock pLock( &Transfers.m_pSection, TRUE );
CList<CDownload*> pList;
for ( POSITION pos = Downloads.GetIterator() ; pos ; )
{
CDownload* pDownload = Downloads.GetNext( pos );
if ( pDownload->m_bSelected ) pList.AddTail( pDownload );
}
while ( ! pList.IsEmpty() )
{
CDownload* pDownload = pList.RemoveHead();
if ( Downloads.Check( pDownload ) )
{
if ( ! pDownload->IsMoving() )
{
CDownloadDlg dlg( NULL, pDownload );
pLock.Unlock();
if ( dlg.DoModal() != IDOK ) break;
pLock.Lock();
if ( ! Downloads.Check( pDownload ) || pDownload->IsMoving() ) continue;
pDownload->AddSourceURL( dlg.m_pURL->m_sURL, FALSE );
}
}
}
Update();
}
void CDownloadsWnd::OnUpdateDownloadsBoost(CCmdUI* pCmdUI)
{
if ( Settings.Bandwidth.Downloads == 0 )
{
pCmdUI->Enable( FALSE );
return;
}
Prepare();
pCmdUI->Enable( m_bSelBoostable );
}
void CDownloadsWnd::OnDownloadsBoost()
{
CSingleLock pLock( &Transfers.m_pSection, TRUE );
for ( POSITION pos = Downloads.GetIterator() ; pos ; )
{
CDownload* pDownload = Downloads.GetNext( pos );
if ( pDownload->m_bSelected )
{
if ( pDownload->GetTransferCount() && ! pDownload->IsBoosted() )
{
pDownload->Boost();
}
}
}
Update();
}
void CDownloadsWnd::OnUpdateDownloadsCopy(CCmdUI* pCmdUI)
{
Prepare();
pCmdUI->Enable( m_bSelSHA1orED2K );
}
void CDownloadsWnd::OnDownloadsCopy()
{
CSingleLock pLock( &Transfers.m_pSection, TRUE );
CList<CDownload*> pList;
for ( POSITION pos = Downloads.GetIterator() ; pos ; )
{
CDownload* pDownload = Downloads.GetNext( pos );
if ( pDownload->m_bSelected ) pList.AddTail( pDownload );
}
while ( ! pList.IsEmpty() )
{
CDownload* pDownload = pList.RemoveHead();
if ( Downloads.Check( pDownload ) && ( pDownload->m_bSHA1 || pDownload->m_bED2K ) )
{
CURLCopyDlg dlg;
dlg.m_sName = pDownload->m_sRemoteName;
dlg.m_bSHA1 = pDownload->m_bSHA1;
dlg.m_pSHA1 = pDownload->m_pSHA1;
dlg.m_bTiger = pDownload->m_bTiger;
dlg.m_pTiger = pDownload->m_pTiger;
dlg.m_bED2K = pDownload->m_bED2K;
dlg.m_pED2K = pDownload->m_pED2K;
dlg.m_bSize = pDownload->m_nSize != SIZE_UNKNOWN;
dlg.m_nSize = pDownload->m_nSize;
dlg.DoModal();
}
}
}
void CDownloadsWnd::OnUpdateDownloadsShare(CCmdUI* pCmdUI)
{
#ifndef _DEBUG
if ( Settings.eDonkey.EnableToday )
{
pCmdUI->Enable( FALSE );
pCmdUI->SetCheck( TRUE );
return;
}
#endif
Prepare();
pCmdUI->Enable( m_bSelDownload && m_bSelShareConsistent );
pCmdUI->SetCheck( m_bSelShareState );
}
void CDownloadsWnd::OnDownloadsShare()
{
CSingleLock pLock( &Transfers.m_pSection, TRUE );
for ( POSITION pos = Downloads.GetIterator() ; pos ; )
{
CDownload* pDownload = Downloads.GetNext( pos );
if ( pDownload->m_bSelected )
{
pDownload->Share( ! pDownload->IsShared() );
}
}
Update();
}
void CDownloadsWnd::OnUpdateDownloadsMonitor(CCmdUI* pCmdUI)
{
Prepare();
if ( CCoolBarItem* pcCmdUI = CCoolBarItem::FromCmdUI( pCmdUI ) )
pcCmdUI->Show( ! m_bSelCompleted );
pCmdUI->Enable( m_bSelDownload && ! m_bSelCompleted );
}
void CDownloadsWnd::OnDownloadsMonitor()
{
CSingleLock pLock( &Transfers.m_pSection, TRUE );
CList<CDownload*> pList;
for ( POSITION pos = Downloads.GetIterator() ; pos ; )
{
CDownload* pDownload = Downloads.GetNext( pos );
if ( pDownload->m_bSelected ) pList.AddTail( pDownload );
}
while ( ! pList.IsEmpty() )
{
CDownload* pDownload = pList.RemoveHead();
if ( Downloads.Check( pDownload ) && ! pDownload->IsMoving() )
{
pDownload->ShowMonitor( &pLock );
}
}
}
void CDownloadsWnd::OnUpdateDownloadsTorrentInfo(CCmdUI* pCmdUI)
{
Prepare();
if ( CCoolBarItem* pcCmdUI = CCoolBarItem::FromCmdUI( pCmdUI ) )
pcCmdUI->Show( m_bSelTorrent );
pCmdUI->Enable( m_bSelTorrent );
}
void CDownloadsWnd::OnDownloadsTorrentInfo()
{
CSingleLock pLock( &Transfers.m_pSection, TRUE );
for ( POSITION pos = Downloads.GetIterator() ; pos ; )
{
CDownload* pDownload = Downloads.GetNext( pos );
if ( pDownload->m_bSelected && pDownload->m_pTorrent.IsAvailable() )
{
CTorrentTrackerDlg dlg( &pDownload->m_pTorrent );
pLock.Unlock();
dlg.DoModal();
pLock.Lock();
if ( dlg.m_pInfo.IsAvailable() && Downloads.Check( pDownload ) )
{
pDownload->m_pTorrent.m_sTracker = dlg.m_pInfo.m_sTracker;
}
break;
}
}
}
void CDownloadsWnd::OnUpdateDownloadsEdit(CCmdUI *pCmdUI)
{
Prepare();
pCmdUI->Enable( m_bSelNotMoving );
}
void CDownloadsWnd::OnDownloadsEdit()
{
CSingleLock pLock( &Transfers.m_pSection, TRUE );
for ( POSITION pos = Downloads.GetIterator() ; pos ; )
{
CDownload* pDownload = Downloads.GetNext( pos );
if ( pDownload->m_bSelected && ! pDownload->IsMoving() )
{
CDownloadEditDlg dlg( pDownload );
pLock.Unlock();
dlg.DoModal();
break;
}
}
Update();
}
void CDownloadsWnd::OnUpdateDownloadsMoveUp(CCmdUI* pCmdUI)
{
Prepare();
pCmdUI->Enable( m_bSelDownload );
}
void CDownloadsWnd::OnDownloadsMoveUp()
{
m_wndDownloads.MoveSelected( -1 );
}
void CDownloadsWnd::OnUpdateDownloadsMoveDown(CCmdUI* pCmdUI)
{
Prepare();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -