зеркало из https://github.com/Azure/AzureStor.git
45 строки
1.2 KiB
R
45 строки
1.2 KiB
R
# custom progress bar with externally computed start and end values
|
|
# necessary to handle chunked transfers properly
|
|
storage_progress_bar <- R6::R6Class("storage_progress_bar",
|
|
|
|
public=list(
|
|
|
|
display=NULL,
|
|
bar=NULL,
|
|
direction=NULL,
|
|
offset=NULL,
|
|
|
|
initialize=function(size, direction)
|
|
{
|
|
self$display <- isTRUE(getOption("azure_storage_progress_bar")) && interactive()
|
|
if(self$display && size > 0)
|
|
{
|
|
self$direction <- direction
|
|
self$offset <- 0
|
|
self$bar <- utils::txtProgressBar(min=0, max=size, style=3)
|
|
}
|
|
},
|
|
|
|
update=function()
|
|
{
|
|
if(!self$display || is.null(self$bar)) return(NULL)
|
|
|
|
func <- function(down, up)
|
|
{
|
|
now <- self$offset + if(self$direction == "down") down[[2]] else up[[2]]
|
|
utils::setTxtProgressBar(self$bar, now)
|
|
TRUE
|
|
}
|
|
|
|
# hack b/c request function is not exported by httr
|
|
req <- list(method=NULL, url=NULL, headers=NULL, fields=NULL,
|
|
options=list(noprogress=FALSE, progressfunction=func))
|
|
structure(req, class="request")
|
|
},
|
|
|
|
close=function()
|
|
{
|
|
if(self$display && !is.null(self$bar)) close(self$bar)
|
|
}
|
|
))
|