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 );
		}
	}
}