91 lines
2.6 KiB
R
91 lines
2.6 KiB
R
# capture the current working directory
|
|
# set the package search path to the app specific library
|
|
appwd <- getwd()
|
|
applibpath <- file.path(appwd, "library")
|
|
|
|
message("library path:\n", paste("...", applibpath, "\n"))
|
|
message("working path:\n", paste("...", appwd, "\n"))
|
|
message("interactive R session:\n", paste("...", interactive(), "\n"))
|
|
|
|
# Load functions to ensure software dependencies and check the internet
|
|
source("utils/ensure.R")
|
|
|
|
# Create app/library if it doesn't exist (e.g. first run)
|
|
# Initialize RInno
|
|
if (!dir.exists(applibpath)) {
|
|
pb <- winProgressBar(
|
|
title = "Starting RInno ...",
|
|
label = "Initializing ...")
|
|
|
|
dir.create(applibpath)
|
|
init_pkgs <- c("jsonlite")
|
|
|
|
for (i in seq_along(init_pkgs)) {
|
|
setWinProgressBar(pb, value = i / (length(init_pkgs) + 1),
|
|
label = sprintf("Loading package - %s", init_pkgs[i]))
|
|
pkg <- list.files(appwd, paste0(init_pkgs[i], ".*zip$"), full.names = TRUE, recursive = TRUE)
|
|
install.packages(pkgs = pkg, lib = applibpath, repos = NULL, type = "win.binary")
|
|
}
|
|
close(pb)
|
|
}
|
|
|
|
# Add app/library to R's library search path
|
|
.libPaths(c(applibpath, .libPaths()))
|
|
|
|
# Read the application config
|
|
library("jsonlite", character.only = TRUE)
|
|
config <- jsonlite::fromJSON(file.path(appwd, "utils/config.cfg"))
|
|
|
|
# Package dependency list
|
|
pkgs_loc <- config$pkgs$pkgs_loc; pkgs_names <- config$pkgs$pkgs_names
|
|
|
|
# Provide some initial status updates
|
|
pb <- winProgressBar(
|
|
title = sprintf("Starting %s ...", config$appname),
|
|
label = "Initializing ...")
|
|
|
|
# Use tryCatch to display error messages in config$logging$filename
|
|
appexit_msg <- tryCatch({
|
|
|
|
# ensure all package dependencies are installed
|
|
message("ensuring packages: ", paste(pkgs_names, collapse = ", "))
|
|
setWinProgressBar(pb, 0, label = "Ensuring package dependencies ...")
|
|
|
|
ensure(pkgs_loc)
|
|
|
|
for (i in seq_along(pkgs_names)) {
|
|
setWinProgressBar(pb,
|
|
value = i / (length(pkgs_names) + 1),
|
|
label = sprintf("Loading package - %s", pkgs_names[i]))
|
|
|
|
library(pkgs_names[i], character.only = TRUE)
|
|
}
|
|
|
|
# If an app repository has been provided, install the app from there
|
|
if (config$app_repo[[1]] != "none") {
|
|
source("utils/get_app_from_app_url.R")
|
|
}
|
|
|
|
setWinProgressBar(pb, 1.00, label = "Starting application")
|
|
close(pb)
|
|
|
|
# Start the app
|
|
source(file.path(appwd, "utils/launch_app.R"))
|
|
|
|
"application terminated normally"
|
|
},
|
|
error = function(e) {
|
|
msg <- sprintf("Startup failed with error(s):\n\n%s", e$message)
|
|
tcltk::tk_messageBox(
|
|
type = "ok",
|
|
message = msg,
|
|
icon = "error")
|
|
|
|
msg
|
|
},
|
|
finally = {
|
|
close(pb)
|
|
})
|
|
|
|
message(appexit_msg)
|