From 45c903bd24d429134b4cf8d75489f7f8a6075951 Mon Sep 17 00:00:00 2001 From: Voyager Date: Mon, 24 Aug 2026 20:21:15 -0400 Subject: [PATCH] Fix portable data folder reselection --- network/portable_data_migration.gd | 7 ++++++- tests/progression_archive_validation.gd | 26 +++++++++++++++++++++++++ ui/settings_panel.gd | 8 +++++++- 3 files changed, 39 insertions(+), 2 deletions(-) diff --git a/network/portable_data_migration.gd b/network/portable_data_migration.gd index 430fba8..17ded9f 100644 --- a/network/portable_data_migration.gd +++ b/network/portable_data_migration.gd @@ -100,7 +100,11 @@ static func migrate_active_to( ) -> Dictionary: var normalized: String = destination.simplify_path().trim_suffix("/") if normalized == data_root.root_path: - return {"ok": true, "message": "This data folder is already active."} + return { + "ok": true, + "changed": false, + "message": "This data folder is already active.", + } if DirAccess.dir_exists_absolute(normalized) and not _directory_empty(normalized): if FileAccess.file_exists(normalized.path_join(PlayerDataRoot.MANIFEST_FILENAME)): return { @@ -163,6 +167,7 @@ static func migrate_active_to( return {"ok": false, "message": "Migration copied data but did not change the pointer."} return { "ok": true, + "changed": true, "message": "Data folder changed. Previous data was preserved.", "previous_root": old_root, } diff --git a/tests/progression_archive_validation.gd b/tests/progression_archive_validation.gd index 3fd9eff..7f98066 100644 --- a/tests/progression_archive_validation.gd +++ b/tests/progression_archive_validation.gd @@ -134,6 +134,22 @@ func _run() -> void: for settings_panel: SettingsPanel in settings_panels: assert(settings_panel.get_node_or_null("%ExportProgression") == null) assert(settings_panel.get_node_or_null("%ImportProgression") == null) + var settings_panel: SettingsPanel = settings_panels.front() as SettingsPanel + var unchanged_root: String = data_root.root_path + settings_panel.call("_choose_data_folder") + var data_folder_dialog := ( + settings_panel.get("_data_folder_dialog") as FileDialog + ) + assert(data_folder_dialog != null) + assert(data_folder_dialog.current_dir == unchanged_root) + data_folder_dialog.hide() + settings_panel.call("_change_data_folder", unchanged_root + "/") + await process_frame + assert(data_root.root_path == unchanged_root) + assert( + (settings_panel.get_node("%SettingsFeedback") as Label).text + == "this data folder is already active." + ) var save_slots_page := main.find_child( "SaveSlotsPage", true, false ) as SaveSlotsPage @@ -141,6 +157,15 @@ func _run() -> void: assert(save_slots_page.get_node("%ExportSlotButton") is Button) assert(save_slots_page.get_node("%ImportSlotButton") is Button) + var unchanged_migration: Dictionary = ( + PortableDataMigration.migrate_active_to( + data_root, unchanged_root + "/" + ) + ) + assert(bool(unchanged_migration.get("ok", false))) + assert(not bool(unchanged_migration.get("changed", true))) + assert(data_root.root_path == unchanged_root) + var migrated_root: String = data_root.root_path.get_base_dir().path_join( "progression-migrated-data" ) @@ -148,6 +173,7 @@ func _run() -> void: data_root, migrated_root ) assert(bool(data_migration.get("ok", false))) + assert(bool(data_migration.get("changed", false))) var migrated_save: String = migrated_root.path_join( "player/player_save.nfsave" ) diff --git a/ui/settings_panel.gd b/ui/settings_panel.gd index 51d0c96..049b9c9 100644 --- a/ui/settings_panel.gd +++ b/ui/settings_panel.gd @@ -679,7 +679,7 @@ func _choose_data_folder() -> void: _data_folder_dialog.dir_selected.connect(_change_data_folder) _interface_fonts.apply_utility_theme(_data_folder_dialog) add_child(_data_folder_dialog) - _data_folder_dialog.current_dir = _data_root.root_path.get_base_dir() + _data_folder_dialog.current_dir = _data_root.root_path _interface_fonts.popup_file_dialog(_data_folder_dialog) @@ -691,6 +691,12 @@ func _change_data_folder(path: String) -> void: _show_existing_data_folder_choice(path) return if bool(result.get("ok", false)): + if not bool(result.get("changed", false)): + _feedback.text = str( + result.get("message", "this data folder is already active.") + ).to_lower() + _refresh_data_page() + return _feedback.text = "data folder changed. NETfishing will close safely." _refresh_data_page() get_tree().call_deferred("quit")