mirror of
https://github.com/thegatesbrowser/thegates.git
synced 2025-08-22 23:17:26 -04:00
80 lines
2.1 KiB
GDScript
80 lines
2.1 KiB
GDScript
extends Resource
|
|
class_name SandboxEnv
|
|
|
|
@export var zip: String
|
|
@export var the_gates_folder: String
|
|
@export var the_gates_folder_abs: String
|
|
@export var snbx_exe_name: String
|
|
@export var start_sh: String
|
|
@export var subprocesses_sh: String
|
|
|
|
const ENV_FOLDER := "/tmp/sandbox_env"
|
|
|
|
var zip_path: String :
|
|
get = get_zip_path
|
|
|
|
var start: String :
|
|
get = get_start_sh
|
|
|
|
var subprocesses: String :
|
|
get = get_subprocesses_sh
|
|
|
|
|
|
var main_pack: String
|
|
|
|
|
|
func get_zip_path() -> String:
|
|
var executable_dir = OS.get_executable_path().get_base_dir() + "/"
|
|
return executable_dir + zip
|
|
|
|
|
|
func get_start_sh() -> String:
|
|
return ProjectSettings.globalize_path(ENV_FOLDER + "/" + start_sh)
|
|
|
|
|
|
func get_subprocesses_sh() -> String:
|
|
return ProjectSettings.globalize_path(ENV_FOLDER + "/" + subprocesses_sh)
|
|
|
|
|
|
func zip_exists() -> bool:
|
|
return FileAccess.file_exists(zip_path)
|
|
|
|
|
|
func create_env(snbx_executable: String, gate: Gate) -> void:
|
|
Debug.logclr("create_env %s" % [ENV_FOLDER], Color.DIM_GRAY)
|
|
UnZip.unzip(zip_path, ENV_FOLDER, true)
|
|
|
|
var folder = ENV_FOLDER + "/" + the_gates_folder
|
|
var executable = folder + "/" + snbx_exe_name
|
|
DirAccess.copy_absolute(snbx_executable, executable)
|
|
|
|
main_pack = executable.get_basename() + "." + gate.resource_pack.get_extension()
|
|
DirAccess.copy_absolute(gate.resource_pack, main_pack)
|
|
main_pack = the_gates_folder_abs + "/" + main_pack.get_file()
|
|
|
|
if not gate.shared_libs_dir.is_empty() and DirAccess.dir_exists_absolute(gate.shared_libs_dir):
|
|
for file in DirAccess.get_files_at(gate.shared_libs_dir):
|
|
var lib = gate.shared_libs_dir + "/" + file
|
|
var lib_in_folder = folder + "/" + file
|
|
DirAccess.copy_absolute(lib, lib_in_folder)
|
|
Debug.logclr(lib_in_folder, Color.DIM_GRAY)
|
|
|
|
|
|
func get_subprocesses(ppid: int) -> Array[int]:
|
|
var pids: Array[int] = []
|
|
var output = []
|
|
|
|
OS.execute(subprocesses, [str(ppid)], output)
|
|
if output.is_empty(): return pids
|
|
|
|
var s_pids = output[0].split('\n')
|
|
for s_pid in s_pids:
|
|
if s_pid.is_empty(): continue
|
|
var pid = s_pid.to_int()
|
|
pids.append(pid)
|
|
|
|
return pids
|
|
|
|
|
|
func clean() -> void:
|
|
OS.execute("rm", ["-rf", ProjectSettings.globalize_path(ENV_FOLDER)])
|