static void transfer_progress(void *ud, off_t progress, off_t total) { switch (out_state) { case out_none: case out_incommand: /* Do nothing */ return; case out_transfer_start: if (isatty(STDOUT_FILENO) && total > 0) { out_state = out_transfer_pretty; putchar('\n'); pretty_progress_bar(progress, total); } else { out_state = out_transfer_plain; printf(" [."); } break; case out_transfer_pretty: if (total > 0) { pretty_progress_bar(progress, total); } break; case out_transfer_plain: putchar('.'); fflush(stdout); break; } }
static void notifier(void *ud, ne_session_status status, const ne_session_status_info *info) { int quiet = get_bool_option(opt_quiet); switch (out_state) { case out_none: if (quiet) break; switch (status) { case ne_status_lookup: printf(_("Looking up hostname... ")); break; case ne_status_connecting: printf(_("Connecting to server... ")); break; case ne_status_connected: printf(_("connected.\n")); break; default: break; } break; case out_incommand: case out_transfer_upload: case out_transfer_download: case out_transfer_done: switch (status) { case ne_status_connecting: if (!quiet) printf(_(" (reconnecting...")); /* FIXME: should reset out_state here if transfer_done */ break; case ne_status_connected: if (!quiet) printf(_("done)")); break; case ne_status_recving: case ne_status_sending: /* Start of transfer: */ if ((out_state == out_transfer_download && status == ne_status_recving) || (out_state == out_transfer_upload && status == ne_status_sending)) { if (isatty(STDOUT_FILENO) && info->sr.total > 0) { out_state = out_transfer_pretty; putchar('\n'); pretty_progress_bar(info->sr.progress, info->sr.total); } else { out_state = out_transfer_plain; printf(" [."); } } break; default: break; } break; case out_transfer_plain: switch (status) { case ne_status_connecting: printf(_("] reconnecting: ")); break; case ne_status_connected: printf(_("okay [")); break; case ne_status_sending: case ne_status_recving: putchar('.'); fflush(stdout); if (info->sr.progress == info->sr.total) { out_state = out_transfer_done; } break; default: break; } break; case out_transfer_pretty: switch (status) { case ne_status_connecting: if (!quiet) printf(_("\rTransfer timed out, reconnecting... ")); break; case ne_status_connected: if (!quiet) printf(_("okay.")); break; case ne_status_recving: case ne_status_sending: pretty_progress_bar(info->sr.progress, info->sr.total); if (info->sr.progress == info->sr.total) { out_state = out_transfer_done; } default: break; } break; } fflush(stdout); }