diff options
Diffstat (limited to 'editor/editor_file_system.cpp')
-rw-r--r-- | editor/editor_file_system.cpp | 130 |
1 files changed, 56 insertions, 74 deletions
diff --git a/editor/editor_file_system.cpp b/editor/editor_file_system.cpp index 9d110c7136..a6fc8dcddf 100644 --- a/editor/editor_file_system.cpp +++ b/editor/editor_file_system.cpp @@ -118,6 +118,12 @@ Vector<String> EditorFileSystemDirectory::get_file_deps(int p_idx) const { return files[p_idx]->deps; } +bool EditorFileSystemDirectory::get_file_import_is_valid(int p_idx) const { + + ERR_FAIL_INDEX_V(p_idx, files.size(), false); + return files[p_idx]->import_valid; +} + StringName EditorFileSystemDirectory::get_file_type(int p_idx) const { ERR_FAIL_INDEX_V(p_idx, files.size(), ""); @@ -142,6 +148,7 @@ void EditorFileSystemDirectory::_bind_methods() { ClassDB::bind_method(D_METHOD("get_file", "idx"), &EditorFileSystemDirectory::get_file); ClassDB::bind_method(D_METHOD("get_file_path", "idx"), &EditorFileSystemDirectory::get_file_path); ClassDB::bind_method(D_METHOD("get_file_type", "idx"), &EditorFileSystemDirectory::get_file_type); + ClassDB::bind_method(D_METHOD("get_file_import_is_valid", "idx"), &EditorFileSystemDirectory::get_file_import_is_valid); ClassDB::bind_method(D_METHOD("get_name"), &EditorFileSystemDirectory::get_name); ClassDB::bind_method(D_METHOD("get_path"), &EditorFileSystemDirectory::get_path); ClassDB::bind_method(D_METHOD("get_parent"), &EditorFileSystemDirectory::get_parent); @@ -181,7 +188,7 @@ void EditorFileSystem::_scan_filesystem() { String project = ProjectSettings::get_singleton()->get_resource_path(); - String fscache = EditorSettings::get_singleton()->get_project_settings_path().plus_file("filesystem_cache2"); + String fscache = EditorSettings::get_singleton()->get_project_settings_path().plus_file("filesystem_cache3"); FileAccess *f = FileAccess::open(fscache, FileAccess::READ); if (f) { @@ -201,7 +208,7 @@ void EditorFileSystem::_scan_filesystem() { } else { Vector<String> split = l.split("::"); - ERR_CONTINUE(split.size() != 5); + ERR_CONTINUE(split.size() != 6); String name = split[0]; String file; @@ -212,8 +219,9 @@ void EditorFileSystem::_scan_filesystem() { fc.type = split[1]; fc.modification_time = split[2].to_int64(); fc.import_modification_time = split[3].to_int64(); + fc.import_valid = split[4].to_int64() != 0; - String deps = split[4].strip_edges(); + String deps = split[5].strip_edges(); if (deps.length()) { Vector<String> dp = deps.split("<>"); for (int i = 0; i < dp.size(); i++) { @@ -230,19 +238,14 @@ void EditorFileSystem::_scan_filesystem() { memdelete(f); } - String update_cache = EditorSettings::get_singleton()->get_project_settings_path().plus_file("filesystem_update2"); + String update_cache = EditorSettings::get_singleton()->get_project_settings_path().plus_file("filesystem_update3"); - print_line("try to see fs update2"); if (FileAccess::exists(update_cache)) { - - print_line("it exists"); - { FileAccessRef f = FileAccess::open(update_cache, FileAccess::READ); String l = f->get_line().strip_edges(); while (l != String()) { - print_line("erased cache for: " + l + " " + itos(file_cache.has(l))); file_cache.erase(l); //erase cache for this, so it gets updated l = f->get_line().strip_edges(); } @@ -270,9 +273,6 @@ void EditorFileSystem::_scan_filesystem() { memdelete(d); - //save back the findings - //String fscache = EditorSettings::get_singleton()->get_project_settings_path().plus_file("file_cache"); - f = FileAccess::open(fscache, FileAccess::WRITE); _save_filesystem_cache(new_filesystem, f); f->close(); @@ -282,7 +282,7 @@ void EditorFileSystem::_scan_filesystem() { } void EditorFileSystem::_save_filesystem_cache() { - String fscache = EditorSettings::get_singleton()->get_project_settings_path().plus_file("filesystem_cache2"); + String fscache = EditorSettings::get_singleton()->get_project_settings_path().plus_file("filesystem_cache3"); FileAccess *f = FileAccess::open(fscache, FileAccess::WRITE); _save_filesystem_cache(filesystem, f); @@ -314,7 +314,6 @@ bool EditorFileSystem::_update_scan_actions() { } break; case ItemAction::ACTION_DIR_ADD: { - //print_line("*ACTION ADD DIR: "+ia.new_dir->get_name()); int idx = 0; for (int i = 0; i < ia.dir->subdirs.size(); i++) { @@ -333,7 +332,6 @@ bool EditorFileSystem::_update_scan_actions() { case ItemAction::ACTION_DIR_REMOVE: { ERR_CONTINUE(!ia.dir->parent); - //print_line("*ACTION REMOVE DIR: "+ia.dir->get_name()); ia.dir->parent->subdirs.erase(ia.dir); memdelete(ia.dir); fs_changed = true; @@ -354,7 +352,6 @@ bool EditorFileSystem::_update_scan_actions() { } fs_changed = true; - //print_line("*ACTION ADD FILE: "+ia.new_file->file); } break; case ItemAction::ACTION_FILE_REMOVE: { @@ -366,7 +363,6 @@ bool EditorFileSystem::_update_scan_actions() { ia.dir->files.remove(idx); fs_changed = true; - //print_line("*ACTION REMOVE FILE: "+ia.file); } break; case ItemAction::ACTION_FILE_REIMPORT: { @@ -504,7 +500,6 @@ bool EditorFileSystem::_check_missing_imported_files(const String &p_path) { for (List<String>::Element *E = to_check.front(); E; E = E->next()) { if (!FileAccess::exists(E->get())) { - print_line("missing " + E->get() + ", reimport"); return false; } } @@ -622,6 +617,7 @@ void EditorFileSystem::_scan_new_dir(EditorFileSystemDirectory *p_dir, DirAccess fi->deps = fc->deps; fi->modified_time = fc->modification_time; fi->import_modified_time = fc->import_modification_time; + fi->import_valid = fc->import_valid; if (fc->type == String()) { fi->type = ResourceLoader::get_resource_type(path); //there is also the chance that file type changed due to reimport, must probably check this somehow here (or kind of note it for next time in another file?) @@ -630,24 +626,10 @@ void EditorFileSystem::_scan_new_dir(EditorFileSystemDirectory *p_dir, DirAccess } else { - if (!fc) { - print_line("REIMPORT BECAUSE: not previously found"); - } else if (fc->modification_time != mt) { - print_line("REIMPORT BECAUSE: modified resource time " + itos(fc->modification_time) + " vs " + itos(mt)); - - } else if (fc->import_modification_time != import_mt) { - print_line("REIMPORT BECAUSE: modified .import time" + itos(fc->import_modification_time) + " vs " + itos(import_mt)); - - } else { - - print_line("REIMPORT BECAUSE: missing imported files"); - } - fi->type = ResourceFormatImporter::get_singleton()->get_resource_type(path); - //fi->deps = ResourceLoader::get_dependencies(path); pointless because it will be reimported, but.. - print_line("import extension tried resource type for " + path + " and its " + fi->type); fi->modified_time = 0; fi->import_modified_time = 0; + fi->import_valid = ResourceLoader::is_import_valid(path); ItemAction ia; ia.action = ItemAction::ACTION_FILE_REIMPORT; @@ -663,13 +645,14 @@ void EditorFileSystem::_scan_new_dir(EditorFileSystemDirectory *p_dir, DirAccess fi->modified_time = fc->modification_time; fi->deps = fc->deps; fi->import_modified_time = 0; + fi->import_valid = true; } else { //new or modified time fi->type = ResourceLoader::get_resource_type(path); fi->deps = _get_dependencies(path); - print_line("regular import tried resource type for " + path + " and its " + fi->type); fi->modified_time = mt; fi->import_modified_time = 0; + fi->import_valid = true; } } @@ -685,8 +668,6 @@ void EditorFileSystem::_scan_fs_changes(EditorFileSystemDirectory *p_dir, const bool updated_dir = false; String cd = p_dir->get_path(); - //print_line("dir: "+p_dir->get_path()+" MODTIME: "+itos(p_dir->modified_time)+" CTIME: "+itos(current_mtime)); - if (current_mtime != p_dir->modified_time) { updated_dir = true; @@ -766,6 +747,7 @@ void EditorFileSystem::_scan_fs_changes(EditorFileSystemDirectory *p_dir, const fi->modified_time = FileAccess::get_modified_time(path); fi->import_modified_time = 0; fi->type = ResourceLoader::get_resource_type(path); + fi->import_valid = ResourceLoader::is_import_valid(path); { ItemAction ia; @@ -778,11 +760,6 @@ void EditorFileSystem::_scan_fs_changes(EditorFileSystemDirectory *p_dir, const if (import_extensions.has(ext)) { //if it can be imported, and it was added, it needs to be reimported - print_line("REIMPORT: file was not found before, reimport"); - print_line("at dir: " + p_dir->get_path() + " file: " + f); - for (int i = 0; i < p_dir->files.size(); i++) { - print_line(itos(i) + ": " + p_dir->files[i]->file); - } ItemAction ia; ia.action = ItemAction::ACTION_FILE_REIMPORT; ia.dir = p_dir; @@ -822,20 +799,15 @@ void EditorFileSystem::_scan_fs_changes(EditorFileSystemDirectory *p_dir, const bool reimport = false; if (mt != p_dir->files[i]->modified_time) { - print_line("REIMPORT: modified time changed, reimport"); reimport = true; //it was modified, must be reimported. } else if (!FileAccess::exists(path + ".import")) { - print_line("REIMPORT: no .import exists, reimport"); reimport = true; //no .import file, obviously reimport } else { uint64_t import_mt = FileAccess::get_modified_time(path + ".import"); - //print_line(itos(import_mt) + " vs " + itos(p_dir->files[i]->import_modified_time)); if (import_mt != p_dir->files[i]->import_modified_time) { - print_line("REIMPORT: import modified changed, reimport"); reimport = true; } else if (!_check_missing_imported_files(path)) { - print_line("REIMPORT: imported files removed"); reimport = true; } } @@ -934,9 +906,6 @@ void EditorFileSystem::scan_changes() { Thread::Settings s; s.priority = Thread::PRIORITY_LOW; thread_sources = Thread::create(_thread_func_sources, this, s); - //tree->hide(); - //print_line("SCAN BEGIN!"); - //progress->show(); } } @@ -987,7 +956,6 @@ void EditorFileSystem::_notification(int p_what) { thread_sources = NULL; if (_update_scan_actions()) emit_signal("filesystem_changed"); - //print_line("sources changed: "+itos(sources_changed.size())); emit_signal("sources_changed", sources_changed.size() > 0); } } else if (!scanning) { @@ -1004,10 +972,6 @@ void EditorFileSystem::_notification(int p_what) { _update_scan_actions(); emit_signal("filesystem_changed"); emit_signal("sources_changed", sources_changed.size() > 0); - //print_line("initial sources changed: "+itos(sources_changed.size())); - - } else { - //progress->set_text("Scanning...\n"+itos(total*100)+"%"); } } } break; @@ -1036,7 +1000,7 @@ void EditorFileSystem::_save_filesystem_cache(EditorFileSystemDirectory *p_dir, for (int i = 0; i < p_dir->files.size(); i++) { - String s = p_dir->files[i]->file + "::" + p_dir->files[i]->type + "::" + itos(p_dir->files[i]->modified_time) + "::" + itos(p_dir->files[i]->import_modified_time); + String s = p_dir->files[i]->file + "::" + p_dir->files[i]->type + "::" + itos(p_dir->files[i]->modified_time) + "::" + itos(p_dir->files[i]->import_modified_time) + "::" + itos(p_dir->files[i]->import_valid); s += "::"; for (int j = 0; j < p_dir->files[i]->deps.size(); j++) { @@ -1217,7 +1181,7 @@ EditorFileSystemDirectory *EditorFileSystem::get_filesystem_path(const String &p void EditorFileSystem::_save_late_updated_files() { //files that already existed, and were modified, need re-scanning for dependencies upon project restart. This is done via saving this special file - String fscache = EditorSettings::get_singleton()->get_project_settings_path().plus_file("filesystem_update2"); + String fscache = EditorSettings::get_singleton()->get_project_settings_path().plus_file("filesystem_update3"); FileAccessRef f = FileAccess::open(fscache, FileAccess::WRITE); for (Set<String>::Element *E = late_update_files.front(); E; E = E->next()) { f->store_line(E->get()); @@ -1226,7 +1190,6 @@ void EditorFileSystem::_save_late_updated_files() { void EditorFileSystem::_resource_saved(const String &p_path) { - //print_line("resource saved: "+p_path); EditorFileSystem::get_singleton()->update_file(p_path); } @@ -1281,6 +1244,7 @@ void EditorFileSystem::update_file(const String &p_file) { EditorFileSystemDirectory::FileInfo *fi = memnew(EditorFileSystemDirectory::FileInfo); fi->file = p_file.get_file(); fi->import_modified_time = 0; + fi->import_valid = ResourceLoader::is_import_valid(p_file); if (idx == fs->files.size()) { fs->files.push_back(fi); @@ -1297,13 +1261,10 @@ void EditorFileSystem::update_file(const String &p_file) { _save_late_updated_files(); //files need to be updated in the re-scan } - //print_line("UPDATING: "+p_file); fs->files[cpos]->type = type; fs->files[cpos]->modified_time = FileAccess::get_modified_time(p_file); fs->files[cpos]->deps = _get_dependencies(p_file); - //if (FileAccess::exists(p_file+".import")) { - // fs->files[cpos]->import_modified_time=FileAccess::get_modified_time(p_file+".import"); - //} + fs->files[cpos]->import_valid = ResourceLoader::is_import_valid(p_file); EditorResourcePreview::get_singleton()->call_deferred("check_for_invalidation", p_file); call_deferred("emit_signal", "filesystem_changed"); //update later @@ -1311,8 +1272,6 @@ void EditorFileSystem::update_file(const String &p_file) { void EditorFileSystem::_reimport_file(const String &p_file) { - print_line("REIMPORTING: " + p_file); - EditorFileSystemDirectory *fs = NULL; int cpos = -1; bool found = _find_file(p_file, &fs, cpos); @@ -1368,7 +1327,7 @@ void EditorFileSystem::_reimport_file(const String &p_file) { } } - if (load_default && ProjectSettings::get_singleton()->get("importer_defaults/" + importer->get_importer_name())) { + if (load_default && ProjectSettings::get_singleton()->has_setting("importer_defaults/" + importer->get_importer_name())) { //use defaults if exist Dictionary d = ProjectSettings::get_singleton()->get("importer_defaults/" + importer->get_importer_name()); List<Variant> v; @@ -1404,19 +1363,26 @@ void EditorFileSystem::_reimport_file(const String &p_file) { f->store_line("type=\"" + importer->get_resource_type() + "\""); } - if (importer->get_save_extension() == "") { - //no path - } else if (import_variants.size()) { - //import with variants - for (List<String>::Element *E = import_variants.front(); E; E = E->next()) { + if (err == OK) { + + if (importer->get_save_extension() == "") { + //no path + } else if (import_variants.size()) { + //import with variants + for (List<String>::Element *E = import_variants.front(); E; E = E->next()) { - String path = base_path.c_escape() + "." + E->get() + "." + importer->get_save_extension(); + String path = base_path.c_escape() + "." + E->get() + "." + importer->get_save_extension(); - f->store_line("path." + E->get() + "=\"" + path + "\""); + f->store_line("path." + E->get() + "=\"" + path + "\""); + } + } else { + + f->store_line("path=\"" + base_path + "." + importer->get_save_extension() + "\""); } + } else { - f->store_line("path=\"" + base_path + "." + importer->get_save_extension() + "\""); + f->store_line("valid=false"); } f->store_line(""); @@ -1455,6 +1421,7 @@ void EditorFileSystem::_reimport_file(const String &p_file) { fs->files[cpos]->import_modified_time = FileAccess::get_modified_time(p_file + ".import"); fs->files[cpos]->deps = _get_dependencies(p_file); fs->files[cpos]->type = importer->get_resource_type(); + fs->files[cpos]->import_valid = ResourceLoader::is_import_valid(p_file); //if file is currently up, maybe the source it was loaded from changed, so import math must be updated for it //to reload properly @@ -1475,10 +1442,22 @@ void EditorFileSystem::reimport_files(const Vector<String> &p_files) { importing = true; EditorProgress pr("reimport", TTR("(Re)Importing Assets"), p_files.size()); + + Vector<ImportFile> files; + for (int i = 0; i < p_files.size(); i++) { - pr.step(p_files[i].get_file(), i); + ImportFile ifile; + ifile.path = p_files[i]; + ifile.order = ResourceFormatImporter::get_singleton()->get_import_order(p_files[i]); + files.push_back(ifile); + } + + files.sort(); - _reimport_file(p_files[i]); + for (int i = 0; i < files.size(); i++) { + pr.step(files[i].path.get_file(), i); + + _reimport_file(files[i].path); } _save_filesystem_cache(); @@ -1486,6 +1465,8 @@ void EditorFileSystem::reimport_files(const Vector<String> &p_files) { if (!is_scanning()) { emit_signal("filesystem_changed"); } + + emit_signal("resources_reimported", p_files); } void EditorFileSystem::_bind_methods() { @@ -1501,6 +1482,7 @@ void EditorFileSystem::_bind_methods() { ADD_SIGNAL(MethodInfo("filesystem_changed")); ADD_SIGNAL(MethodInfo("sources_changed", PropertyInfo(Variant::BOOL, "exist"))); + ADD_SIGNAL(MethodInfo("resources_reimported", PropertyInfo(Variant::POOL_STRING_ARRAY, "resources"))); } void EditorFileSystem::_update_extensions() { |