Пример #1
0
const char *UI_DownloadInfo(const char *downloadName)
{
	static char dlText[]                = "Downloading:";
	static char etaText[]               = "Estimated time left:";
	static char xferText[]              = "Transfer rate:";
	static int  tleEstimates[ESTIMATES] = { 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60,
		                                    60,  60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60,
		                                    60,  60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60,
		                                    60,  60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60 };
	static int  tleIndex = 0;
	char        dlSizeBuf[64], totalSizeBuf[64], xferRateBuf[64], dlTimeBuf[64];
	int         downloadSize, downloadCount, downloadTime;
	const char  *s, *ds;

	downloadSize  = trap_Cvar_VariableValue("cl_downloadSize");
	downloadCount = trap_Cvar_VariableValue("cl_downloadCount");
	downloadTime  = trap_Cvar_VariableValue("cl_downloadTime");

	if (downloadSize > 0)
	{
		ds = va("%s (%d%%)", downloadName, (int)((float)downloadCount * 100.0f / (float)downloadSize));
	}
	else
	{
		ds = downloadName;
	}

	UI_ReadableSize(dlSizeBuf, sizeof dlSizeBuf, downloadCount);
	UI_ReadableSize(totalSizeBuf, sizeof totalSizeBuf, downloadSize);

	if (downloadCount < 4096 || !downloadTime)
	{
		s = va("%s\n %s\n%s\n\n%s\n estimating...\n\n%s\n\n%s copied", dlText, ds, totalSizeBuf,
		       etaText,
		       xferText,
		       dlSizeBuf);
		return s;
	}
	else
	{
		int xferRate;

		if ((uiInfo.uiDC.realTime - downloadTime) / 1000)
		{
			xferRate = downloadCount / ((uiInfo.uiDC.realTime - downloadTime) / 1000);
		}
		else
		{
			xferRate = 0;
		}
		UI_ReadableSize(xferRateBuf, sizeof xferRateBuf, xferRate);

		// Extrapolate estimated completion time
		if (downloadSize && xferRate)
		{
			int n        = downloadSize / xferRate; // estimated time for entire d/l in secs
			int timeleft = 0, i;

			// We do it in K (/1024) because we'd overflow around 4MB
			tleEstimates[tleIndex] = (n - (((downloadCount / 1024) * n) / (downloadSize / 1024)));
			tleIndex++;
			if (tleIndex >= ESTIMATES)
			{
				tleIndex = 0;
			}

			for (i = 0; i < ESTIMATES; i++)
				timeleft += tleEstimates[i];

			timeleft /= ESTIMATES;

			UI_PrintTime(dlTimeBuf, sizeof dlTimeBuf, timeleft);
		}
		else
		{
			dlTimeBuf[0] = '\0';
		}

		if (xferRate)
		{
			s = va("%s\n %s\n%s\n\n%s\n %s\n\n%s\n %s/sec\n\n%s copied", dlText, ds, totalSizeBuf,
			       etaText, dlTimeBuf,
			       xferText, xferRateBuf,
			       dlSizeBuf);
		}
		else
		{
			if (downloadSize)
			{
				s = va("%s\n %s\n%s\n\n%s\n estimating...\n\n%s\n\n%s copied", dlText, ds, totalSizeBuf,
				       etaText,
				       xferText,
				       dlSizeBuf);
			}
			else
			{
				s = va("%s\n %s\n\n%s\n estimating...\n\n%s\n\n%s copied", dlText, ds,
				       etaText,
				       xferText,
				       dlSizeBuf);
			}
		}

		return s;
	}

	return "";
}
Пример #2
0
static void UI_DisplayDownloadInfo( const char *downloadName ) {
	static char dlText[]	= "Downloading:";
	static char etaText[]	= "Estimated time left:";
	static char xferText[]	= "Transfer rate:";

	int downloadSize, downloadCount, downloadTime;
	char dlSizeBuf[64], totalSizeBuf[64], xferRateBuf[64], dlTimeBuf[64];
	int xferRate;
	int width, leftWidth;
	int style = UI_LEFT|UI_SMALLFONT|UI_DROPSHADOW;
	const char *s;

	downloadSize = trap_Cvar_VariableValue( "cl_downloadSize" );
	downloadCount = trap_Cvar_VariableValue( "cl_downloadCount" );
	downloadTime = trap_Cvar_VariableValue( "cl_downloadTime" );

#if 0 // bk010104
	fprintf( stderr, "\n\n-----------------------------------------------\n");
	fprintf( stderr, "DB: downloadSize:  %16d\n", downloadSize );
	fprintf( stderr, "DB: downloadCount: %16d\n", downloadCount );
	fprintf( stderr, "DB: downloadTime:  %16d\n", downloadTime );  
  	fprintf( stderr, "DB: UI realtime:   %16d\n", uis.realtime );	// bk
	fprintf( stderr, "DB: UI frametime:  %16d\n", uis.frametime );	// bk
#endif

	leftWidth = width = UI_ProportionalStringWidth( dlText ) * UI_ProportionalSizeScale( style );
	width = UI_ProportionalStringWidth( etaText ) * UI_ProportionalSizeScale( style );
	if (width > leftWidth) leftWidth = width;
	width = UI_ProportionalStringWidth( xferText ) * UI_ProportionalSizeScale( style );
	if (width > leftWidth) leftWidth = width;
	leftWidth += 16;

	UI_DrawProportionalString( 8, 128, dlText, style, UI_ProportionalSizeScale( style ), color_white );
	UI_DrawProportionalString( 8, 160, etaText, style, UI_ProportionalSizeScale( style ), color_white );
	UI_DrawProportionalString( 8, 224, xferText, style, UI_ProportionalSizeScale( style ), color_white );

	if (downloadSize > 0) {
		s = va( "%s (%d%%)", downloadName, downloadCount * 100 / downloadSize );
	} else {
		s = downloadName;
	}

	UI_DrawProportionalString( leftWidth, 128, s, style, UI_ProportionalSizeScale( style ), color_white );

	UI_ReadableSize( dlSizeBuf,		sizeof dlSizeBuf,		downloadCount );
	UI_ReadableSize( totalSizeBuf,	sizeof totalSizeBuf,	downloadSize );

	if (downloadCount < 4096 || !downloadTime) {
		UI_DrawProportionalString( leftWidth, 160, "estimating", style, UI_ProportionalSizeScale( style ), color_white );
		UI_DrawProportionalString( leftWidth, 192, 
			va("(%s of %s copied)", dlSizeBuf, totalSizeBuf), style, UI_ProportionalSizeScale( style ), color_white );
	} else {
	  // bk010108
	  //float elapsedTime = (float)(uis.realtime - downloadTime); // current - start (msecs)
	  //elapsedTime = elapsedTime * 0.001f; // in seconds
	  //if ( elapsedTime <= 0.0f ) elapsedTime == 0.0f;
	  if ( (uis.realtime - downloadTime) / 1000) {
			xferRate = downloadCount / ((uis.realtime - downloadTime) / 1000);
		  //xferRate = (int)( ((float)downloadCount) / elapsedTime);
		} else {
			xferRate = 0;
		}

	  //fprintf( stderr, "DB: elapsedTime:  %16.8f\n", elapsedTime );	// bk
	  //fprintf( stderr, "DB: xferRate:   %16d\n", xferRate );	// bk

		UI_ReadableSize( xferRateBuf, sizeof xferRateBuf, xferRate );

		// Extrapolate estimated completion time
		if (downloadSize && xferRate) {
			int n = downloadSize / xferRate; // estimated time for entire d/l in secs

			// We do it in K (/1024) because we'd overflow around 4MB
			n = (n - (((downloadCount/1024) * n) / (downloadSize/1024))) * 1000;
			
			UI_PrintTime ( dlTimeBuf, sizeof dlTimeBuf, n ); // bk010104
				//(n - (((downloadCount/1024) * n) / (downloadSize/1024))) * 1000);

			UI_DrawProportionalString( leftWidth, 160, 
				dlTimeBuf, style, UI_ProportionalSizeScale( style ), color_white );
			UI_DrawProportionalString( leftWidth, 192, 
				va("(%s of %s copied)", dlSizeBuf, totalSizeBuf), style, UI_ProportionalSizeScale( style ), color_white );
		} else {
			UI_DrawProportionalString( leftWidth, 160, 
				"estimating", style, UI_ProportionalSizeScale( style ), color_white );
			if (downloadSize) {
				UI_DrawProportionalString( leftWidth, 192, 
					va("(%s of %s copied)", dlSizeBuf, totalSizeBuf), style, UI_ProportionalSizeScale( style ), color_white );
			} else {
				UI_DrawProportionalString( leftWidth, 192, 
					va("(%s copied)", dlSizeBuf), style, UI_ProportionalSizeScale( style ), color_white );
			}
		}

		if (xferRate) {
			UI_DrawProportionalString( leftWidth, 224, 
				va("%s/Sec", xferRateBuf), style, UI_ProportionalSizeScale( style ), color_white );
		}
	}
}
Пример #3
0
static void UI_DisplayDownloadInfo(const char *downloadName)
{
	static char dlText[]	= "Downloading:";
	static char etaText[]	= "Estimated time left:";
	static char xferText[]	= "Transfer rate:";

	int downloadSize, downloadCount, downloadTime;
	char dlSizeBuf[64], totalSizeBuf[64], xferRateBuf[64], dlTimeBuf[64];
	int xferRate;
	int width, leftWidth;
	int style = FONT_SMALL | FONT_SHADOW;
	const char *s;

	downloadSize = trap_Cvar_VariableValue("cl_downloadSize");
	downloadCount = trap_Cvar_VariableValue("cl_downloadCount");
	downloadTime = trap_Cvar_VariableValue("cl_downloadTime");

	leftWidth = SCR_PropStringWidth(dlText) * PROP_SMALL_SIZE_SCALE;
	width = SCR_PropStringWidth(etaText) * PROP_SMALL_SIZE_SCALE;
	if (width > leftWidth) leftWidth = width;
	width = SCR_PropStringWidth(xferText) * PROP_SMALL_SIZE_SCALE;
	if (width > leftWidth) leftWidth = width;
	leftWidth += 16;

	SCR_DrawPropString(8, 128, dlText, style, colorWhite);
	SCR_DrawPropString(8, 160, etaText, style, colorWhite);
	SCR_DrawPropString(8, 224, xferText, style, colorWhite);

	if (downloadSize > 0) {
		s = va("%s (%d%%)", downloadName, (int)((float)downloadCount * 100.0f / downloadSize));
	} else {
		s = downloadName;
	}

	SCR_DrawPropString(leftWidth, 128, s, style, colorWhite);

	UI_ReadableSize(dlSizeBuf,		sizeof dlSizeBuf,		downloadCount);
	UI_ReadableSize(totalSizeBuf,	sizeof totalSizeBuf,	downloadSize);

	if (downloadCount < 4096 || !downloadTime) {
		SCR_DrawPropString(leftWidth, 160, "estimating", style, colorWhite);
		SCR_DrawPropString(leftWidth, 192,
			va("(%s of %s copied)", dlSizeBuf, totalSizeBuf), style, colorWhite);
	} else {
	  if ((uis.realtime - downloadTime) / 1000) {
			xferRate = downloadCount / ((uis.realtime - downloadTime) / 1000);
		  //xferRate = (int)(((float)downloadCount) / elapsedTime);
		} else {
			xferRate = 0;
		}

		UI_ReadableSize(xferRateBuf, sizeof xferRateBuf, xferRate);

		// Extrapolate estimated completion time
		if (downloadSize && xferRate) {
			int n = downloadSize / xferRate; // estimated time for entire d/l in secs

			// We do it in K (/1024) because we'd overflow around 4MB
			n = (n - (((downloadCount/1024) * n) / (downloadSize/1024))) * 1000;
		
			UI_PrintTime (dlTimeBuf, sizeof dlTimeBuf, n);
				//(n - (((downloadCount/1024) * n) / (downloadSize/1024))) * 1000);

			SCR_DrawPropString(leftWidth, 160,
				dlTimeBuf, style, colorWhite);
			SCR_DrawPropString(leftWidth, 192,
				va("(%s of %s copied)", dlSizeBuf, totalSizeBuf), style, colorWhite);
		} else {
			SCR_DrawPropString(leftWidth, 160,
				"estimating", style, colorWhite);
			if (downloadSize) {
				SCR_DrawPropString(leftWidth, 192,
					va("(%s of %s copied)", dlSizeBuf, totalSizeBuf), style, colorWhite);
			} else {
				SCR_DrawPropString(leftWidth, 192,
					va("(%s copied)", dlSizeBuf), style, colorWhite);
			}
		}

		if (xferRate) {
			SCR_DrawPropString(leftWidth, 224,
				va("%s/Sec", xferRateBuf), style, colorWhite);
		}
	}
}