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

📄 wnddownloads.cpp

📁 p2p软件
💻 CPP
📖 第 1 页 / 共 3 页
字号:
				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 + -