From f1099ab943859f1e1510ffef5782b4d9c599bf80 Mon Sep 17 00:00:00 2001 From: Hilderin <81109165+Hilderin@users.noreply.github.com> Date: Fri, 24 May 2024 11:32:33 -0400 Subject: [PATCH] Fix reimporting assets with csv in the project --- core/io/resource_importer.cpp | 14 +++++++++++++- editor/editor_file_system.cpp | 13 +++++++++++-- 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/core/io/resource_importer.cpp b/core/io/resource_importer.cpp index fcf4a727ca4..1a746fb9e3a 100644 --- a/core/io/resource_importer.cpp +++ b/core/io/resource_importer.cpp @@ -118,9 +118,21 @@ Error ResourceFormatImporter::_get_path_and_type(const String &p_path, PathAndTy } #endif - if (r_path_and_type.path.is_empty() || r_path_and_type.type.is_empty()) { + if (r_path_and_type.type.is_empty()) { return ERR_FILE_CORRUPT; } + if (r_path_and_type.path.is_empty()) { + // Some importers may not write files to the .godot folder, so the path can be empty. + if (r_path_and_type.importer.is_empty()) { + return ERR_FILE_CORRUPT; + } + + // It's only invalid if the extension for the importer is not empty. + Ref importer = get_importer_by_name(r_path_and_type.importer); + if (importer.is_null() || !importer->get_save_extension().is_empty()) { + return ERR_FILE_CORRUPT; + } + } return OK; } diff --git a/editor/editor_file_system.cpp b/editor/editor_file_system.cpp index 3adff84e40b..28e154ae751 100644 --- a/editor/editor_file_system.cpp +++ b/editor/editor_file_system.cpp @@ -2398,18 +2398,23 @@ void EditorFileSystem::reimport_files(const Vector &p_files) { int from = 0; for (int i = 0; i < reimport_files.size(); i++) { if (groups_to_reimport.has(reimport_files[i].path)) { + from = i + 1; continue; } if (use_multiple_threads && reimport_files[i].threaded) { - if (i + 1 == reimport_files.size() || reimport_files[i + 1].importer != reimport_files[from].importer) { + if (i + 1 == reimport_files.size() || reimport_files[i + 1].importer != reimport_files[from].importer || groups_to_reimport.has(reimport_files[i + 1].path)) { if (from - i == 0) { // Single file, do not use threads. pr.step(reimport_files[i].path.get_file(), i); _reimport_file(reimport_files[i].path); } else { Ref importer = ResourceFormatImporter::get_singleton()->get_importer_by_name(reimport_files[from].importer); - ERR_CONTINUE(!importer.is_valid()); + if (importer.is_null()) { + ERR_PRINT(vformat("Invalid importer for \"%s\".", reimport_files[from].importer)); + from = i + 1; + continue; + } importer->import_threaded_begin(); @@ -2439,6 +2444,10 @@ void EditorFileSystem::reimport_files(const Vector &p_files) { } else { pr.step(reimport_files[i].path.get_file(), i); _reimport_file(reimport_files[i].path); + + // We need to increment the counter, maybe the next file is multithreaded + // and doesn't have the same importer. + from = i + 1; } }