Add map caching to regional demo
Change-Id: I450130d35ba1c55a1b1b4327d805d5d3cb9bf4e9
diff --git a/demo/regional.R b/demo/regional.R
index dae7ff5..b079265 100755
--- a/demo/regional.R
+++ b/demo/regional.R
@@ -6,7 +6,29 @@
devAskNewPage(ask = FALSE)
-mapfile <- file.path(tempdir(), "map-gadm41-sf-v1.rds")
+# --- CRAN-compliant caching -----------------------------------------------
+# Default to tempdir() during demos/tests. Allow users to opt-in to a
+# persistent cache in a per-user directory via either
+# options(RKorAPClient.regional.cache = "user")
+# or environment variable
+# RKORAPCLIENT_CACHE=user
+# Any value among {"user","persistent","cache","true","1","yes"}
+# enables persistent caching. Everything else uses tempdir().
+get_cache_dir <- function() {
+ mode <- tolower(getOption(
+ "RKorAPClient.regional.cache",
+ Sys.getenv("RKORAPCLIENT_CACHE", "temp")
+ ))
+ if (mode %in% c("user", "persistent", "cache", "true", "1", "yes")) {
+ d <- tools::R_user_dir("RKorAPClient", which = "cache")
+ } else {
+ d <- tempdir()
+ }
+ dir.create(d, recursive = TRUE, showWarnings = FALSE)
+ d
+}
+
+mapfile <- file.path(get_cache_dir(), "map-gadm41-sf-v1.rds")
# Caching data in the user's home filespace by default
# is not allowed to package demos by CRAN policies ...
@@ -35,6 +57,7 @@
fetchMaps <- function(maps, picks) {
if (file.exists(mapfile)) {
df <- readRDS(mapfile)
+ cat("Using cached map from:", mapfile, "\n")
} else {
cat("Downloading and caching GADM 4.1 map data.\nPlease note that the GADM map data is licensed for academic use and other non-commercial use, only.\nSee https://gadm.org/license.html\n")
# Fetch individual sf layers and row-bind
@@ -42,8 +65,8 @@
df <- do.call(rbind, sflist)
# Create a stable group index compatible with original regions index logic
df$grp <- seq_len(nrow(df))
- dir.create(dirname(mapfile), recursive = TRUE, showWarnings = FALSE)
saveRDS(df, mapfile)
+ cat("Saved map cache to:", mapfile, "\n")
}
# If cache is from an older version (non-sf tidy data), refresh
if (!inherits(df, "sf")) {
@@ -51,8 +74,8 @@
sflist <- mapply(fetchAndPrepareMap, maps, picks, SIMPLIFY = FALSE)
df <- do.call(rbind, sflist)
df$grp <- seq_len(nrow(df))
- dir.create(dirname(mapfile), recursive = TRUE, showWarnings = FALSE)
saveRDS(df, mapfile)
+ cat("Saved map cache to:", mapfile, "\n")
} else if (is.null(df$grp)) {
df$grp <- seq_len(nrow(df))
}