Skip to content

Commit aaaf579

Browse files
BUG FIX: Work around utils::txtProgressBar(min=0, max=0) not being supported (#108)
1 parent a896610 commit aaaf579

File tree

2 files changed

+27
-12
lines changed

2 files changed

+27
-12
lines changed

R/handler_txtprogressbar.R

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -48,10 +48,15 @@ handler_txtprogressbar <- function(style = 3L, file = stderr(), intrusiveness =
4848
reporter <- local({
4949
pb <- NULL
5050

51-
make_pb <- function(...) {
51+
make_pb <- function(max, ...) {
5252
if (!is.null(pb)) return(pb)
53-
args <- c(list(...), backend_args)
54-
pb <<- do.call(txtProgressBar, args = args)
53+
## SPECIAL CASE: utils::txtProgressBar() does not support max == min
54+
if (max == 0) {
55+
pb <<- voidProgressBar()
56+
} else {
57+
args <- c(list(max = max, ...), backend_args)
58+
pb <<- do.call(txtProgressBar, args = args)
59+
}
5560
pb
5661
}
5762

@@ -115,9 +120,17 @@ handler_txtprogressbar <- function(style = 3L, file = stderr(), intrusiveness =
115120
}
116121

117122

123+
#' @importFrom utils txtProgressBar
124+
voidProgressBar <- function(...) {
125+
pb <- txtProgressBar()
126+
class(pb) <- c("voidProgressBar", class(pb))
127+
pb
128+
}
129+
118130

119131
## Erase a utils::txtProgressBar()
120132
eraseTxtProgressBar <- function(pb) {
133+
if (inherits(pb, "voidProgressBar")) return()
121134
pb_env <- environment(pb$getVal)
122135
with(pb_env, {
123136
if (style == 1L || style == 2L) {
@@ -136,6 +149,7 @@ eraseTxtProgressBar <- function(pb) {
136149

137150
## Redraw a utils::txtProgressBar()
138151
redrawTxtProgressBar <- function(pb) {
152+
if (inherits(pb, "voidProgressBar")) return()
139153
setTxtProgressBar(pb, value = pb$getVal())
140154
}
141155

tests/handler_txtprogressbar.R

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,19 +4,20 @@ options(progressr.clear = FALSE)
44

55
message("txtprogressbar ...")
66

7-
x <- 1:10
8-
97
for (style in 1:3) {
108
message(sprintf("- style = %d ...", style))
119
handlers(handler_txtprogressbar(style = style))
1210

13-
with_progress({
14-
progress <- progressor(along = x)
15-
for (ii in x) {
16-
Sys.sleep(getOption("progressr.demo.delay", 0.1))
17-
progress(message = sprintf("(%s)", paste(letters[1:ii], collapse="")))
18-
}
19-
})
11+
for (x in list(1:10, 1L, integer(0))) {
12+
message("length(x): ", length(x))
13+
with_progress({
14+
progress <- progressor(along = x)
15+
for (ii in x) {
16+
Sys.sleep(getOption("progressr.demo.delay", 0.1))
17+
progress(message = sprintf("(%s)", paste(letters[1:ii], collapse="")))
18+
}
19+
})
20+
}
2021

2122
message(sprintf("- style = %d ... done", style))
2223
}

0 commit comments

Comments
 (0)