Skip to content

Commit e471bdd

Browse files
Progression handlers' internal state now has a sticky 'message' field,
which hold the most recent, non-empty progression 'message' received [#57]
1 parent aa3fcaf commit e471bdd

File tree

2 files changed

+22
-15
lines changed

2 files changed

+22
-15
lines changed

R/progression_handler.R

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ make_progression_handler <- function(name, reporter = list(), handler = NULL, en
6464
## Progress state
6565
max_steps <- NULL
6666
step <- NULL
67+
message <- NULL
6768
auto_finish <- TRUE
6869
timestamps <- NULL
6970
milestones <- NULL
@@ -92,6 +93,7 @@ make_progression_handler <- function(name, reporter = list(), handler = NULL, en
9293

9394
state <- list(
9495
step = step,
96+
message = message,
9597
timestamps = timestamps,
9698
delta = step - prev_milestone,
9799
enabled = enabled
@@ -183,6 +185,7 @@ make_progression_handler <- function(name, reporter = list(), handler = NULL, en
183185
if (type == "reset") {
184186
max_steps <<- NULL
185187
step <<- NULL
188+
message <<- NULL
186189
auto_finish <<- TRUE
187190
timestamps <<- NULL
188191
milestones <<- NULL
@@ -244,6 +247,7 @@ make_progression_handler <- function(name, reporter = list(), handler = NULL, en
244247
timestamps <<- rep(as.POSIXct(NA), times = max_steps)
245248
timestamps[1] <<- Sys.time()
246249
step <<- 0L
250+
message <<- character(0L)
247251
if (debug) mstr(list(finished = finished, milestones = milestones))
248252
initiate_reporter(p)
249253
prev_milestone <<- step
@@ -257,6 +261,8 @@ make_progression_handler <- function(name, reporter = list(), handler = NULL, en
257261
update_reporter(p)
258262
} else if (type == "update") {
259263
step <<- min(max(step + p$amount, 0L), max_steps)
264+
msg <- conditionMessage(p)
265+
if (length(msg) > 0) message <<- msg
260266
timestamps[step] <<- Sys.time()
261267
if (debug) mstr(list(finished = finished, step = step, milestones = milestones, prev_milestone = prev_milestone, interval = interval))
262268
if (length(milestones) > 0L && step >= milestones[1]) {
@@ -316,6 +322,7 @@ print.progression_handler <- function(x, ...) {
316322
s <- c(s, sprintf(" - enabled: %s", env$enabled))
317323
s <- c(s, sprintf(" - finished: %s", env$finished))
318324
s <- c(s, sprintf(" - step: %s", env$step %||% "<NULL>"))
325+
s <- c(s, sprintf(" - message: %s", env$message %||% "<NULL>"))
319326
s <- c(s, sprintf(" - prev_milestone: %s", env$prev_milestone %||% "<NULL>"))
320327
s <- c(s, sprintf(" - delta: %g", (env$step - env$prev_milestone) %||% 0L))
321328
s <- c(s, sprintf(" - timestamps: %s", hpaste(env$timestamps %||% "<NULL>")))

R/progression_handlers.R

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -154,13 +154,13 @@ tkprogressbar_handler <- function(intrusiveness = getOption("progressr.intrusive
154154

155155
initiate = function(config, state, progression, ...) {
156156
if (!state$enabled || config$times == 1L) return()
157-
make_pb(max = config$max_steps, label = conditionMessage(progression))
157+
make_pb(max = config$max_steps, label = state$message)
158158
},
159159

160160
update = function(config, state, progression, ...) {
161161
if (!state$enabled || config$times <= 2L) return()
162-
make_pb(max = config$max_steps, label = conditionMessage(progression))
163-
setTkProgressBar(pb, value = state$step, label = conditionMessage(progression))
162+
make_pb(max = config$max_steps, label = state$message)
163+
setTkProgressBar(pb, value = state$step, label = state$message)
164164
},
165165

166166
finish = function(config, state, progression, ...) {
@@ -171,7 +171,7 @@ tkprogressbar_handler <- function(intrusiveness = getOption("progressr.intrusive
171171
close(pb)
172172
pb <<- NULL
173173
} else {
174-
setTkProgressBar(pb, value = state$step, label = conditionMessage(progression))
174+
setTkProgressBar(pb, value = state$step, label = state$message)
175175
}
176176
}
177177
)
@@ -222,13 +222,13 @@ winprogressbar_handler <- function(intrusiveness = getOption("progressr.intrusiv
222222

223223
initiate = function(config, state, progression, ...) {
224224
if (!state$enabled || config$times == 1L) return()
225-
make_pb(max = config$max_steps, label = conditionMessage(progression))
225+
make_pb(max = config$max_steps, label = state$message)
226226
},
227227

228228
update = function(config, state, progression, ...) {
229229
if (!state$enabled || config$times <= 2L) return()
230-
make_pb(max = config$max_steps, label = conditionMessage(progression))
231-
setWinProgressBar(pb, value = state$step, label = conditionMessage(progression))
230+
make_pb(max = config$max_steps, label = state$message)
231+
setWinProgressBar(pb, value = state$step, label = state$message)
232232
},
233233

234234
finish = function(config, state, progression, ...) {
@@ -239,7 +239,7 @@ winprogressbar_handler <- function(intrusiveness = getOption("progressr.intrusiv
239239
close(pb)
240240
pb <<- NULL
241241
} else {
242-
setWinProgressBar(pb, value = state$step, label = conditionMessage(progression))
242+
setWinProgressBar(pb, value = state$step, label = state$message)
243243
}
244244
}
245245
)
@@ -397,7 +397,7 @@ progress_handler <- function(format = "[:bar] :percent :message", show_after = 0
397397
if (!state$enabled || config$times == 1L) return()
398398
make_pb(format = format, total = config$max_steps,
399399
clear = config$clear, show_after = config$enable_after)
400-
tokens <- list(message = paste0(conditionMessage(progression), ""))
400+
tokens <- list(message = paste0(state$message, ""))
401401
pb$tick(0, tokens = tokens)
402402
},
403403

@@ -406,7 +406,7 @@ progress_handler <- function(format = "[:bar] :percent :message", show_after = 0
406406
if (state$delta >= 0) {
407407
make_pb(format = format, total = config$max_steps,
408408
clear = config$clear, show_after = config$enable_after)
409-
tokens <- list(message = paste0(conditionMessage(progression), ""))
409+
tokens <- list(message = paste0(state$message, ""))
410410
pb$tick(state$delta, tokens = tokens)
411411
}
412412
},
@@ -516,18 +516,18 @@ notifier_handler <- function(intrusiveness = getOption("progressr.intrusiveness.
516516

517517
initiate = function(config, state, progression, ...) {
518518
if (!state$enabled || config$times == 1L) return()
519-
notify(step = state$step, max_steps = config$max_steps, message = conditionMessage(progression))
519+
notify(step = state$step, max_steps = config$max_steps, message = state$message)
520520
},
521521

522522
update = function(config, state, progression, ...) {
523523
if (!state$enabled || config$times <= 2L) return()
524-
notify(step = state$step, max_steps = config$max_steps, message = conditionMessage(progression))
524+
notify(step = state$step, max_steps = config$max_steps, message = state$message)
525525
},
526526

527527
finish = function(config, state, progression, ...) {
528528
if (finished) return()
529529
if (!state$enabled) return()
530-
if (state$delta > 0) notify(step = state$step, max_steps = config$max_steps, message = conditionMessage(progression))
530+
if (state$delta > 0) notify(step = state$step, max_steps = config$max_steps, message = state$message)
531531
finished <<- TRUE
532532
}
533533
)
@@ -557,7 +557,7 @@ debug_handler <- function(interval = getOption("progressr.interval", 0), intrusi
557557
if (is.null(t_init)) t_init <<- t
558558
dt <- difftime(t, t_init, units = "secs")
559559
delay <- difftime(t, progression$time, units = "secs")
560-
message <- paste(c(conditionMessage(progression), ""), collapse = "")
560+
message <- paste(c(state$message, ""), collapse = "")
561561
entry <- list(now(t), dt, delay, progression$type, state$step, config$max_steps, state$delta, message, config$clear, state$enabled, paste0(progression$status, ""))
562562
msg <- do.call(sprintf, args = c(list("%s(%.3fs => +%.3fs) %s: %d/%d (%+d) '%s' {clear=%s, enabled=%s, status=%s}"), entry))
563563
message(msg)
@@ -643,7 +643,7 @@ filesize_handler <- function(file = "default.progress", intrusiveness = getOptio
643643
nhead <- nchar(head)
644644
tail <- sprintf(" [%d%%]", round(100 * ratio))
645645
ntail <- nchar(tail)
646-
mid <- paste0(conditionMessage(progression), "")
646+
mid <- paste0(state$message, "")
647647
nmid <- nchar(mid)
648648
padding <- size - (nhead + nmid + ntail)
649649
if (padding <= 0) {

0 commit comments

Comments
 (0)