2025-01-12 04:36:52 +08:00

98 lines
2.8 KiB
R

# app launching code
config <- jsonlite::fromJSON("utils/config.cfg")
reg_paths <- jsonlite::fromJSON("utils/regpaths.json")
# This function is used to apply the web browser configuration and registry
# information on app start up. If a user does not have the user browser,
# their defult browser will be used.
start_app <- function(
app_name = config$appname,
user_browser = config$user_browser,
chrome = reg_paths$chrome,
ff = reg_paths$ff,
ie = reg_paths$ie,
electron = config$nativefier) {
if (user_browser == "electron") {
electron <- gsub("/", "\\\\", electron)
} else if (user_browser == "chrome") {
if (chrome != "none") {
chrome <- gsub("\\\\", "/", file.path(chrome, "chrome.exe", fsep = "\\"))
options(browser = chrome)
launch_browser = TRUE
}
} else if (user_browser == "firefox") {
if (ff != "none") {
ff <- gsub("\\\\", "/", file.path(ff, "firefox.exe", fsep = "\\"))
options(browser = ff)
launch_browser = TRUE
}
} else if (user_browser == "ie") {
if (ie != "none") {
ie <- gsub("\\\\", "/", ie)
options(browser = ie)
launch_browser = TRUE
}
}
# If a repo has been provided, use the app in your package
if (config$app_repo[[1]] != "none") {
app_path <- file.path(system.file(package = config$appname), "app")
# flexdashboard
if (config$flex_file != "none") {
if (Sys.getenv("RSTUDIO_PANDOC") == "") {
Sys.setenv(RSTUDIO_PANDOC = gsub("\\\\", "/", reg_paths$pandoc))
}
rmarkdown::run(
file = file.path(app_path, config$flex_file),
shiny_args = list(
host = '0.0.0.0',
launch.browser = launch_browser,
port = 1984
)
)
# Shiny
} else {
shiny::runApp(app_path, launch.browser = launch_browser, port = 1984)
}
} else {
# flexdashboard
if (config$flex_file != "none") {
if (Sys.getenv("RSTUDIO_PANDOC") == "") {
Sys.setenv(RSTUDIO_PANDOC = gsub("\\\\", "/", reg_paths$pandoc))
}
rmarkdown::run(
file = paste0("./", config$flex_file),
shiny_args = list(
host = '0.0.0.0',
launch.browser = launch_browser,
port = 1984
)
)
# Shiny
} else {
if (user_browser == "electron") {
# start app
# applibpath variable is set in package_manager.R
# OPT: use `dput` to copy whole .libPaths() and .GlobalEnv contents
system(sprintf('R -e ".libPaths(c(\'%s\', .libPaths())); shiny::runApp(\'./\', port=1984)"', applibpath), wait = FALSE)
# start electron
system(sprintf('cmd /C "%s"', electron), wait = FALSE)
} else {
shiny::runApp("./", launch.browser = launch_browser, port = 1984)
}
}
}
}
start_app()