void CDownloads::start() { QMutexLocker l(&m_pSection); QDir d(quazaaSettings.Downloads.IncompletePath); if( !d.exists() ) d.mkpath(quazaaSettings.Downloads.IncompletePath); if( d.isReadable() ) { QStringList files = d.entryList(QStringList() << "*.!qd"); foreach(QString f, files) { QFile file(quazaaSettings.Downloads.IncompletePath + "/" + f); if( file.exists() && file.open(QFile::ReadOnly) ) { CDownload* pDownload = new CDownload(); QDataStream stream(&file); stream >> *pDownload; pDownload->moveToThread(&TransfersThread); m_lDownloads.append(pDownload); emit downloadAdded(pDownload); systemLog.postLog( LogSeverity::Notice, Components::Downloads, qPrintable( tr( "Loaded download: %s" ) ), qPrintable( pDownload->m_sDisplayName ) ); }
void CDownloads::ClearPaused() { CSingleLock pLock( &Transfers.m_pSection, TRUE ); for ( POSITION pos = GetIterator() ; pos ; ) { CDownload* pDownload = GetNext( pos ); if ( pDownload->IsPaused() ) pDownload->Remove(); } }
void CDownloads::ClearCompleted() { CSingleLock pLock( &Transfers.m_pSection, TRUE ); for ( POSITION pos = GetIterator() ; pos ; ) { CDownload* pDownload = GetNext( pos ); if ( ( pDownload->IsCompleted() ) && ( !pDownload->IsSeeding() ) ) pDownload->Remove(); } }
void CDownloads::Save(BOOL bForce) { CSingleLock pLock( &Transfers.m_pSection, TRUE ); for ( POSITION pos = GetIterator() ; pos ; ) { CDownload* pDownload = GetNext( pos ); if ( bForce || pDownload->m_nCookie != pDownload->m_nSaveCookie ) pDownload->Save( TRUE ); } }
void CDownloads::add(CQueryHit *pHit) { ASSUME_LOCK(Downloads.m_pSection); CDownload* pDownload = new CDownload(pHit); pDownload->moveToThread(&TransfersThread); m_lDownloads.append(pDownload); pDownload->saveState(); systemLog.postLog(LogSeverity::Notice, qPrintable(tr("Queued download job for %s")), qPrintable(pDownload->m_sDisplayName)); emit downloadAdded(pDownload); }
void CDownloads::OnQueryHits(CQueryHit* pHits) { CSingleLock pLock( &Transfers.m_pSection ); if ( ! pLock.Lock( 50 ) ) return; for ( POSITION pos = GetIterator() ; pos ; ) { CDownload* pDownload = GetNext( pos ); if ( pDownload->IsMoving() == FALSE ) pDownload->OnQueryHits( pHits ); } }
BOOL CDownloads::CheckActive(CDownload* pDownload, int nScope) const { for ( POSITION pos = GetReverseIterator() ; pos && nScope > 0 ; ) { CDownload* pTest = GetPrevious( pos ); BOOL bActive = pTest->IsPaused() == FALSE && pTest->IsCompleted() == FALSE; if ( pDownload == pTest ) return bActive; if ( bActive ) nScope--; } return FALSE; }
int CDownloads::GetConnectingTransferCount() const { int nCount = 0; for ( POSITION pos = GetIterator() ; pos ; ) { CDownload* pDownload = GetNext( pos ); nCount += pDownload->GetTransferCount( dtsConnecting ); } return nCount; }
BOOL CDownloads::OnPush(GGUID* pGUID, CConnection* pConnection) { CSingleLock pLock( &Transfers.m_pSection ); if ( ! pLock.Lock( 250 ) ) return FALSE; for ( POSITION pos = GetIterator() ; pos ; ) { CDownload* pDownload = GetNext( pos ); if ( pDownload->OnAcceptPush( pGUID, pConnection ) ) return TRUE; } return FALSE; }
CDownload* CDownloads::FindByTiger(const TIGEROOT* pTiger, BOOL bSharedOnly) const { for ( POSITION pos = GetIterator() ; pos ; ) { CDownload* pDownload = GetNext( pos ); if ( pDownload->m_bTiger && pDownload->m_pTiger == *pTiger ) { if ( ! bSharedOnly || ( pDownload->IsShared() && pDownload->IsStarted() ) ) return pDownload; } } return NULL; }
CDownload* CDownloads::FindBySHA1(const SHA1* pSHA1, BOOL bSharedOnly) const { for ( POSITION pos = GetIterator() ; pos ; ) { CDownload* pDownload = GetNext( pos ); if ( pDownload->m_bSHA1 && pDownload->m_pSHA1 == *pSHA1 ) { if ( ! bSharedOnly || ( pDownload->IsShared() && pDownload->IsStarted() ) ) return pDownload; } } return NULL; }
QWORD CDownloads::GetAmountDownloadedFrom(IN_ADDR* pAddress) { QWORD nTotal = 0; if ( pAddress == NULL ) return 0; for ( POSITION pos = GetIterator() ; pos ; ) { CDownload* pDownload = GetNext( pos ); nTotal += pDownload->GetAmountDownloadedFrom(pAddress); } return nTotal; }
CDownload* CDownloads::FindByBTH(const SHA1* pBTH, BOOL bSharedOnly) const { for ( POSITION pos = GetIterator() ; pos ; ) { CDownload* pDownload = GetNext( pos ); if ( pDownload->m_bBTH && pDownload->m_pBTH == *pBTH ) { if ( ! bSharedOnly || ( pDownload->IsShared() ) ) return pDownload; } } return NULL; }
CDownload* CDownloads::FindByED2K(const MD4* pED2K, BOOL bSharedOnly) const { for ( POSITION pos = GetIterator() ; pos ; ) { CDownload* pDownload = GetNext( pos ); if ( pDownload->m_bED2K && pDownload->m_pED2K == *pED2K ) { if ( ! bSharedOnly || ( pDownload->IsShared() && pDownload->IsStarted() ) && ( pDownload->m_nSize > ED2K_PART_SIZE || pDownload->IsCompleted() ) ) return pDownload; } } return NULL; }
void CDownloads::SerializeCompound(CArchive& ar) { ASSERT( ar.IsLoading() ); int nVersion; ar >> nVersion; if ( nVersion < 4 ) return; for ( int nCount = ar.ReadCount() ; nCount > 0 ; nCount-- ) { CDownload* pDownload = new CDownload(); m_pList.AddTail( pDownload ); pDownload->Serialize( ar, nVersion ); } }
BOOL CDownloads::OnDonkeyCallback(CEDClient* pClient, CDownloadSource* pExcept) { CSingleLock pLock( &Transfers.m_pSection ); if ( ! pLock.Lock( 250 ) ) return FALSE; if ( m_bClosing ) return FALSE; for ( POSITION pos = GetIterator() ; pos ; ) { CDownload* pDownload = GetNext( pos ); if ( pDownload->OnDonkeyCallback( pClient, pExcept ) ) return TRUE; } return FALSE; }
int CDownloads::GetSeedCount() const { int nCount = 0; for ( POSITION pos = GetIterator() ; pos ; ) { CDownload* pDownload = GetNext( pos ); if ( pDownload->IsSeeding() ) nCount++; //Manually seeded Torrent else if ( pDownload->IsCompleted() && pDownload->m_bBTH && pDownload->IsFullyVerified() ) nCount++; //Torrent that has completed } return nCount; }
BOOL CTorrentGeneralPage::OnInitDialog() { if ( ! CPropertyPageAdv::OnInitDialog() ) return FALSE; ASSUME_LOCK( Transfers.m_pSection ); CDownload* pDownload = ((CDownloadSheet*)GetParent())->GetDownload(); ASSERT( pDownload && pDownload->IsTorrent() ); CBTInfo& oInfo = pDownload->m_pTorrent; m_sName = oInfo.m_sName; m_sComment = oInfo.m_sComment; m_sCreatedBy = oInfo.m_sCreatedBy; if ( oInfo.m_tCreationDate > 0 ) { CTime pTime( (time_t)oInfo.m_tCreationDate ); m_sCreationDate = pTime.Format( _T("%Y-%m-%d %H:%M") ); } // Assembler 'other' string if ( oInfo.m_bPrivate ) { m_sTorrentOther += LoadString( IDS_BT_PRIVATE ); m_sTorrentOther += _T(", "); } if ( oInfo.HasEncodingError() ) { m_sTorrentOther += LoadString( IDS_BT_ENCODING ); m_sTorrentOther += _T(", "); } // Cut off last comma if ( ! m_sTorrentOther.IsEmpty() ) m_sTorrentOther = m_sTorrentOther.Left( m_sTorrentOther.GetLength() - 2 ); m_wndStartDownloads.SetCurSel( oInfo.m_nStartDownloads ); m_sUploadTotal.Format( _T(" %s"), (LPCTSTR)Settings.SmartVolume( oInfo.m_nTotalUpload ) ); UpdateData( FALSE ); return TRUE; }
int CDownloads::GetCount(BOOL bActiveOnly) const { if ( ! bActiveOnly ) return m_pList.GetCount(); int nCount = 0; for ( POSITION pos = GetIterator() ; pos ; ) { CDownload* pDownload = GetNext( pos ); if ( ! pDownload->IsMoving() && ! pDownload->IsPaused() && pDownload->GetSourceCount( TRUE ) > 0 ) nCount++; } return nCount; }
int CDownloads::GetTryingCount(BOOL bTorrentsOnly) const { int nCount = 0; for ( POSITION pos = GetIterator() ; pos ; ) { CDownload* pDownload = GetNext( pos ); if ( ( pDownload->IsTrying() ) && ( ! pDownload->IsCompleted() ) && ( ! pDownload->IsPaused() ) ) { if ( ( pDownload->m_bBTH ) || ( ! bTorrentsOnly ) ) nCount++; } } return nCount; }
void CDownloads::Load() { CSingleLock pLock( &Transfers.m_pSection, TRUE ); WIN32_FIND_DATA pFind; CString strPath; HANDLE hSearch; PurgeDeletes(); PurgePreviews(); DownloadGroups.CreateDefault(); LoadFromCompoundFiles(); strPath = Settings.Downloads.IncompletePath + _T("\\*.sd"); hSearch = FindFirstFile( strPath, &pFind ); if ( hSearch != INVALID_HANDLE_VALUE ) { do { CDownload* pDownload = new CDownload(); strPath.Format( _T("%s\\%s"), (LPCTSTR)Settings.Downloads.IncompletePath, pFind.cFileName ); if ( pDownload->Load( strPath ) ) { m_pList.AddTail( pDownload ); } else { theApp.Message( MSG_ERROR, _T("Error loading %s"), strPath ); pDownload->ClearSources(); delete pDownload; } } while ( FindNextFile( hSearch, &pFind ) ); FindClose( hSearch ); } Save( FALSE ); DownloadGroups.Load(); Transfers.StartThread(); }
int CLocalSearch::ExecutePartialFiles(int nMaximum) { ASSERT( m_nProtocol == PROTOCOL_G2 ); ASSERT( m_pSearch != NULL ); if ( m_pSearch->m_bTiger == FALSE && m_pSearch->m_bSHA1 == FALSE && m_pSearch->m_bED2K == FALSE && m_pSearch->m_bBTH == FALSE ) return 0; CSingleLock pLock( &Transfers.m_pSection ); if ( ! pLock.Lock( 50 ) ) return 0; int nCount = 0; m_pPacket = NULL; for ( POSITION pos = Downloads.GetIterator() ; pos ; ) { CDownload* pDownload = Downloads.GetNext( pos ); if ( ! pDownload->IsShared() ) continue; if ( ( m_pSearch->m_bTiger && pDownload->m_bTiger && m_pSearch->m_pTiger == pDownload->m_pTiger ) || ( m_pSearch->m_bSHA1 && pDownload->m_bSHA1 && m_pSearch->m_pSHA1 == pDownload->m_pSHA1 ) || ( m_pSearch->m_bED2K && pDownload->m_bED2K && m_pSearch->m_pED2K == pDownload->m_pED2K ) || ( m_pSearch->m_bBTH && pDownload->m_bBTH && m_pSearch->m_pBTH == pDownload->m_pBTH ) ) { if ( pDownload->m_bBTH || pDownload->IsStarted() ) { if ( m_pPacket == NULL ) CreatePacketG2(); AddHit( pDownload, nCount++ ); } } } if ( m_pPacket != NULL ) { WriteTrailerG2(); DispatchPacket(); } return nCount; }
CDownload* CDownloads::Add(CQueryHit* pHit, BOOL bAddToHead) { CSingleLock pLock( &Transfers.m_pSection, TRUE ); CDownload* pDownload = NULL; if ( pDownload == NULL && pHit->m_bSHA1 ) pDownload = FindBySHA1( &pHit->m_pSHA1 ); if ( pDownload == NULL && pHit->m_bTiger ) pDownload = FindByTiger( &pHit->m_pTiger ); if ( pDownload == NULL && pHit->m_bED2K ) pDownload = FindByED2K( &pHit->m_pED2K ); if ( pDownload != NULL ) { theApp.Message( MSG_DOWNLOAD, IDS_DOWNLOAD_ALREADY, (LPCTSTR)pHit->m_sName ); pDownload->AddSourceHit( pHit ); pDownload->Resume(); } else { pDownload = new CDownload(); pDownload->AddSourceHit( pHit, TRUE ); if ( bAddToHead ) m_pList.AddHead( pDownload ); else m_pList.AddTail( pDownload ); theApp.Message( MSG_DOWNLOAD, IDS_DOWNLOAD_ADDED, (LPCTSTR)pDownload->GetDisplayName(), pDownload->GetSourceCount() ); if( pDownload->m_bSHA1 ) pDownload->m_bSHA1Trusted = TRUE; else if( pDownload->m_bED2K ) pDownload->m_bED2KTrusted = TRUE; } pHit->m_bDownload = TRUE; DownloadGroups.Link( pDownload ); Transfers.StartThread(); if ( ( (pDownload->GetSourceCount() == 0 ) || ( pDownload->m_bED2K && ! pDownload->m_bSHA1 ) ) &&( (GetTryingCount() < Settings.Downloads.MaxFiles ) || ( bAddToHead ) ) ) { pDownload->SetStartTimer(); } return pDownload; }
void CDownloads::UpdateAllows(BOOL bNew) { int nDownloads = 0; int nTransfers = 0; if ( bNew ) m_tLastConnect = GetTickCount(); for ( POSITION pos = GetIterator() ; pos ; ) { CDownload* pDownload = GetNext( pos ); int nTemp = pDownload->GetTransferCount(); if ( nTemp ) { nDownloads ++; nTransfers += nTemp; } } m_bAllowMoreDownloads = nDownloads < Settings.Downloads.MaxFiles; m_bAllowMoreTransfers = nTransfers < Settings.Downloads.MaxTransfers; }
unsigned int __stdcall CDownload::_RunThreadFun( void* lpThis ) { ATLASSERT(lpThis); CDownload *pThis = (CDownload*) lpThis; ULONG uMaxConns = 2; ULONG uSize = sizeof( uMaxConns ); if ( InternetQueryOption( NULL, INTERNET_OPTION_MAX_CONNS_PER_SERVER, &uMaxConns, &uSize ) ) { uMaxConns += pThis->m_nCocurrent; InternetSetOption( NULL, INTERNET_OPTION_MAX_CONNS_PER_SERVER, &uMaxConns, sizeof( uMaxConns ) ); } if(pThis) pThis->_RunThreadFun_(); uSize = sizeof( uMaxConns ); if ( InternetQueryOption( NULL, INTERNET_OPTION_MAX_CONNS_PER_SERVER, &uMaxConns, &uSize ) ) { uMaxConns -= pThis->m_nCocurrent; InternetSetOption( NULL, INTERNET_OPTION_MAX_CONNS_PER_SERVER, &uMaxConns, sizeof( uMaxConns ) ); } return 0; }
int CDownloads::GetActiveTorrentCount() const { int nCount = 0; for ( POSITION pos = GetIterator() ; pos ; ) { CDownload* pDownload = GetNext( pos ); if ( pDownload->IsDownloading() && pDownload->m_bBTH && ! pDownload->IsSeeding() && ! pDownload->IsCompleted() && ! pDownload->IsMoving() && ! pDownload->IsPaused() ) nCount++; } return nCount; }
void CRemote::PageDownloads() { if ( CheckCookie() ) return; m_nTab = tabDownloads; CString str; str.Format( L"%i", GetRandomNum( 0i32, _I32_MAX ) ); CSingleLock pLock( &DownloadGroups.m_pSection, TRUE ); Prepare(); // Header Add( L"random", str ); Output( L"downloadsHeader" ); BOOL bExclusive = ! GetKey( L"group_exclusive" ).IsEmpty(); BOOL bReveal = ! GetKey( L"group_reveal" ).IsEmpty(); for ( POSITION posGroup = DownloadGroups.GetIterator(); posGroup != NULL; ) { CDownloadGroup* pGroup = DownloadGroups.GetNext( posGroup ); CString strGroupID; strGroupID.Format( L"%p", pGroup ); Add( L"group_id", strGroupID ); if ( bExclusive ) pGroup->m_bRemoteSelected = ( GetKey( L"group_exclusive" ) == strGroupID ); else if ( bReveal ) pGroup->m_bRemoteSelected = TRUE; else if ( GetKey( L"group_select" ) == strGroupID ) pGroup->m_bRemoteSelected = TRUE; else if ( GetKey( L"group_deselect" ) == strGroupID ) pGroup->m_bRemoteSelected = FALSE; Add( L"group_caption", pGroup->m_sName ); if ( pGroup->m_bRemoteSelected ) Add( L"group_selected", L"true" ); Output( L"downloadsTab" ); Prepare( L"group_" ); } if ( ! GetKey( L"filter_set" ).IsEmpty() ) { Settings.Downloads.FilterMask &= ~( DLF_ACTIVE | DLF_PAUSED | DLF_QUEUED | DLF_SOURCES | DLF_SEED ); if ( GetKey( L"filter_active" ) == L"1" ) Settings.Downloads.FilterMask |= DLF_ACTIVE; if ( GetKey( L"filter_paused" ) == L"1" ) Settings.Downloads.FilterMask |= DLF_PAUSED; if ( GetKey( L"filter_queued" ) == L"1" ) Settings.Downloads.FilterMask |= DLF_QUEUED; if ( GetKey( L"filter_sources" ) == L"1" ) Settings.Downloads.FilterMask |= DLF_SOURCES; if ( GetKey( L"filter_seeds" ) == L"1" ) Settings.Downloads.FilterMask |= DLF_SEED; Settings.Downloads.ShowSources = ( GetKey( L"filter_show_all" ) == L"1" ); } Add( L"filter_active", ( Settings.Downloads.FilterMask & DLF_ACTIVE ) ? L"checked=\"checked\"" : L"" ); Add( L"filter_paused", ( Settings.Downloads.FilterMask & DLF_PAUSED ) ? L"checked=\"checked\"" : L"" ); Add( L"filter_queued", ( Settings.Downloads.FilterMask & DLF_QUEUED ) ? L"checked=\"checked\"" : L"" ); Add( L"filter_sources", ( Settings.Downloads.FilterMask & DLF_SOURCES ) ? L"checked=\"checked\"" : L"" ); Add( L"filter_seeds", ( Settings.Downloads.FilterMask & DLF_PAUSED ) ? L"checked=\"checked\"" : L"" ); Add( L"filter_show_all", Settings.Downloads.ShowSources ? L"checked=\"checked\"" : L"" ); Output( L"downloadsTop" ); for ( POSITION posDownload = Downloads.GetIterator(); posDownload != NULL; ) { CDownload* pDownload = Downloads.GetNext( posDownload ); CString strDownloadID; strDownloadID.Format( L"%p", pDownload ); if ( GetKey( L"modify_id" ) == strDownloadID ) { CString strAction = GetKey( L"modify_action" ); strAction.MakeLower(); if ( strAction == L"expand" ) { if ( CDownloadsCtrl::IsExpandable( pDownload ) ) pDownload->m_bExpanded = TRUE; } else if ( strAction == L"collapse" ) { if ( CDownloadsCtrl::IsExpandable( pDownload ) ) pDownload->m_bExpanded = FALSE; } else if ( strAction == L"resume" ) { pDownload->Resume(); } else if ( strAction == L"pause" ) { if ( ! pDownload->IsPaused() && ! pDownload->IsTasking() ) pDownload->Pause(); } else if ( strAction == L"cancel" ) { if ( ! pDownload->IsTasking() ) pDownload->Remove(); continue; } else if ( strAction == L"clear" ) { if ( pDownload->IsCompleted() && ! pDownload->IsPreviewVisible() ) { pDownload->Remove(); continue; } } else if ( strAction == L"more_sources" ) { // roo_koo_too improvement pDownload->FindMoreSources(); } } if ( CDownloadsCtrl::IsFiltered( pDownload ) ) continue; CDownloadGroup* pGroup = NULL; for ( POSITION posGroup = DownloadGroups.GetIterator(); posGroup != NULL; ) { pGroup = DownloadGroups.GetNext( posGroup ); if ( pGroup->m_bRemoteSelected && pGroup->Contains( pDownload ) ) break; pGroup = NULL; } if ( pGroup == NULL ) continue; Add( L"download_id", strDownloadID ); Add( L"download_filename", pDownload->GetDisplayName() ); Add( L"download_size", ( pDownload->m_nSize == SIZE_UNKNOWN ) ? LoadString( IDS_STATUS_UNKNOWN ) : Settings.SmartVolume( pDownload->m_nSize ) ); int nProgress = int( pDownload->GetProgress() ); str.Format( L"%i", nProgress ); Add( L"download_percent", str ); str.Format( L"%i", 100 - nProgress ); Add( L"download_percent_inverse", str ); Add( L"download_speed", Settings.SmartSpeed( pDownload->GetMeasuredSpeed() ) ); if ( CDownloadsCtrl::IsExpandable( pDownload ) ) { if ( pDownload->m_bExpanded ) Add( L"download_is_expanded", L"true" ); else Add( L"download_is_collapsed", L"true" ); } if ( pDownload->IsCompleted() ) Add( L"download_is_complete", L"true" ); else if ( pDownload->IsPaused() ) Add( L"download_is_paused", L"true" ); Add( L"download_status", pDownload->GetDownloadStatus() ); Add( L"download_sources", pDownload->GetDownloadSources() ); Output( L"downloadsDownload" ); if ( pDownload->m_bExpanded && CDownloadsCtrl::IsExpandable( pDownload ) ) { for ( POSITION posSource = pDownload->GetIterator(); posSource; ) { CDownloadSource* pSource = pDownload->GetNext( posSource ); ASSERT( pSource->m_pDownload == pDownload ); CString strSourceID; strSourceID.Format( L"%p", pSource ); if ( GetKey( L"modify_id" ) == strSourceID ) { CString strModifyAction = GetKey( L"modify_action" ); strModifyAction.MakeLower(); if ( strModifyAction == L"access" ) { // Only create a new Transfer if there isn't already one if ( pSource->IsIdle() && pSource->m_nProtocol != PROTOCOL_ED2K ) { if ( pDownload->IsPaused() ) pDownload->Resume(); // Workaround duplicate pDownload->Resume(); if ( pSource->m_bPushOnly ) pSource->PushRequest(); else if ( CDownloadTransfer* pTransfer = pSource->CreateTransfer() ) pTransfer->Initiate(); } } else if ( strModifyAction == L"forget" ) { pSource->Remove( TRUE, TRUE ); continue; } } if ( Settings.Downloads.ShowSources || pSource->IsConnected() ) { Add( L"source_id", strSourceID ); Add( L"source_agent", pSource->m_sServer ); Add( L"source_nick", pSource->m_sNick ); if ( ! pSource->IsIdle() ) { Add( L"source_status", pSource->GetState( FALSE ) ); Add( L"source_volume", Settings.SmartVolume( pSource->GetDownloaded() ) ); if ( DWORD nSpeed = pSource->GetMeasuredSpeed() ) Add( L"source_speed", Settings.SmartSpeed( nSpeed ) ); Add( L"source_address", pSource->GetAddress() ); Add( L"source_caption", pSource->GetAddress() + L" - " + pSource->m_sNick ); } else // No transfer { Add( L"source_address", CString( inet_ntoa( pSource->m_pAddress ) ) ); Add( L"source_caption", CString( inet_ntoa( pSource->m_pAddress ) ) + L" - " + pSource->m_sNick ); if ( pSource->m_tAttempt > 0 ) { DWORD tNow = GetTickCount(); if ( pSource->m_tAttempt >= tNow ) { tNow = ( pSource->m_tAttempt - tNow ) / 1000; CString strSourceStatus; strSourceStatus.Format( L"%.2u:%.2u", tNow / 60, tNow % 60 ); Add( L"source_status", strSourceStatus ); } } } Output( L"downloadsSource" ); Prepare( L"source_" ); } } } Prepare( L"download_" ); } // for POSITION loop Output( L"downloadsBottom" ); Output( L"downloadsFooter" ); }
void CBaseMatchWnd::OnSearchDownload() { CSingleLock pSingleLock( &m_pMatches->m_pSection, TRUE ); CPtrList pFiles, pHits; POSITION pos; for ( pos = m_pMatches->m_pSelectedFiles.GetHeadPosition() ; pos ; ) { CMatchFile* pFile = (CMatchFile*)m_pMatches->m_pSelectedFiles.GetNext( pos ); pSingleLock.Unlock(); switch ( CheckExisting( pFile->m_bSHA1, &pFile->m_pSHA1, pFile->m_bTiger, &pFile->m_pTiger, pFile->m_bED2K, &pFile->m_pED2K ) ) { case 1: pFiles.AddTail( pFile ); break; case 3: return; } pSingleLock.Lock(); } for ( pos = m_pMatches->m_pSelectedHits.GetHeadPosition() ; pos ; ) { CQueryHit* pHit = (CQueryHit*)m_pMatches->m_pSelectedHits.GetNext( pos ); pSingleLock.Unlock(); switch ( CheckExisting( pHit->m_bSHA1, &pHit->m_pSHA1, pHit->m_bTiger, &pHit->m_pTiger, pHit->m_bED2K, &pHit->m_pED2K ) ) { case 1: pHits.AddTail( pHit ); break; case 3: return; } pSingleLock.Lock(); } pSingleLock.Unlock(); if ( pFiles.IsEmpty() && pHits.IsEmpty() ) return; CSyncObject* pSync[2] = { &Network.m_pSection, &Transfers.m_pSection }; CMultiLock pMultiLock( pSync, 2, TRUE ); for ( pos = pFiles.GetHeadPosition() ; pos ; ) { CMatchFile* pFile = (CMatchFile*)pFiles.GetNext( pos ); if ( m_pMatches->m_pSelectedFiles.Find( pFile ) != NULL ) Downloads.Add( pFile ); } for ( pos = pHits.GetHeadPosition() ; pos ; ) { CQueryHit* pHit = (CQueryHit*)pHits.GetNext( pos ); if ( m_pMatches->m_pSelectedHits.Find( pHit ) != NULL ) { CDownload *pDownload = Downloads.Add( pHit ); // Send any reviews to the download, so they can be viewed later if ( pDownload && ( pHit->m_nRating || ! pHit->m_sComments.IsEmpty() ) ) { pDownload->AddReview( &pHit->m_pAddress, 2, pHit->m_nRating, pHit->m_sNick, pHit->m_sComments ); } } } pMultiLock.Unlock(); m_wndList.Invalidate(); if ( Settings.Search.SwitchToTransfers && ! m_bContextMenu && GetTickCount() - m_tContextMenu > 5000 ) { GetManager()->Open( RUNTIME_CLASS(CDownloadsWnd) ); } }
BOOL CTorrentTrackersPage::OnInitDialog() { if ( ! CPropertyPageAdv::OnInitDialog() ) return FALSE; m_wndAdd.SetIcon( CoolInterface.ExtractIcon( ID_MEDIA_ADD ) ); m_wndDel.SetIcon( CoolInterface.ExtractIcon( ID_MEDIA_REMOVE ) ); // m_wndRename.SetIcon( CoolInterface.ExtractIcon( ID_LIBRARY_RENAME ) ); ASSUME_LOCK( Transfers.m_pSection ); CDownloadSheet* pSheet = (CDownloadSheet*)GetParent(); CDownload* pDownload = pSheet->GetDownload(); ASSERT( pDownload && pDownload->IsTorrent() ); CBTInfo& oInfo = pDownload->m_pTorrent; m_sOriginalTracker = oInfo.GetTrackerAddress(); m_wndTracker.SetWindowText( m_sOriginalTracker ); int nCount = oInfo.GetTrackerCount(); m_nOriginalMode = oInfo.GetTrackerMode(); m_wndTrackerMode.SetCurSel( m_nOriginalMode ); // Remove invalid modes //if ( nCount < 2 ) //{ // m_wndTrackerMode.DeleteString( CBTInfo::tMultiFound ); // m_wndTrackerMode.DeleteString( CBTInfo::tMultiFinding ); //} CRect rc; m_wndTrackers.GetClientRect( &rc ); rc.right -= GetSystemMetrics( SM_CXVSCROLL ); CoolInterface.SetImageListTo( m_wndTrackers, LVSIL_SMALL ); m_wndTrackers.SetExtendedStyle( LVS_EX_DOUBLEBUFFER|LVS_EX_HEADERDRAGDROP|LVS_EX_FULLROWSELECT|LVS_EX_LABELTIP ); m_wndTrackers.InsertColumn( 0, _T("Tracker"), LVCFMT_LEFT, rc.right - 82, -1 ); m_wndTrackers.InsertColumn( 1, _T("Status"), LVCFMT_CENTER, 82, 0 ); m_wndTrackers.InsertColumn( 2, _T("Type"), LVCFMT_CENTER, 0, 0 ); Skin.Translate( _T("CTorrentTrackerList"), m_wndTrackers.GetHeaderCtrl() ); if ( m_wndTrackers.SetBkImage( Skin.GetWatermark( _T("CListCtrl") ) ) ) // || m_wndTrackers.SetBkImage( Images.m_bmSystemWindow.m_hObject ) "System.Windows" m_wndTrackers.SetExtendedStyle( LVS_EX_FULLROWSELECT|LVS_EX_HEADERDRAGDROP|LVS_EX_LABELTIP ); // No LVS_EX_DOUBLEBUFFER else { m_wndTrackers.SetBkColor( Colors.m_crWindow ); m_wndTrackers.SetTextBkColor( Colors.m_crWindow ); } m_wndTrackers.SetTextColor( Colors.m_crText ); for ( int nTracker = 0 ; nTracker < nCount ; nTracker++ ) { //LV_ITEM pItem = {}; //pItem.mask = LVIF_TEXT|LVIF_IMAGE|LVIF_PARAM; //pItem.iItem = m_wndTrackers.GetItemCount(); //pItem.lParam = (LPARAM)nTracker; // //if ( oInfo.GetTrackerIndex() == nTracker ) // pItem.iImage = CoolInterface.ImageForID( ID_MEDIA_SELECT ); //else if ( oInfo.GetTrackerAddress( nTracker ).GetAt( 0 ) == BAD_TRACKER_TOKEN ) // pItem.iImage = CoolInterface.ImageForID( ID_DISCOVERY_BLOCKED ); //else // pItem.iImage = CoolInterface.ImageForID( ID_DOWNLOADS_URI ); // //pItem.pszText = (LPTSTR)(LPCTSTR)oInfo.GetTrackerAddress( nTracker ); //pItem.iItem = m_wndTrackers.InsertItem( &pItem ); CString strTracker = oInfo.GetTrackerAddress( nTracker ); m_sOriginalTrackers.AddTail( strTracker ); // Display status CString strStatus; UINT nStatusIcon = ID_DOWNLOADS_URI; if ( ! StartsWith( oInfo.GetTrackerAddress( nTracker ), _PT("http://") ) && ! StartsWith( oInfo.GetTrackerAddress( nTracker ), _PT("udp://") ) ) { // Bad format, or BAD_TRACKER_TOKEN Tagged for display only (*https:// etc.) LoadString( strStatus, IDS_STATUS_UNSUPPORTED ); nStatusIcon = ID_DISCOVERY_BLOCKED; } else { switch ( oInfo.GetTrackerStatus( nTracker ) ) { case TRI_TRUE: LoadString( strStatus, IDS_STATUS_ACTIVE ); break; case TRI_FALSE: LoadString( strStatus, IDS_STATUS_TRACKERDOWN ); break; case TRI_UNKNOWN: LoadString( strStatus, IDS_STATUS_UNKNOWN ); // break; } } // pItem.iItem int nItem = m_wndTrackers.InsertItem( m_wndTrackers.GetItemCount(), strTracker, CoolInterface.ImageForID( nStatusIcon ) ); m_wndTrackers.SetItemText( nItem, 1, strStatus ); // Display type CString strType = _T("Announce"); if ( oInfo.IsMultiTracker() ) strType.Format( _T("Tier %i"), oInfo.GetTrackerTier( nTracker ) ); m_wndTrackers.SetItemText( nItem, 2, strType ); } if ( Network.IsConnected() ) PostMessage( WM_COMMAND, MAKELONG( IDC_TORRENT_REFRESH, BN_CLICKED ), (LPARAM)m_wndRefresh.GetSafeHwnd() ); // CoolInterface.FixThemeControls( this ); UpdateInterface(); return TRUE; }
BOOL CDownloadEditPage::OnApply() { if ( ! UpdateData() ) return FALSE; CString strMessage; Hashes::Sha1Hash oSHA1; Hashes::TigerHash oTiger; Hashes::Ed2kHash oED2K; Hashes::Md5Hash oMD5; Hashes::BtHash oBTH; oSHA1.fromString( m_sSHA1 ); oTiger.fromString( m_sTiger ); oED2K.fromString( m_sED2K ); oMD5.fromString( m_sMD5 ); oBTH.fromString( m_sBTH ); if ( ! m_sSHA1.IsEmpty() && ! oSHA1 ) { strMessage.Format( LoadString( IDS_DOWNLOAD_EDIT_BAD_HASH ), _T("SHA1") ); MsgBox( strMessage, MB_ICONEXCLAMATION ); GetDlgItem( IDC_URN_SHA1 )->SetFocus(); return FALSE; } if ( ! m_sTiger.IsEmpty() && ! oTiger ) { strMessage.Format( LoadString( IDS_DOWNLOAD_EDIT_BAD_HASH ), _T("Tiger-Root") ); MsgBox( strMessage, MB_ICONEXCLAMATION ); GetDlgItem( IDC_URN_TIGER )->SetFocus(); return FALSE; } if ( ! m_sED2K.IsEmpty() && ! oED2K ) { strMessage.Format( LoadString( IDS_DOWNLOAD_EDIT_BAD_HASH ), _T("ED2K") ); MsgBox( strMessage, MB_ICONEXCLAMATION ); GetDlgItem( IDC_URN_ED2K )->SetFocus(); return FALSE; } if ( ! m_sMD5.IsEmpty() && ! oMD5 ) { strMessage.Format( LoadString( IDS_DOWNLOAD_EDIT_BAD_HASH ), _T("MD5") ); MsgBox( strMessage, MB_ICONEXCLAMATION ); GetDlgItem( IDC_URN_MD5 )->SetFocus(); return FALSE; } if ( ! m_sBTH.IsEmpty() && ! oBTH ) { strMessage.Format( LoadString( IDS_DOWNLOAD_EDIT_BAD_HASH ), _T("BitTorrent") ); MsgBox( strMessage, MB_ICONEXCLAMATION ); GetDlgItem( IDC_URN_BTH )->SetFocus(); return FALSE; } CSingleLock pLock( &Transfers.m_pSection ); if ( ! pLock.Lock( 250 ) ) return FALSE; CDownloadSheet* pSheet = (CDownloadSheet*)GetParent(); CDownload* pDownload = pSheet->GetDownload(); if ( ! pDownload ) return CPropertyPageAdv::OnApply(); // Invalid download bool bNeedUpdate = false; bool bCriticalChange = false; bNeedUpdate = pDownload->m_bSHA1Trusted ^ ( m_bSHA1Trusted == TRUE ); bNeedUpdate |= pDownload->m_bTigerTrusted ^ ( m_bTigerTrusted == TRUE ); bNeedUpdate |= pDownload->m_bED2KTrusted ^ ( m_bED2KTrusted == TRUE ); bNeedUpdate |= pDownload->m_bMD5Trusted ^ ( m_bMD5Trusted == TRUE ); bNeedUpdate |= pDownload->m_bBTHTrusted ^ ( m_bBTHTrusted == TRUE ); if ( pDownload->m_sName != m_sName ) { pLock.Unlock(); if ( MsgBox( IDS_DOWNLOAD_EDIT_CHANGE_NAME, MB_ICONQUESTION|MB_YESNO ) != IDYES ) return FALSE; // Was IDS_DOWNLOAD_EDIT_RENAME pLock.Lock(); pDownload = pSheet->GetDownload(); if ( ! pDownload ) return CPropertyPageAdv::OnApply(); pDownload->Rename( m_sName ); bNeedUpdate = true; } QWORD nNewSize = 0; if ( _stscanf( m_sFileSize, _T("%I64u"), &nNewSize ) == 1 && nNewSize != pDownload->m_nSize ) { pLock.Unlock(); if ( MsgBox( IDS_DOWNLOAD_EDIT_CHANGE_SIZE, MB_ICONQUESTION|MB_YESNO ) != IDYES ) return FALSE; pLock.Lock(); pDownload = pSheet->GetDownload(); if ( ! pDownload ) return CPropertyPageAdv::OnApply(); pDownload->m_nSize = nNewSize; pDownload->CloseTransfers(); pDownload->ClearVerification(); bCriticalChange = true; } SYSTEMTIME tDate; m_wndDate.GetTime( &tDate ); if ( pDownload->m_tDate != tDate ) pDownload->m_tDate = tDate; if ( pDownload->m_oSHA1.isValid() != oSHA1.isValid() || validAndUnequal( pDownload->m_oSHA1, oSHA1 ) ) { pLock.Unlock(); strMessage.Format( LoadString( IDS_DOWNLOAD_EDIT_CHANGE_HASH ), _T("SHA1"), _T("SHA1") ); if ( MsgBox( strMessage, MB_ICONQUESTION|MB_YESNO ) != IDYES ) return FALSE; pLock.Lock(); pDownload = pSheet->GetDownload(); if ( ! pDownload ) return CPropertyPageAdv::OnApply(); pDownload->m_oSHA1 = oSHA1; if ( oSHA1 ) pDownload->m_bSHA1Trusted = true; pDownload->CloseTransfers(); pDownload->ClearVerification(); bCriticalChange = true; } if ( pDownload->m_oTiger.isValid() != oTiger.isValid() || validAndUnequal( pDownload->m_oTiger, oTiger ) ) { pLock.Unlock(); strMessage.Format( LoadString( IDS_DOWNLOAD_EDIT_CHANGE_HASH ), _T("Tiger-Root"), _T("Tiger-Root") ); if ( MsgBox( strMessage, MB_ICONQUESTION|MB_YESNO ) != IDYES ) return FALSE; pLock.Lock(); pDownload = pSheet->GetDownload(); if ( ! pDownload ) return CPropertyPageAdv::OnApply(); pDownload->m_oTiger = oTiger; if ( oTiger ) pDownload->m_bTigerTrusted = true; pDownload->CloseTransfers(); pDownload->ClearVerification(); bCriticalChange = true; } if ( pDownload->m_oED2K.isValid() != oED2K.isValid() || validAndUnequal( pDownload->m_oED2K, oED2K ) ) { pLock.Unlock(); strMessage.Format( LoadString( IDS_DOWNLOAD_EDIT_CHANGE_HASH ), _T("ED2K"), _T("ED2K") ); if ( MsgBox( strMessage, MB_ICONQUESTION|MB_YESNO ) != IDYES ) return FALSE; pLock.Lock(); pDownload = pSheet->GetDownload(); if ( ! pDownload ) return CPropertyPageAdv::OnApply(); pDownload->m_oED2K = oED2K; if ( oED2K ) pDownload->m_bED2KTrusted = true; pDownload->CloseTransfers(); pDownload->ClearVerification(); bCriticalChange = true; } if ( pDownload->m_oMD5.isValid() != oMD5.isValid() || validAndUnequal( pDownload->m_oMD5, oMD5 ) ) { pLock.Unlock(); strMessage.Format( LoadString( IDS_DOWNLOAD_EDIT_CHANGE_HASH ), _T("MD5"), _T("MD5") ); if ( MsgBox( strMessage, MB_ICONQUESTION|MB_YESNO ) != IDYES ) return FALSE; pLock.Lock(); pDownload = pSheet->GetDownload(); if ( ! pDownload ) return CPropertyPageAdv::OnApply(); pDownload->m_oMD5 = oMD5; if ( oMD5 ) pDownload->m_bMD5Trusted = true; pDownload->CloseTransfers(); pDownload->ClearVerification(); bCriticalChange = true; } if ( pDownload->m_oBTH.isValid() != oBTH.isValid() || validAndUnequal( pDownload->m_oBTH, oBTH ) ) { pLock.Unlock(); strMessage.Format( LoadString( IDS_DOWNLOAD_EDIT_CHANGE_HASH ), _T("BitTorrent"), _T("BitTorrent") ); if ( MsgBox( strMessage, MB_ICONQUESTION|MB_YESNO ) != IDYES ) return FALSE; pLock.Lock(); pDownload = pSheet->GetDownload(); if ( ! pDownload ) return CPropertyPageAdv::OnApply(); pDownload->m_oBTH = oBTH; if ( oBTH ) pDownload->m_bBTHTrusted = true; pDownload->CloseTransfers(); pDownload->ClearVerification(); bCriticalChange = true; } pDownload->m_bSHA1Trusted = m_bSHA1Trusted != FALSE; pDownload->m_bTigerTrusted = m_bTigerTrusted != FALSE; pDownload->m_bED2KTrusted = m_bED2KTrusted != FALSE; pDownload->m_bMD5Trusted = m_bMD5Trusted != FALSE; pDownload->m_bBTHTrusted = m_bBTHTrusted != FALSE; if ( bCriticalChange ) { pDownload->CloseTransfers(); pDownload->ClearSources(); pDownload->ClearFailedSources(); pDownload->ClearVerification(); bNeedUpdate = true; } if ( bNeedUpdate ) pDownload->SetModified(); return CPropertyPageAdv::OnApply(); }