|
@@ -1642,6 +1642,7 @@ Error EditorFileSystem::_reimport_group(const String &p_group_file, const Vector
|
|
String importer_name;
|
|
String importer_name;
|
|
|
|
|
|
HashMap<String, HashMap<StringName, Variant>> source_file_options;
|
|
HashMap<String, HashMap<StringName, Variant>> source_file_options;
|
|
|
|
+ HashMap<String, ResourceUID::ID> uids;
|
|
HashMap<String, String> base_paths;
|
|
HashMap<String, String> base_paths;
|
|
for (int i = 0; i < p_files.size(); i++) {
|
|
for (int i = 0; i < p_files.size(); i++) {
|
|
Ref<ConfigFile> config;
|
|
Ref<ConfigFile> config;
|
|
@@ -1657,6 +1658,15 @@ Error EditorFileSystem::_reimport_group(const String &p_group_file, const Vector
|
|
ERR_FAIL_V(ERR_FILE_CORRUPT);
|
|
ERR_FAIL_V(ERR_FILE_CORRUPT);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ ResourceUID::ID uid = ResourceUID::INVALID_ID;
|
|
|
|
+
|
|
|
|
+ if (config->has_section_key("remap", "uid")) {
|
|
|
|
+ String uidt = config->get_value("remap", "uid");
|
|
|
|
+ uid = ResourceUID::get_singleton()->text_to_id(uidt);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ uids[p_files[i]] = uid;
|
|
|
|
+
|
|
source_file_options[p_files[i]] = HashMap<StringName, Variant>();
|
|
source_file_options[p_files[i]] = HashMap<StringName, Variant>();
|
|
importer_name = file_importer_name;
|
|
importer_name = file_importer_name;
|
|
|
|
|
|
@@ -1701,6 +1711,7 @@ Error EditorFileSystem::_reimport_group(const String &p_group_file, const Vector
|
|
const String &file = E.key;
|
|
const String &file = E.key;
|
|
String base_path = ResourceFormatImporter::get_singleton()->get_import_base_path(file);
|
|
String base_path = ResourceFormatImporter::get_singleton()->get_import_base_path(file);
|
|
Vector<String> dest_paths;
|
|
Vector<String> dest_paths;
|
|
|
|
+ ResourceUID::ID uid = uids[file];
|
|
{
|
|
{
|
|
Ref<FileAccess> f = FileAccess::open(file + ".import", FileAccess::WRITE);
|
|
Ref<FileAccess> f = FileAccess::open(file + ".import", FileAccess::WRITE);
|
|
ERR_FAIL_COND_V_MSG(f.is_null(), ERR_FILE_CANT_OPEN, "Cannot open import file '" + file + ".import'.");
|
|
ERR_FAIL_COND_V_MSG(f.is_null(), ERR_FILE_CANT_OPEN, "Cannot open import file '" + file + ".import'.");
|
|
@@ -1717,6 +1728,12 @@ Error EditorFileSystem::_reimport_group(const String &p_group_file, const Vector
|
|
f->store_line("type=\"" + importer->get_resource_type() + "\"");
|
|
f->store_line("type=\"" + importer->get_resource_type() + "\"");
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ if (uid == ResourceUID::INVALID_ID) {
|
|
|
|
+ uid = ResourceUID::get_singleton()->create_id();
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ f->store_line("uid=\"" + ResourceUID::get_singleton()->id_to_text(uid) + "\""); // Store in readable format.
|
|
|
|
+
|
|
if (err == OK) {
|
|
if (err == OK) {
|
|
String path = base_path + "." + importer->get_save_extension();
|
|
String path = base_path + "." + importer->get_save_extension();
|
|
f->store_line("path=\"" + path + "\"");
|
|
f->store_line("path=\"" + path + "\"");
|
|
@@ -1782,12 +1799,19 @@ Error EditorFileSystem::_reimport_group(const String &p_group_file, const Vector
|
|
fs->files[cpos]->modified_time = FileAccess::get_modified_time(file);
|
|
fs->files[cpos]->modified_time = FileAccess::get_modified_time(file);
|
|
fs->files[cpos]->import_modified_time = FileAccess::get_modified_time(file + ".import");
|
|
fs->files[cpos]->import_modified_time = FileAccess::get_modified_time(file + ".import");
|
|
fs->files[cpos]->deps = _get_dependencies(file);
|
|
fs->files[cpos]->deps = _get_dependencies(file);
|
|
|
|
+ fs->files[cpos]->uid = uid;
|
|
fs->files[cpos]->type = importer->get_resource_type();
|
|
fs->files[cpos]->type = importer->get_resource_type();
|
|
if (fs->files[cpos]->type == "" && textfile_extensions.has(file.get_extension())) {
|
|
if (fs->files[cpos]->type == "" && textfile_extensions.has(file.get_extension())) {
|
|
fs->files[cpos]->type = "TextFile";
|
|
fs->files[cpos]->type = "TextFile";
|
|
}
|
|
}
|
|
fs->files[cpos]->import_valid = err == OK;
|
|
fs->files[cpos]->import_valid = err == OK;
|
|
|
|
|
|
|
|
+ if (ResourceUID::get_singleton()->has_id(uid)) {
|
|
|
|
+ ResourceUID::get_singleton()->set_id(uid, file);
|
|
|
|
+ } else {
|
|
|
|
+ ResourceUID::get_singleton()->add_id(uid, file);
|
|
|
|
+ }
|
|
|
|
+
|
|
//if file is currently up, maybe the source it was loaded from changed, so import math must be updated for it
|
|
//if file is currently up, maybe the source it was loaded from changed, so import math must be updated for it
|
|
//to reload properly
|
|
//to reload properly
|
|
Ref<Resource> r = ResourceCache::get_ref(file);
|
|
Ref<Resource> r = ResourceCache::get_ref(file);
|
|
@@ -2074,6 +2098,8 @@ void EditorFileSystem::reimport_files(const Vector<String> &p_files) {
|
|
importing = true;
|
|
importing = true;
|
|
EditorProgress pr("reimport", TTR("(Re)Importing Assets"), p_files.size());
|
|
EditorProgress pr("reimport", TTR("(Re)Importing Assets"), p_files.size());
|
|
|
|
|
|
|
|
+ Vector<String> reloads;
|
|
|
|
+
|
|
Vector<ImportFile> reimport_files;
|
|
Vector<ImportFile> reimport_files;
|
|
|
|
|
|
HashSet<String> groups_to_reimport;
|
|
HashSet<String> groups_to_reimport;
|
|
@@ -2089,22 +2115,26 @@ void EditorFileSystem::reimport_files(const Vector<String> &p_files) {
|
|
String group_file = ResourceFormatImporter::get_singleton()->get_import_group_file(file);
|
|
String group_file = ResourceFormatImporter::get_singleton()->get_import_group_file(file);
|
|
|
|
|
|
if (group_file_cache.has(file)) {
|
|
if (group_file_cache.has(file)) {
|
|
- //maybe the file itself is a group!
|
|
|
|
|
|
+ // Maybe the file itself is a group!
|
|
groups_to_reimport.insert(file);
|
|
groups_to_reimport.insert(file);
|
|
- //groups do not belong to groups
|
|
|
|
|
|
+ // Groups do not belong to groups.
|
|
|
|
+ group_file = String();
|
|
|
|
+ } else if (groups_to_reimport.has(file)) {
|
|
|
|
+ // Groups do not belong to groups.
|
|
group_file = String();
|
|
group_file = String();
|
|
} else if (!group_file.is_empty()) {
|
|
} else if (!group_file.is_empty()) {
|
|
- //it's a group file, add group to import and skip this file
|
|
|
|
|
|
+ // It's a group file, add group to import and skip this file.
|
|
groups_to_reimport.insert(group_file);
|
|
groups_to_reimport.insert(group_file);
|
|
} else {
|
|
} else {
|
|
- //it's a regular file
|
|
|
|
|
|
+ // It's a regular file.
|
|
ImportFile ifile;
|
|
ImportFile ifile;
|
|
ifile.path = file;
|
|
ifile.path = file;
|
|
ResourceFormatImporter::get_singleton()->get_import_order_threads_and_importer(file, ifile.order, ifile.threaded, ifile.importer);
|
|
ResourceFormatImporter::get_singleton()->get_import_order_threads_and_importer(file, ifile.order, ifile.threaded, ifile.importer);
|
|
|
|
+ reloads.push_back(file);
|
|
reimport_files.push_back(ifile);
|
|
reimport_files.push_back(ifile);
|
|
}
|
|
}
|
|
|
|
|
|
- //group may have changed, so also update group reference
|
|
|
|
|
|
+ // Group may have changed, so also update group reference.
|
|
EditorFileSystemDirectory *fs = nullptr;
|
|
EditorFileSystemDirectory *fs = nullptr;
|
|
int cpos = -1;
|
|
int cpos = -1;
|
|
if (_find_file(file, &fs, cpos)) {
|
|
if (_find_file(file, &fs, cpos)) {
|
|
@@ -2118,10 +2148,14 @@ void EditorFileSystem::reimport_files(const Vector<String> &p_files) {
|
|
|
|
|
|
int from = 0;
|
|
int from = 0;
|
|
for (int i = 0; i < reimport_files.size(); i++) {
|
|
for (int i = 0; i < reimport_files.size(); i++) {
|
|
|
|
+ if (groups_to_reimport.has(reimport_files[i].path)) {
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
|
|
+
|
|
if (use_multiple_threads && reimport_files[i].threaded) {
|
|
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) {
|
|
if (from - i == 0) {
|
|
if (from - i == 0) {
|
|
- //single file, do not use threads
|
|
|
|
|
|
+ // Single file, do not use threads.
|
|
pr.step(reimport_files[i].path.get_file(), i);
|
|
pr.step(reimport_files[i].path.get_file(), i);
|
|
_reimport_file(reimport_files[i].path);
|
|
_reimport_file(reimport_files[i].path);
|
|
} else {
|
|
} else {
|
|
@@ -2159,20 +2193,25 @@ void EditorFileSystem::reimport_files(const Vector<String> &p_files) {
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
- //reimport groups
|
|
|
|
|
|
+ // Reimport groups.
|
|
|
|
+
|
|
|
|
+ from = reimport_files.size();
|
|
|
|
|
|
if (groups_to_reimport.size()) {
|
|
if (groups_to_reimport.size()) {
|
|
HashMap<String, Vector<String>> group_files;
|
|
HashMap<String, Vector<String>> group_files;
|
|
_find_group_files(filesystem, group_files, groups_to_reimport);
|
|
_find_group_files(filesystem, group_files, groups_to_reimport);
|
|
for (const KeyValue<String, Vector<String>> &E : group_files) {
|
|
for (const KeyValue<String, Vector<String>> &E : group_files) {
|
|
|
|
+ pr.step(E.key.get_file(), from++);
|
|
Error err = _reimport_group(E.key, E.value);
|
|
Error err = _reimport_group(E.key, E.value);
|
|
|
|
+ reloads.push_back(E.key);
|
|
|
|
+ reloads.append_array(E.value);
|
|
if (err == OK) {
|
|
if (err == OK) {
|
|
_reimport_file(E.key);
|
|
_reimport_file(E.key);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
- ResourceUID::get_singleton()->update_cache(); //after reimporting, update the cache
|
|
|
|
|
|
+ ResourceUID::get_singleton()->update_cache(); // After reimporting, update the cache.
|
|
|
|
|
|
_save_filesystem_cache();
|
|
_save_filesystem_cache();
|
|
importing = false;
|
|
importing = false;
|
|
@@ -2180,7 +2219,7 @@ void EditorFileSystem::reimport_files(const Vector<String> &p_files) {
|
|
emit_signal(SNAME("filesystem_changed"));
|
|
emit_signal(SNAME("filesystem_changed"));
|
|
}
|
|
}
|
|
|
|
|
|
- emit_signal(SNAME("resources_reimported"), p_files);
|
|
|
|
|
|
+ emit_signal(SNAME("resources_reimported"), reloads);
|
|
}
|
|
}
|
|
|
|
|
|
Error EditorFileSystem::_resource_import(const String &p_path) {
|
|
Error EditorFileSystem::_resource_import(const String &p_path) {
|