#' @title dropbox.data
#'
#' @description This file is used to load dropbox package data into the the global environment. It also identifies and returns all dropbox paths for the current package
#' @param pkgname The package name
#' @param Sys_dropbox_dir The location of the root dropbox folder Default: ~/Dropbox
#' @keywords corelogic import
#' @export
#' @import rdrop2
#' stringr
#' data.table
data.env <- function(pkgname, pkgurl) {
if (length(Sys_dropbox_dir)==0){
l.dirs <- list()
l.dirs[[1]] <- ('/')
while(i < 10 & length(Sys_dropbox_dir)==0){
l.dirs[[i]] <- unlist(lapply(l.dirs[[i-1]], function(x) list.dirs(path = x, full.names = TRUE, recursive = FALSE)))
Sys_dropbox_dir <- l.dirs[[i]][which(grepl('\\/Dropbox$', l.dirs[[i]]))]
}
if(length(Sys_dropbox_dir)==0){
stop('Dropbox directory not found. Please install dropbox on computer.')
}
}
# Find dropbox directory
rdrop2::drop_auth()
cat('Mapping data to package', pkgname, 'dropbox location', '\n')
drop_user <- rdrop2::drop_acc()[[2]]
cat(paste('\nUser', drop_user, 'authenticated in dropbox'), sep='\n')
if (length(drop_user)==0){
cat('You must have Dropbox installed on local computer to use', pkgname)
stop()
}
if (dir.exists(Sys_dropbox_dir)){
#cat('Dropbox system directory found at', Sys_dropbox_dir,'\n')
} else {
cat(Sys_dropbox_dir, 'Missing, easy searching easy for Dropbox directory in home directory.')
dirs <- list.dirs(path = "~/", full.names = TRUE, recursive = FALSE)
drop.raw <- grep('\\/Dropbox(?=$)', dirs, value=TRUE, perl=TRUE, ignore.case = FALSE)
if (length(drop.raw)>0){
Sys_dropbox_dir <- gsub('(/){2,}', '/', drop.raw, perl=TRUE)
cat('Setting dropbox system directory to', Sys_dropbox_dir, '\n')
} else {
'Searching deep for Dropbox directory '
dirs <- list.dirs(path = "~/", full.names = TRUE, recursive = TRUE)
drop.raw <- grep('\\/Dropbox(?=$)', dirs, value=TRUE, perl=TRUE, ignore.case = FALSE)
if (length(drop.raw)>0){
Sys_dropbox_dir <- gsub('(/){2,}', '/', drop.raw, perl=TRUE)
cat('Setting dropbox system directory to', Sys_dropbox_dir,'\n')
}
}
}
R_dropbox_dir <- paste0('/pkg.data/', pkgname)
R_dropbox_file <- paste0(R_dropbox_dir, '/', pkgname, '.rdata')
Sys_package_dir <- paste0(Sys_dropbox_dir, 'pkg.data/', pkgname)
Sys_package_file <- paste0(Sys_package_dir, '/', pkgname, '.rdata')
Sys_pkgdata_dir <- paste0(Sys_dropbox_dir,'pkg.data/')
if (!dir.exists(Sys_pkgdata_dir)){
cat(paste('Creating pkg.data repository', Sys_pkgdata_dir), sep='\n')
dir.create(paste0(Sys_pkgdata_dir,'/'))
}
if (!dir.exists(Sys_package_dir)){
cat(paste('Linking package repository', Sys_package_dir), sep='\n')
dir.create(Sys_package_dir)
}
# View which files are uploaded
cat(paste('Directory', Sys_package_dir, 'details:'), sep='\n')
drop.files.dirs <- list.dirs(path = Sys_package_dir, full.names = TRUE, recursive = TRUE)
drop.files.dirs <- sapply(drop.files.dirs, function(x) str_extract(x, regex('/pkg.data/.+.', perl=TRUE)))
# Convert all dirs to lower case and replace spaces with_(weird issue)
drop.files$all <- rbindlist(lapply(drop.files.dirs, function(x) data.table(as.data.table(rdrop2::drop_dir(x)), orig.dir=x)))
if (nrow(drop.files$all)>0){
drop.files$all$f.name <- str_extract(drop.files$all$path, regex('[^/]+$', perl=TRUE))
# Double check validity because of capitalization bug in rdrop2
#drop.files$all$new.dir <- str_replace_all(drop.files$all$path, paste0('/',drop.files$all$f.name), '')
#drop.files$all$bad.dir <- drop.files$all$new.dir != drop.files$all$orig.dir
# If there is an issue,
drop.files$all$sys_path_file <- paste0(Sys_dropbox_dir, gsub('/pkg.data', 'pkg.data', drop.files$all$path))
drop.files$base <- drop.files$all[which(drop.files$all$path %in% R_dropbox_file),]
drop.files$raw <- drop.files$all[which(!drop.files$all$path %in% R_dropbox_file),]
drop.files$sys_path <- Sys_dropbox_dir
# Check for the base data such as (corelogic.rdata)
if (nrow(drop.files$all)==0){
cat('---------------------------------------------------------',
paste0('Error in load ', pkgname,'.rdata : No raw or final data available.'),
paste('----------------------------------------------------------'),
paste('Too fix this issue try the following:'),
paste('1) Make sure the dropbox directory ', R_dropbox_dir, 'is synced on the local computer'),
paste('2) If you do not have adequate sharing permissions through dropbox, contact erikbjohn@gmail.com for dropbox sharing.'),
paste(' Subject line should read: ', R_dropbox_dir, 'package data sharing for user email:', rdrop2::drop_acc()[[15]]), sep='\n')
}
if (nrow(drop.files$base)>0){
cat('\n', paste(R_dropbox_file, 'exists.'),
paste0('Loading ', R_dropbox_file, 'to Global envirornment'),
paste('Last modified:', drop.files$base$modified),
paste0('To create new ', pkgname, '.rdata, call the function: ', pkgname,'::', pkgname, '(new=TRUE)'),
sep='\n')
load(Sys_package_file, envir = .GlobalEnv)
} else {
cat(paste0(R_dropbox_file, ' does not exist, please run ', pkgname, '() to create'), sep='\n')
}
} else {
cat(Sys_package_dir, 'is empty.')
}
return(drop.files)
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.