From f3b6a4009d9494d38b639567e8149a9b0bf3b9da Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pa=CC=84vels=20Nadtoc=CC=8Cajevs?= <7645683+bruvzg@users.noreply.github.com> Date: Thu, 23 Jan 2025 10:39:39 +0200 Subject: [PATCH] [Export] Convert `uid://` names to `res://` when exporting files. --- editor/export/editor_export_platform.cpp | 20 +++++++++++++++++-- platform/android/export/export_plugin.cpp | 7 ++++++- .../android/export/gradle_export_util.cpp | 8 +++++++- 3 files changed, 31 insertions(+), 4 deletions(-) diff --git a/editor/export/editor_export_platform.cpp b/editor/export/editor_export_platform.cpp index c5853164ab0..47776c2b52b 100644 --- a/editor/export/editor_export_platform.cpp +++ b/editor/export/editor_export_platform.cpp @@ -255,6 +255,10 @@ Error EditorExportPlatform::_save_pack_file(void *p_userdata, const String &p_pa PackData *pd = (PackData *)p_userdata; String simplified_path = p_path.simplify_path(); + if (simplified_path.begins_with("uid://")) { + simplified_path = ResourceUID::uid_to_path(simplified_path).simplify_path(); + print_verbose(vformat(R"(UID referenced exported file name "%s" was replaced with "%s".)", p_path, simplified_path)); + } SavedData sd; sd.path_utf8 = simplified_path.trim_prefix("res://").utf8(); @@ -349,7 +353,13 @@ Error EditorExportPlatform::_save_pack_patch_file(void *p_userdata, const String Error EditorExportPlatform::_save_zip_file(void *p_userdata, const String &p_path, const Vector &p_data, int p_file, int p_total, const Vector &p_enc_in_filters, const Vector &p_enc_ex_filters, const Vector &p_key, uint64_t p_seed) { ERR_FAIL_COND_V_MSG(p_total < 1, ERR_PARAMETER_RANGE_ERROR, "Must select at least one file to export."); - String path = p_path.replace_first("res://", ""); + String path = p_path.simplify_path(); + if (path.begins_with("uid://")) { + path = ResourceUID::uid_to_path(path).simplify_path(); + print_verbose(vformat(R"(UID referenced exported file name "%s" was replaced with "%s".)", p_path, path)); + } + + path = path.replace_first("res://", ""); ZipData *zd = (ZipData *)p_userdata; @@ -1013,7 +1023,13 @@ Error EditorExportPlatform::_script_save_file(void *p_userdata, const String &p_ Callable cb = ((ScriptCallbackData *)p_userdata)->file_cb; ERR_FAIL_COND_V(!cb.is_valid(), FAILED); - Variant path = p_path; + String simplified_path = p_path.simplify_path(); + if (simplified_path.begins_with("uid://")) { + simplified_path = ResourceUID::uid_to_path(simplified_path).simplify_path(); + print_verbose(vformat(R"(UID referenced exported file name "%s" was replaced with "%s".)", p_path, simplified_path)); + } + + Variant path = simplified_path; Variant data = p_data; Variant file = p_file; Variant total = p_total; diff --git a/platform/android/export/export_plugin.cpp b/platform/android/export/export_plugin.cpp index 9b83580dcc9..e761451345e 100644 --- a/platform/android/export/export_plugin.cpp +++ b/platform/android/export/export_plugin.cpp @@ -803,7 +803,12 @@ Error EditorExportPlatformAndroid::save_apk_so(void *p_userdata, const SharedObj Error EditorExportPlatformAndroid::save_apk_file(void *p_userdata, const String &p_path, const Vector &p_data, int p_file, int p_total, const Vector &p_enc_in_filters, const Vector &p_enc_ex_filters, const Vector &p_key, uint64_t p_seed) { APKExportData *ed = static_cast(p_userdata); - const String path = ResourceUID::ensure_path(p_path); + + String path = p_path.simplify_path(); + if (path.begins_with("uid://")) { + path = ResourceUID::uid_to_path(path).simplify_path(); + print_verbose(vformat(R"(UID referenced exported file name "%s" was replaced with "%s".)", p_path, path)); + } const String dst_path = path.replace_first("res://", "assets/"); store_in_apk(ed, dst_path, p_data, _should_compress_asset(path, p_data) ? Z_DEFLATED : 0); diff --git a/platform/android/export/gradle_export_util.cpp b/platform/android/export/gradle_export_util.cpp index 32ad2d44066..70fda0277ee 100644 --- a/platform/android/export/gradle_export_util.cpp +++ b/platform/android/export/gradle_export_util.cpp @@ -171,8 +171,14 @@ Error store_string_at_path(const String &p_path, const String &p_data) { // This method will be called ONLY when gradle build is enabled. Error rename_and_store_file_in_gradle_project(void *p_userdata, const String &p_path, const Vector &p_data, int p_file, int p_total, const Vector &p_enc_in_filters, const Vector &p_enc_ex_filters, const Vector &p_key, uint64_t p_seed) { CustomExportData *export_data = static_cast(p_userdata); - const String path = ResourceUID::ensure_path(p_path); + + String path = p_path.simplify_path(); + if (path.begins_with("uid://")) { + path = ResourceUID::uid_to_path(path).simplify_path(); + print_verbose(vformat(R"(UID referenced exported file name "%s" was replaced with "%s".)", p_path, path)); + } const String dst_path = path.replace_first("res://", export_data->assets_directory + "/"); + print_verbose("Saving project files from " + path + " into " + dst_path); Error err = store_file_at_path(dst_path, p_data); return err;