diff --git a/src/kits/tracker/StatusWindow.cpp b/src/kits/tracker/StatusWindow.cpp index 3fdf4f5157..420549981a 100644 --- a/src/kits/tracker/StatusWindow.cpp +++ b/src/kits/tracker/StatusWindow.cpp @@ -794,26 +794,31 @@ BStatusView::_TimeStatusString(float availableSpace, float* _width) double secondsRemaining = (fTotalSize - fSizeProcessed) / totalBytesPerSecond; time_t now = (time_t)real_time_clock(); - time_t finishTime = (time_t)(now + secondsRemaining); - char timeText[32]; - if (finishTime - now > kSecondsPerDay) { - BDateTimeFormat().Format(timeText, sizeof(timeText), finishTime, - B_MEDIUM_DATE_FORMAT, B_MEDIUM_TIME_FORMAT); + BString string; + if (secondsRemaining < 0 || (sizeof(time_t) == 4 + && now + secondsRemaining > INT32_MAX)) { + string = B_TRANSLATE("Finish: after several years"); } else { - BTimeFormat().Format(timeText, sizeof(timeText), finishTime, - B_MEDIUM_TIME_FORMAT); - } + char timeText[32]; + time_t finishTime = (time_t)(now + secondsRemaining); - BString string(_FullTimeRemainingString(now, finishTime, timeText)); - float width = StringWidth(string.String()); - if (width > availableSpace) { - string.SetTo(_ShortTimeRemainingString(timeText)); - width = StringWidth(string.String()); + if (finishTime - now > kSecondsPerDay) { + BDateTimeFormat().Format(timeText, sizeof(timeText), finishTime, + B_MEDIUM_DATE_FORMAT, B_MEDIUM_TIME_FORMAT); + } else { + BTimeFormat().Format(timeText, sizeof(timeText), finishTime, + B_MEDIUM_TIME_FORMAT); + } + string = _FullTimeRemainingString(now, finishTime, timeText); + float width = StringWidth(string.String()); + if (width > availableSpace) { + string.SetTo(_ShortTimeRemainingString(timeText)); + } } if (_width != NULL) - *_width = width; + *_width = StringWidth(string.String()); return string; }