CDownloadPtr CDownloadManager::GetDownload(int id) { Downloads::iterator found = _downloads.find(id); return (found != _downloads.end()) ? found->second : CDownloadPtr(); }
void CDownloadMenu::UpdateDownloadProgress( idUserInterface *gui ) { int numSelectedModsPerPage = gui->GetStateInt( "selectedPackagesPerPage", "5" ); bool downloadsInProgress = false; // Check if we have any mission downloads pending. // Don't use DownloadManager::DownloadInProgress(), as there might be different kind of downloads in progress for( ActiveDownloads::const_iterator it = _downloads.begin(); it != _downloads.end(); ++it ) { int missionDownloadId = it->second.missionDownloadId; int l10nPackDownloadId = it->second.l10nPackDownloadId; CDownloadPtr download = gameLocal.m_DownloadManager->GetDownload( missionDownloadId ); CDownloadPtr l10nDownload = l10nPackDownloadId != -1 ? gameLocal.m_DownloadManager->GetDownload( missionDownloadId ) : CDownloadPtr(); if( !download && !l10nDownload ) { continue; } if( download->GetStatus() == CDownload::IN_PROGRESS || ( l10nDownload && l10nDownload->GetStatus() == CDownload::IN_PROGRESS ) ) { downloadsInProgress = true; break; } } // Missions in the download queue for( int i = 0; i < numSelectedModsPerPage; ++i ) { // Apply page offset int listIndex = i + _selectedListTop; bool listItemExists = listIndex < _selectedMods.Num(); // Get the referenced mod index, -1 ==> no mod int modIndex = listItemExists ? _selectedMods[listIndex] : -1; if( !listItemExists || modIndex == -1 ) { gui->SetStateString( va( "dl_mission_progress_%d", i ), "" ); continue; } // Update the progress string idStr progressStr = GetMissionDownloadProgressString( modIndex ); if( progressStr.IsEmpty() ) { continue; } gui->SetStateString( va( "dl_mission_progress_%d", i ), progressStr ); } // Update the "in progress" state flag bool prevDownloadsInProgress = gui->GetStateBool( "mission_download_in_progress" ); gui->SetStateBool( "mission_download_in_progress", downloadsInProgress ); if( prevDownloadsInProgress != downloadsInProgress ) { gui->HandleNamedEvent( "UpdateAvailableMissionColours" ); if( downloadsInProgress == false ) { // Fire the "finished downloaded" event ShowDownloadResult( gui ); } } }