]> sjero.net Git - wget/commitdiff
[svn] Indicate where the download has started in progress bar.
authorhniksic <devnull@localhost>
Mon, 22 Sep 2003 17:14:19 +0000 (10:14 -0700)
committerhniksic <devnull@localhost>
Mon, 22 Sep 2003 17:14:19 +0000 (10:14 -0700)
src/ChangeLog
src/progress.c

index c6f4b8714ec3333ae66838bb28d7a1f1c2e476a3..c06aa03538fb7fa41c34df6b8b5f50566134f760 100644 (file)
@@ -1,5 +1,9 @@
 2003-09-22  Hrvoje Niksic  <hniksic@xemacs.org>
 
+       * progress.c (create_image): Print the initial part of the
+       download with '-' characters, analogous to how dot progress prints
+       the initial part with ','.
+
        * hash.c (ptrhash): New function.
        (ptrcmp): Ditto.
        (hash_table_new): Default to identity hash table.
index ab99caf1113c884348d6f928b3c323833b4e7862..c79be386e69bf4d45023990c17c1692b817742e7 100644 (file)
@@ -414,13 +414,13 @@ dot_set_params (const char *params)
 static int screen_width = DEFAULT_SCREEN_WIDTH;
 
 /* Size of the download speed history ring. */
-#define DLSPEED_HISTORY_SIZE 30
+#define DLSPEED_HISTORY_SIZE 20
 
 /* The minimum time length of a history sample.  By default, each
-   sample is at least 100ms long, which means that, over the course of
-   30 samples, "current" download speed spans at least 3s into the
+   sample is at least 150ms long, which means that, over the course of
+   20 samples, "current" download speed spans at least 3s into the
    past.  */
-#define DLSPEED_SAMPLE_MIN 100
+#define DLSPEED_SAMPLE_MIN 150
 
 struct bar_progress {
   long initial_length;         /* how many bytes have been downloaded
@@ -561,19 +561,19 @@ bar_finish (void *progress, double dltime)
    speed, over the course of no less than 3s.  (Shorter intervals
    produce very erratic results.)
 
-   To do so, it samples the speed in 0.1s intervals and stores the
+   To do so, it samples the speed in 150ms intervals and stores the
    recorded samples in a FIFO history ring.  The ring stores no more
-   than 30 intervals, hence the history covers the period of at least
-   three seconds and at most 30 reads into the past.  This method
-   should produce good results for both very fast and very slow
-   downloads.
+   than 20 intervals, hence the history covers the period of at least
+   three seconds and at most 20 reads into the past.  This method
+   should produce reasonable results for downloads ranging from very
+   slow to very fast.
 
    The idea is that for fast downloads, we get the speed over exactly
    the last three seconds.  For slow downloads (where a network read
-   takes more than 0.1s to complete), we get the speed over a larger
+   takes more than 150ms to complete), we get the speed over a larger
    time period, as large as it takes to complete thirty reads.  This
    is good because slow downloads tend to fluctuate more and a
-   3-second average would be very erratic.  */
+   3-second average would be too erratic.  */
 
 static void
 update_speed_ring (struct bar_progress *bp, long howmuch, double dltime)
@@ -688,29 +688,38 @@ create_image (struct bar_progress *bp, double dl_total_time)
   else
     APPEND_LITERAL ("    ");
 
-  /* The progress bar: "[====>      ]" */
+  /* The progress bar: "[====>      ]" or "[--==>      ]". */
   if (progress_size && bp->total_length > 0)
     {
-      double fraction = (double)size / bp->total_length;
-      int dlsz = (int)(fraction * progress_size);
+      /* Size of the initial portion. */
+      int insz = (double)bp->initial_length / bp->total_length * progress_size;
+
+      /* Size of the downloaded portion. */
+      int dlsz = (double)size / bp->total_length * progress_size;
+
       char *begin;
+      int i;
 
       assert (dlsz <= progress_size);
+      assert (insz <= dlsz);
 
       *p++ = '[';
       begin = p;
 
+      /* Print the initial portion of the download with '-' chars, the
+        rest with '=' and one '>'.  */
+      for (i = 0; i < insz; i++)
+       *p++ = '-';
+      dlsz -= insz;
       if (dlsz > 0)
        {
-         /* Draw dlsz-1 '=' chars and one arrow char.  */
-         while (dlsz-- > 1)
+         for (i = 0; i < dlsz - 1; i++)
            *p++ = '=';
          *p++ = '>';
        }
 
       while (p - begin < progress_size)
        *p++ = ' ';
-
       *p++ = ']';
     }
   else if (progress_size)
@@ -758,7 +767,9 @@ create_image (struct bar_progress *bp, double dl_total_time)
   else
     APPEND_LITERAL ("   --.--K/s");
 
-  /* " ETA xx:xx:xx" */
+  /* " ETA xx:xx:xx"; wait for three seconds before displaying the ETA.
+     That's because the ETA value needs a while to become
+     reliable.  */
   if (bp->total_length > 0 && dl_total_time > 3000)
     {
       long eta;