Fix portable data folder reselection

This commit is contained in:
Alexander Sellite 2026-08-24 20:21:15 -04:00
parent ea4d38cb49
commit 45c903bd24
3 changed files with 39 additions and 2 deletions

View file

@ -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,
}

View file

@ -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"
)

View file

@ -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")