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