fflush(stdout);
}
+static void print_progress_notty(struct dfu_entry *e, uint64_t progress)
+{
+ struct dfu_context *ctx = e->ctx;
+ static uint64_t completed;
+ uint64_t total_progress;
+
+ total_progress = completed + progress;
+
+ fputc('#', stdout);
+
+ if (progress == e->file_size) {
+ completed += e->file_size;
+ fprintf(stdout, "...Done");
+ }
+
+ if (total_progress == ctx->total_size)
+ fprintf(stdout, "\nDownload Finished\n");
+}
+
static void *dfu_thread_main(void *ptr)
{
struct dfu_entry *e = ptr;
struct dfu_frame *frame;
int state = DFU_THREAD_STATE_IDLE;
uint64_t progress = 0;
+ void (*do_progress)(struct dfu_entry *e, uint64_t progress);
int ret;
+ if (isatty(fileno(stdout)))
+ do_progress = print_progress;
+ else
+ do_progress = print_progress_notty;
+
pthread_cleanup_push(dfu_thread_cleanup, ptr);
pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, NULL);
ctx->ioq_len--;
pthread_mutex_unlock(&ctx->mutex);
- print_progress(e, progress);
+ do_progress(e, progress);
free(frame->buf);
free(frame);
fprintf(stdout, "Start Download (Total: %.2lfMB)",
(double)size / (1024.0f * 1024.0f));
- print_bar_label("Total");
+ if (isatty(fileno(stdout)))
+ print_bar_label("Total");
}
struct dfu_entry *dfu_start(struct dfu_context *ctx,
return NULL;
}
- print_bar_label(filename);
+ if (isatty(fileno(stdout)))
+ print_bar_label(filename);
+ else
+ fprintf(stdout, "\n%s", filename);
e->ctx = ctx;
pthread_create(&ctx->thread, NULL, dfu_thread_main, e);