Browse code

Shortens the freshclam progress bar, improves readability for smaller terminals.

Micah Snyder authored on 2019/08/10 04:42:55
Showing 1 changed files
... ...
@@ -160,6 +160,19 @@ struct xfer_progress {
160 160
     CURL *curl;
161 161
 };
162 162
 
163
+static void printBytes(curl_off_t bytes)
164
+{
165
+    if (bytes / (1024 * 1024) > 1) {
166
+        double megabytes = bytes / (double)(1024 * 1024);
167
+        fprintf(stdout, "%.02fMiB", megabytes);
168
+    } else if (bytes / 1024 > 1) {
169
+        double kilobytes = bytes / (double)(1024 * 1024);
170
+        fprintf(stdout, "%.02fKiB", kilobytes);
171
+    } else {
172
+        fprintf(stdout, "%" CURL_FORMAT_CURL_OFF_T "B", bytes);
173
+    }
174
+}
175
+
163 176
 /**
164 177
  * Function from curl example code, Copyright (C) 1998 - 2018, Daniel Stenberg, see COPYING.curl for license details
165 178
  * Progress bar callback function ( CURLOPT_XFERINFOFUNCTION ).
... ...
@@ -192,30 +205,19 @@ static int xferinfo(void *prog,
192 192
 
193 193
 #ifdef TIME_IN_US
194 194
     if (fractiondownloaded <= 0.0) {
195
-        fprintf(stdout, "Elapsed: %" CURL_FORMAT_CURL_OFF_T ".%06ld sec. ",
196
-                (curtime / 1000000), (long)(curtime % 1000000));
195
+        fprintf(stdout, "Time: %.1fs ", curtime / 1000000.0);
197 196
     } else {
198
-        fprintf(stdout, "Elapsed: %" CURL_FORMAT_CURL_OFF_T ".%06ld sec, Remaining; %f sec. ",
199
-                (curtime / 1000000), (long)(curtime % 1000000),
200
-                (remtime / 1000000), (long)(remtime % 1000000));
197
+        fprintf(stdout, "Time: %.1fs, ETA; %.1fs ", curtime / 1000000.0, remtime / 1000000.0);
201 198
     }
202 199
 #else
203 200
     if (fractiondownloaded <= 0.0) {
204
-        fprintf(stdout, "Elapsed: %f sec. ", curtime);
201
+        fprintf(stdout, "Time: %.1fs ", curtime);
205 202
     } else {
206
-        fprintf(stdout, "Elapsed: %f sec, Remaining: %f sec. ", curtime, remtime);
203
+        fprintf(stdout, "Time: %.1fs, ETA: %.1fs ", curtime, remtime);
207 204
     }
208 205
 #endif
209 206
 
210
-    if (TotalToUpload > 0.0) {
211
-        fprintf(stdout, "Uploaded: %" CURL_FORMAT_CURL_OFF_T " of %" CURL_FORMAT_CURL_OFF_T,
212
-                NowUploaded, TotalToUpload);
213
-    } else if (TotalToDownload > 0.0) {
214
-        fprintf(stdout, "Downloaded: %" CURL_FORMAT_CURL_OFF_T " of %" CURL_FORMAT_CURL_OFF_T,
215
-                NowDownloaded, TotalToDownload);
216
-    }
217
-
218
-    fprintf(stdout, " [");
207
+    fprintf(stdout, "[");
219 208
     if (numDots > 0) {
220 209
         if (numDots > 1) {
221 210
             for (i = 0; i < numDots - 1; i++) {
... ...
@@ -228,10 +230,23 @@ static int xferinfo(void *prog,
228 228
     for (; i < totalNumDots; i++) {
229 229
         printf(" ");
230 230
     }
231
+
232
+    fprintf(stdout, "] ");
233
+
234
+    if (TotalToUpload > 0.0) {
235
+        printBytes(NowUploaded);
236
+        fprintf(stdout, "/");
237
+        printBytes(TotalToUpload);
238
+    } else if (TotalToDownload > 0.0) {
239
+        printBytes(NowDownloaded);
240
+        fprintf(stdout, "/");
241
+        printBytes(TotalToDownload);
242
+    }
243
+
231 244
     if (NowDownloaded < TotalToDownload) {
232
-        fprintf(stdout, "]  \r");
245
+        fprintf(stdout, "  \r");
233 246
     } else {
234
-        fprintf(stdout, "]  \n");
247
+        fprintf(stdout, "  \n");
235 248
         xferProg->bComplete = 1;
236 249
     }
237 250
     fflush(stdout);