[haiku-bugs] Re: [Haiku] #6930: Tracker status window problems

  • From: "anevilyak" <trac@xxxxxxxxxxxx>
  • Date: Sun, 28 Nov 2010 17:20:33 -0000

#6930: Tracker status window problems
-----------------------------------+-----------------------------------
  Reporter:  Karvjorm              |        Owner:  axeld
      Type:  bug                   |       Status:  new
  Priority:  normal                |    Milestone:  R1
 Component:  Applications/Tracker  |      Version:  R1/Development
Resolution:                        |     Keywords:  Wrong year, 0 bytes
Blocked By:                        |  Has a Patch:  0
  Platform:  All                   |     Blocking:
-----------------------------------+-----------------------------------
Changes (by anevilyak):

 * owner:  nobody => axeld
 * version:  R1/alpha2 => R1/Development
 * component:  Add-Ons/Tracker => Applications/Tracker


Old description:

> I just moved a directory that included several subdirectories (and some
> files in the last one) to the Trash. Tracker status windows showed below
> progress bar the following information: "(1 bytes of 0 bytes, 0
> bytes/s)".
>
> Then just when moving was completed, I saw on the right (below the
> progress bar) a message text that informed when work completed. At the
> end of text was a non-localized date, something like: "12/12/1901". That
> was right, the year was 1901 !
>
> I suppose that the origin of the last problem is in this TODO (in
> /src/kits/tracker/StatisWindows.cpp):
>

> {{{
>                         double totalBytesPerSecond =
> (double)(fSizeProcessed
>                                         - fEstimatedFinishReferenceSize)
>                                 * 1000000LL / (system_time() -
> fEstimatedFinishReferenceTime);
>                         double secondsRemaining = (fTotalSize -
> fSizeProcessed)
>                                 / totalBytesPerSecond;
>                         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];
>                         time_t secondsPerDay = 24 * 60 * 60;
>                         // TODO: Localization of time string...
>                         if (now < finishTime - secondsPerDay) {
>                                 // process is going to take more than a
> day!
>                                 sprintf(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);
>                         } else {
>                                 sprintf(timeText, "%0*d:%0*d",
>                                         2, time->tm_hour, 2,
> time->tm_min);
>                         }
>
>                         BString buffer1("Finish: ");
>                         buffer1 << timeText;
>                         finishTime -= now;
>                         time = gmtime(&finishTime);
>
>                         BString buffer2;
>                         if (finishTime > secondsPerDay)
>                                 buffer2 << "Over " << finishTime /
> secondsPerDay << "days";
>                         else if (finishTime > 60 * 60)
>                                 buffer2 << "Over " << finishTime / (60 *
> 60) << " hours";
>                         else if (finishTime > 60)
>                                 buffer2 << finishTime / 60 << " minutes";
>                         else
>                                 buffer2 << finishTime << " seconds";
>
>                         buffer2 << " left";
>
>                         buffer = "(";
>                         buffer << buffer1 << " - " << buffer2 << ")";
>                         tp.x = fStatusBar->Frame().right -
> StringWidth(buffer.String());
>                         if (tp.x > rightDivider)
>                                 DrawString(buffer.String(), tp);
>                         else {
>                                 // complete string too wide, try with
> shorter version
>                                 buffer = "(";
>                                 buffer << buffer1 << ")";
>                                 tp.x = fStatusBar->Frame().right -
> StringWidth(buffer.String());
>                                 if (tp.x > rightDivider)
>                                         DrawString(buffer.String(), tp);
>                         }
>
> }}}

New description:

 I just moved a directory that included several subdirectories (and some
 files in the last one) to the Trash. Tracker status windows showed below
 progress bar the following information: "(1 bytes of 0 bytes, 0 bytes/s)".

 Then just when moving was completed, I saw on the right (below the
 progress bar) a message text that informed when work completed. At the end
 of text was a non-localized date, something like: "12/12/1901". That was
 right, the year was 1901 !

 I suppose that the origin of the last problem is in this TODO (in
 /src/kits/tracker/StatusWindow.cpp):


 {{{
                         double totalBytesPerSecond =
 (double)(fSizeProcessed
                                         - fEstimatedFinishReferenceSize)
                                 * 1000000LL / (system_time() -
 fEstimatedFinishReferenceTime);
                         double secondsRemaining = (fTotalSize -
 fSizeProcessed)
                                 / totalBytesPerSecond;
                         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];
                         time_t secondsPerDay = 24 * 60 * 60;
                         // TODO: Localization of time string...
                         if (now < finishTime - secondsPerDay) {
                                 // process is going to take more than a
 day!
                                 sprintf(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);
                         } else {
                                 sprintf(timeText, "%0*d:%0*d",
                                         2, time->tm_hour, 2,
 time->tm_min);
                         }

                         BString buffer1("Finish: ");
                         buffer1 << timeText;
                         finishTime -= now;
                         time = gmtime(&finishTime);

                         BString buffer2;
                         if (finishTime > secondsPerDay)
                                 buffer2 << "Over " << finishTime /
 secondsPerDay << "days";
                         else if (finishTime > 60 * 60)
                                 buffer2 << "Over " << finishTime / (60 *
 60) << " hours";
                         else if (finishTime > 60)
                                 buffer2 << finishTime / 60 << " minutes";
                         else
                                 buffer2 << finishTime << " seconds";

                         buffer2 << " left";

                         buffer = "(";
                         buffer << buffer1 << " - " << buffer2 << ")";
                         tp.x = fStatusBar->Frame().right -
 StringWidth(buffer.String());
                         if (tp.x > rightDivider)
                                 DrawString(buffer.String(), tp);
                         else {
                                 // complete string too wide, try with
 shorter version
                                 buffer = "(";
                                 buffer << buffer1 << ")";
                                 tp.x = fStatusBar->Frame().right -
 StringWidth(buffer.String());
                                 if (tp.x > rightDivider)
                                         DrawString(buffer.String(), tp);
                         }

 }}}

--

-- 
Ticket URL: <http://dev.haiku-os.org/ticket/6930#comment:1>
Haiku <http://dev.haiku-os.org>
Haiku - the operating system.

Other related posts: