6 ArvadosFile <- R6::R6Class(
12 initialize = function(name, relativePath, size, api, collection)
16 private$relativePath <- relativePath
18 private$collection <- collection
19 private$http <- HttpRequest$new()
20 private$httpParser <- HttpParser$new()
23 getName = function() private$name,
25 getRelativePath = function() private$relativePath,
27 getSizeInBytes = function() private$size,
29 read = function(offset = 0, length = 0)
31 if(offset < 0 || length < 0)
32 stop("Offset and length must be positive values.")
34 range = paste0("bytes=", offset, "-")
37 range = paste0(range, offset + length - 1)
39 fileURL = paste0(private$api$getWebDavHostName(), "c=", private$collection$uuid, "/", private$relativePath);
40 headers <- list(Authorization = paste("OAuth2", private$api$getToken()),
43 serverResponse <- private$http$GET(fileURL, headers)
45 if(serverResponse$status_code != 206)
46 stop(paste("Server code:", serverResponse$status_code))
48 parsedServerResponse <- httr::content(serverResponse, "raw")
52 write = function(content, contentType = "text/html")
54 fileURL = paste0(private$api$getWebDavHostName(), "c=", private$collection$uuid, "/", private$relativePath);
55 headers <- list(Authorization = paste("OAuth2", private$api$getToken()),
56 "Content-Type" = contentType)
59 serverResponse <- private$http$PUT(fileURL, headers, body)
61 if(serverResponse$status_code != 201)
62 stop(paste("Server code:", serverResponse$status_code))
64 private$notifyCollectionThatFileSizeChanges()
66 parsedServerResponse <- httr::content(serverResponse, "text")
82 notifyCollectionThatFileSizeChanges = function()
84 collectionURL <- URLencode(paste0(private$api$getWebDavHostName(), "c=", private$collection$uuid))
85 fileURL = paste0(collectionURL, "/", private$relativePath);
86 headers = list("Authorization" = paste("OAuth2", private$api$getToken()))
88 propfindResponse <- private$http$PROPFIND(fileURL, headers)
90 fileInfo <- private$httpParser$parseWebDAVResponse(propfindResponse, collectionURL)
92 private$size <- fileInfo[[1]]$fileSize
93 private$collection$update(self, "File size changed")