Integrate per-save identity and interaction UI
This commit is contained in:
parent
ac82a28f3b
commit
4fda6e97f6
58 changed files with 3471 additions and 461 deletions
|
|
@ -16,6 +16,10 @@ const ENVIRONMENT_VARIABLE := "straywild_DATA_DIR"
|
|||
const CREATE_ENVIRONMENT_VARIABLE := "straywild_CREATE_DATA_DIR"
|
||||
const LEGACY_ENVIRONMENT_VARIABLE := "NETFISHING_DATA_DIR"
|
||||
const LEGACY_CREATE_ENVIRONMENT_VARIABLE := "NETFISHING_CREATE_DATA_DIR"
|
||||
const ISOLATED_VALIDATION_ENVIRONMENT := (
|
||||
"straywild_ISOLATED_VALIDATION_STORAGE"
|
||||
)
|
||||
const ISOLATED_VALIDATION_DIRECTORY := "isolated-validation-data"
|
||||
const APPLICATION_ID := "straywild"
|
||||
const LEGACY_APPLICATION_ID := "netfishing"
|
||||
const APP_DATA_PORTABLE_PATH := "user://portable-data"
|
||||
|
|
@ -57,6 +61,9 @@ enum Mode {
|
|||
COMMAND_LINE_OVERRIDE,
|
||||
}
|
||||
|
||||
static var _process_validation_root := ""
|
||||
static var _process_validation_device_id := ""
|
||||
|
||||
var mode := Mode.UNRESOLVED
|
||||
var root_path := ""
|
||||
var root_id := ""
|
||||
|
|
@ -67,6 +74,11 @@ var override_active := false
|
|||
|
||||
|
||||
func resolve() -> bool:
|
||||
# Validation scripts may be launched directly instead of through the
|
||||
# repository runner. Keep the opt-in flag fail-safe: it must never follow a
|
||||
# real user's bootstrap pointer merely because XDG isolation was omitted.
|
||||
if _isolated_validation_requested():
|
||||
return _resolve_isolated_validation_root()
|
||||
prepare_legacy_user_data()
|
||||
_load_bootstrap_identity()
|
||||
var command_line: String = _command_line_override()
|
||||
|
|
@ -116,6 +128,44 @@ func resolve() -> bool:
|
|||
return false
|
||||
|
||||
|
||||
func _resolve_isolated_validation_root() -> bool:
|
||||
# Behave like app-data storage after choosing the isolated root so migration
|
||||
# tests can still exercise live root switching within their sandbox.
|
||||
override_active = false
|
||||
mode = Mode.APP_DATA
|
||||
if _process_validation_device_id.is_empty():
|
||||
_process_validation_device_id = (
|
||||
Crypto.new().generate_random_bytes(16).hex_encode()
|
||||
)
|
||||
device_id = _process_validation_device_id
|
||||
if _process_validation_root.is_empty():
|
||||
var parent: String
|
||||
if OS.has_environment("XDG_DATA_HOME"):
|
||||
parent = ProjectSettings.globalize_path("user://")
|
||||
else:
|
||||
parent = OS.get_temp_dir().path_join(
|
||||
"straywild-validation-%d-%d"
|
||||
% [OS.get_process_id(), Time.get_ticks_usec()]
|
||||
)
|
||||
_process_validation_root = parent.path_join(
|
||||
ISOLATED_VALIDATION_DIRECTORY
|
||||
)
|
||||
if not has_data_manifest(_process_validation_root):
|
||||
var created: Dictionary = create_unbound_root(
|
||||
_process_validation_root
|
||||
)
|
||||
if not bool(created.get("ok", false)):
|
||||
return false
|
||||
return _activate_existing(_process_validation_root, "", false)
|
||||
|
||||
|
||||
static func _isolated_validation_requested() -> bool:
|
||||
return (
|
||||
DisplayServer.get_name() == "headless"
|
||||
and OS.get_environment(ISOLATED_VALIDATION_ENVIRONMENT) == "1"
|
||||
)
|
||||
|
||||
|
||||
func prepare_legacy_user_data() -> void:
|
||||
var current_root: String = _normalize(
|
||||
ProjectSettings.globalize_path("user://")
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue