[haiku-commits] r42977 - haiku/trunk/src/kits/tracker

  • From: pulkomandy@xxxxxxxxxxxxxxxxx
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Sat, 29 Oct 2011 22:48:41 +0200 (CEST)

Author: pulkomandy
Date: 2011-10-29 22:48:41 +0200 (Sat, 29 Oct 2011)
New Revision: 42977
Changeset: https://dev.haiku-os.org/changeset/42977
Ticket: https://dev.haiku-os.org/ticket/6930

Modified:
   haiku/trunk/src/kits/tracker/StatusWindow.cpp
   haiku/trunk/src/kits/tracker/StatusWindow.h
Log:
Rework time computations in tracker status window to use localized functions.
Result is not as good as the previous implementation, because we need the more 
advanced BDateFormat API, which is not available yet.

Fixes #6930.


Modified: haiku/trunk/src/kits/tracker/StatusWindow.cpp
===================================================================
--- haiku/trunk/src/kits/tracker/StatusWindow.cpp       2011-10-29 19:56:05 UTC 
(rev 42976)
+++ haiku/trunk/src/kits/tracker/StatusWindow.cpp       2011-10-29 20:48:41 UTC 
(rev 42977)
@@ -42,6 +42,7 @@
 #include <Catalog.h>
 #include <ControlLook.h>
 #include <Debug.h>
+#include <DurationFormat.h>
 #include <Locale.h>
 #include <MessageFilter.h>
 #include <StringView.h>
@@ -775,24 +776,17 @@
        time_t now = (time_t)real_time_clock();
        time_t finishTime = (time_t)(now + secondsRemaining);
 
-       tm _time;
-       tm* time = localtime_r(&finishTime, &_time);
-       int32 year = time->tm_year + 1900;
-
        char timeText[32];
-       // TODO: Localization of time string...
-       if (now < finishTime - kSecondsPerDay) {
-               // process is going to take more than a day!
-               snprintf(timeText, sizeof(timeText), "%0*d:%0*d %0*d/%0*d/%ld",
-                       2, time->tm_hour, 2, time->tm_min,
-                       2, time->tm_mon + 1, 2, time->tm_mday, year);
+       const BLocale* locale = BLocale::Default();
+       if (finishTime - now > kSecondsPerDay) {
+               locale->FormatDateTime(timeText, sizeof(timeText), finishTime,
+                       B_MEDIUM_DATE_FORMAT, B_MEDIUM_TIME_FORMAT);
        } else {
-               snprintf(timeText, sizeof(timeText), "%0*d:%0*d",
-                       2, time->tm_hour, 2, time->tm_min);
+               locale->FormatTime(timeText, sizeof(timeText), finishTime,
+                       B_MEDIUM_TIME_FORMAT);
        }
 
-       finishTime -= now;
-       BString string(_FullTimeRemainingString(finishTime, timeText));
+       BString string(_FullTimeRemainingString(now, finishTime, timeText));
        *_width = StringWidth(string.String());
        if (*_width > availableSpace) {
                string.SetTo(_ShortTimeRemainingString(timeText));
@@ -817,28 +811,18 @@
 
 
 BString
-BStatusView::_FullTimeRemainingString(time_t finishTime, const char* timeText)
+BStatusView::_FullTimeRemainingString(time_t now, time_t finishTime,
+       const char* timeText)
 {
+       BDurationFormat formatter;
        BString buffer;
-       char finishStr[32];
-       if (finishTime > kSecondsPerDay) {
-               buffer.SetTo(B_TRANSLATE("(Finish: %time - Over %finishtime "
-                       "days left)"));
-               snprintf(finishStr, sizeof(finishStr), "%ld",
-                       finishTime / kSecondsPerDay);
-       } else if (finishTime > 60 * 60) {
-               buffer.SetTo(B_TRANSLATE("(Finish: %time - Over %finishtime "
-                       "hours left)"));
-               snprintf(finishStr, sizeof(finishStr), "%ld",
-                       finishTime / (60 * 60));
-       } else if (finishTime > 60) {
-               buffer.SetTo(B_TRANSLATE("(Finish: %time - %finishtime minutes "
-                       "left)"));
-               snprintf(finishStr, sizeof(finishStr), "%ld", finishTime / 60);
+       BString finishStr;
+       if (finishTime - now > 60 * 60) {
+               buffer.SetTo(B_TRANSLATE("(Finish: %time - Over %finishtime 
left)"));
+               formatter.Format(now * 1000000LL, finishTime * 1000000LL, 
&finishStr);
        } else {
-               buffer.SetTo(B_TRANSLATE("(Finish: %time - %finishtime seconds "
-                       "left)"));
-               snprintf(finishStr, sizeof(finishStr), "%ld", finishTime);
+               buffer.SetTo(B_TRANSLATE("(Finish: %time - %finishtime left)"));
+               formatter.Format(now * 1000000LL, finishTime * 1000000LL, 
&finishStr);
        }
 
        buffer.ReplaceFirst("%time", timeText);

Modified: haiku/trunk/src/kits/tracker/StatusWindow.h
===================================================================
--- haiku/trunk/src/kits/tracker/StatusWindow.h 2011-10-29 19:56:05 UTC (rev 
42976)
+++ haiku/trunk/src/kits/tracker/StatusWindow.h 2011-10-29 20:48:41 UTC (rev 
42977)
@@ -141,8 +141,8 @@
                        BString                         _TimeStatusString(float 
availableSpace,
                                                                        float* 
_width);
                        BString                         
_ShortTimeRemainingString(const char* timeText);
-                       BString                         
_FullTimeRemainingString(time_t finishTime,
-                                                                       const 
char* timeText);
+                       BString                         
_FullTimeRemainingString(time_t now,
+                                                                       time_t 
finishTime, const char* timeText);
 
                        BStatusBar*                     fStatusBar;
                        off_t                           fTotalSize;


Other related posts:

  • » [haiku-commits] r42977 - haiku/trunk/src/kits/tracker - pulkomandy