File: shared_drive_rm.R

package info (click to toggle)
r-cran-googledrive 2.1.1-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 2,584 kB
  • sloc: sh: 13; makefile: 2
file content (66 lines) | stat: -rw-r--r-- 1,887 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#' Delete shared drives
#'
#' @template shared-drive-description
#'
#' @seealso Wraps the `drives.delete` endpoint:
#'   * <https://developers.google.com/drive/api/v3/reference/drives/delete>
#'
#' @template shared_drive-plural
#'
#' @return Logical vector, indicating whether the delete succeeded.
#' @export
#' @examples
#' \dontrun{
#' # Create shared drives to remove in various ways
#' shared_drive_create("testdrive-01")
#' sd02 <- shared_drive_create("testdrive-02")
#' shared_drive_create("testdrive-03")
#' sd04 <- shared_drive_create("testdrive-04")
#'
#' # remove by name
#' shared_drive_rm("testdrive-01")
#' # remove by id
#' shared_drive_rm(as_id(sd02))
#' # remove by URL (or, rather, id found in URL)
#' shared_drive_rm(as_id("https://drive.google.com/drive/u/0/folders/Q5DqUk9PVA"))
#' # remove by dribble
#' shared_drive_rm(sd04)
#' }
shared_drive_rm <- function(drive = NULL) {
  shared_drive <- as_shared_drive(drive)
  if (no_file(shared_drive)) {
    drive_bullets(c(
      "!" = "No such shared drive found to delete."
    ))
    return(invisible(logical(0)))
  }

  out <- map_lgl(as_id(shared_drive), delete_one_shared_drive)

  if (any(out)) {
    successes <- shared_drive[out, ]
    drive_bullets(c(
      "Shared drive{?s} deleted:{cli::qty(nrow(successes))}",
      bulletize(gargle_map_cli(successes))
    ))
  }
  # I'm not sure this ever comes up IRL?
  # Is it even possible that removal fails but there's no error?
  if (any(!out)) {
    failures <- shared_drive[!out, ]
    drive_bullets(c(
      "Shared drive{?s} NOT deleted:{cli::qty(nrow(failures))}",
      bulletize(gargle_map_cli(failures))
    ))
  }
  invisible(out)
}

delete_one_shared_drive <- function(id) {
  request <- request_generate(
    endpoint = "drive.drives.delete",
    params = list(driveId = id)
  )
  response <- request_make(request)
  gargle::response_process(response)
}