diff --git a/sessionzero-client/scenes/desktop/main_ui.tscn b/sessionzero-client/scenes/desktop/main_ui.tscn index 0ba2131..546fb48 100644 --- a/sessionzero-client/scenes/desktop/main_ui.tscn +++ b/sessionzero-client/scenes/desktop/main_ui.tscn @@ -1,6 +1,4 @@ -[gd_scene load_steps=2 format=3 uid="uid://fy5iji5t58jk"] - -[ext_resource type="Script" uid="uid://b6xurr0segcug" path="res://scripts/datapacks/datapack_tests.gd" id="1_ffwby"] +[gd_scene format=3 uid="uid://fy5iji5t58jk"] [node name="MainUI" type="CanvasLayer"] @@ -11,6 +9,3 @@ anchor_bottom = 1.0 grow_horizontal = 2 grow_vertical = 2 theme_type_variation = &"Background_Panel" - -[node name="DatapackTests" type="Node" parent="."] -script = ExtResource("1_ffwby") diff --git a/sessionzero-client/scripts/datapacks/datapack_manager.gd b/sessionzero-client/scripts/datapacks/datapack_manager.gd index 48ba843..5d3f842 100644 --- a/sessionzero-client/scripts/datapacks/datapack_manager.gd +++ b/sessionzero-client/scripts/datapacks/datapack_manager.gd @@ -1,7 +1,56 @@ # datapack_manager.gd extends Node -var loaded_packs: Dictionary[String, DatapackModel] = {} +# --- CONFIGURATION --- +const DATAPACKS_DIR = "user://datapacks/" + +# --- STATE --- +var loaded_packs: Dictionary[String, DatapackModel] = {} + + +func _ready(): + var dir = DirAccess.open("user://") + if dir: + if not dir.dir_exists("datapacks"): + dir.make_dir("datapacks") + + load_all_local_packs() + + +## Scans the local DATAPACKS_DIR, loads all valid datapack subdirectories, +## and registers them with the manager. This serves as the initial load and the refresh option. +func load_all_local_packs(): + print("DatapackManager: Starting scan for local datapacks in '%s'" % DATAPACKS_DIR) + + var loader = DatapackLoader.new() + var dir = DirAccess.open(DATAPACKS_DIR) + + if dir == null: + push_error("DatapackManager: Failed to open datapacks directory: %s" % DATAPACKS_DIR) + return + + dir.list_dir_begin() + var dir_name = dir.get_next() + + while dir_name != "": + if dir_name == "." or dir_name == "..": + dir_name = dir.get_next() + continue + + if dir.current_is_dir(): + print("DatapackManager: Found pack directory: %s" % dir_name) + + var datapack: DatapackModel = loader.load_datapack(dir_name) + + if datapack: + register_pack(datapack) + else: + push_warning("DatapackManager: Failed to load pack in directory: %s. Skipping." % dir_name) + + dir_name = dir.get_next() + + dir.list_dir_end() + print("DatapackManager: Finished scanning local datapacks.") func clear_loaded_packs(): @@ -22,7 +71,9 @@ func unregister_pack(pack_guid: String): loaded_packs.erase(pack_guid) print("DatapackManager: Unregistered pack with GUID %s." % pack_guid) +# ---------------------------------------------------------------------- # --- DEPENDENCY RESOLUTION --- +# ---------------------------------------------------------------------- ## Resolves a single SzObject ID across all loaded packs. ## Used by SPECIFIC_DATASET mode when the pack GUID is unknown (or referencing local content).