Radish alpha
H
HardenedBSD Package Manager
Radicle
Git (anonymous pull)
Log in to clone via SSH
Allow progressbar to be used elsewhere in pkgcli
Bryan Drewery committed 11 years ago
commit 0557e903d0eb3a835a937cadd46552e8b106f2c2
parent 0f6bca2b1d7f0bdcb4c10431713882435f070a1e
2 files changed +50 -33
modified src/event.c
@@ -72,6 +72,8 @@ static time_t begin = 0;
static const char *unit_SI[] = { " ", "k", "M", "G", "T", };
static const char *unit_IEC[] = { "  ", "Ki", "Mi", "Gi", "Ti", };

+
static void draw_progressbar(int64_t current, int64_t total);
+

static void
format_rate_IEC(char *buf, int size, off_t bytes)
{
@@ -342,8 +344,46 @@ progress_alarm_handler(int signo)
	}
}

-
static void
-
stop_progressbar(void)
+
void
+
progressbar_start(const char *pmsg)
+
{
+
	if (progress_message != NULL) {
+
		free(progress_message);
+
		progress_message = NULL;
+
	}
+
	if (quiet)
+
		return;
+
	if (pmsg != NULL)
+
		progress_message = strdup(pmsg);
+
	else {
+
		sbuf_finish(msg_buf);
+
		progress_message = strdup(sbuf_data(msg_buf));
+
	}
+
	last_progress_percent = -1;
+
	last_tick = 0;
+
	begin = last_update = time(NULL);
+
	bytes_per_second = 0;
+

+
	progress_started = true;
+
	if (!isatty(STDOUT_FILENO))
+
		printf("%s...", progress_message);
+
	else
+
		printf("%s:   0%%", progress_message);
+
}
+

+
void
+
progressbar_tick(int64_t current, int64_t total)
+
{
+
	if (quiet)
+
		return;
+
	if (isatty(STDOUT_FILENO))
+
		draw_progressbar(current, total);
+
	else if (progress_started && current >= total)
+
		progressbar_stop();
+
}
+

+
void
+
progressbar_stop(void)
{
	if (progress_started) {
		if (!isatty(STDOUT_FILENO))
@@ -459,7 +499,7 @@ draw_progressbar(int64_t current, int64_t total)
		fflush(stdout);
	}
	if (current >= total) {
-
		stop_progressbar();
+
		progressbar_stop();
	}
	else if (!progress_alarm && progress_started) {
		/* Setup auxiliary alarm */
@@ -492,7 +532,7 @@ event_callback(void *data, struct pkg_event *ev)
	 * we need to stop it immediately to avoid bad formatting
	 */
	if (progress_started && ev->type != PKG_EVENT_PROGRESS_TICK) {
-
		stop_progressbar();
+
		progressbar_stop();
		progress_started = true;
	}

@@ -744,37 +784,11 @@ event_callback(void *data, struct pkg_event *ev)
				ev->e_sandbox_call_str.userdata) );
		break;
	case PKG_EVENT_PROGRESS_START:
-
		if (progress_message != NULL) {
-
			free(progress_message);
-
			progress_message = NULL;
-
		}
-
		if (!quiet) {
-
			if (ev->e_progress_start.msg != NULL) {
-
				progress_message = strdup(ev->e_progress_start.msg);
-
			} else {
-
				sbuf_finish(msg_buf);
-
				progress_message = strdup(sbuf_data(msg_buf));
-
			}
-
			last_progress_percent = -1;
-
			last_tick = 0;
-
			begin = last_update = time(NULL);
-
			bytes_per_second = 0;
-

-
			progress_started = true;
-
			if (!isatty(STDOUT_FILENO))
-
				printf("%s...", progress_message);
-
			else
-
				printf("%s:   0%%", progress_message);
-
		}
+
		progressbar_start(ev->e_progress_start.msg);
		break;
	case PKG_EVENT_PROGRESS_TICK:
-
		if (quiet)
-
			break;
-
		if (isatty(STDOUT_FILENO))
-
			draw_progressbar(ev->e_progress_tick.current, ev->e_progress_tick.total);
-
		else if (progress_started && ev->e_progress_tick.current >=
-
		    ev->e_progress_tick.total)
-
			stop_progressbar();
+
		progressbar_tick(ev->e_progress_tick.current,
+
		    ev->e_progress_tick.total);
		break;
	case PKG_EVENT_BACKUP:
		sbuf_cat(msg_buf, "Backing up");
modified src/pkgcli.h
@@ -258,6 +258,9 @@ int print_jobs_summary(struct pkg_jobs *j, const char *msg, ...);
int hash_file(const char *, char[SHA256_DIGEST_LENGTH * 2 +1]);

int event_callback(void *data, struct pkg_event *ev);
+
void progressbar_start(const char *pmsg);
+
void progressbar_tick(int64_t current, int64_t total);
+
void progressbar_stop(void);

extern struct sbuf *messages;