diff options
Diffstat (limited to 'editor/editor_file_system.cpp')
-rw-r--r-- | editor/editor_file_system.cpp | 273 |
1 files changed, 91 insertions, 182 deletions
diff --git a/editor/editor_file_system.cpp b/editor/editor_file_system.cpp index c211d5852a..d88c61d7b2 100644 --- a/editor/editor_file_system.cpp +++ b/editor/editor_file_system.cpp @@ -46,53 +46,48 @@ EditorFileSystem *EditorFileSystem::singleton = nullptr; #define CACHE_FILE_NAME "filesystem_cache6" void EditorFileSystemDirectory::sort_files() { - files.sort_custom<FileInfoSort>(); } int EditorFileSystemDirectory::find_file_index(const String &p_file) const { - for (int i = 0; i < files.size(); i++) { - if (files[i]->file == p_file) + if (files[i]->file == p_file) { return i; + } } return -1; } -int EditorFileSystemDirectory::find_dir_index(const String &p_dir) const { +int EditorFileSystemDirectory::find_dir_index(const String &p_dir) const { for (int i = 0; i < subdirs.size(); i++) { - if (subdirs[i]->name == p_dir) + if (subdirs[i]->name == p_dir) { return i; + } } return -1; } int EditorFileSystemDirectory::get_subdir_count() const { - return subdirs.size(); } EditorFileSystemDirectory *EditorFileSystemDirectory::get_subdir(int p_idx) { - ERR_FAIL_INDEX_V(p_idx, subdirs.size(), nullptr); return subdirs[p_idx]; } int EditorFileSystemDirectory::get_file_count() const { - return files.size(); } String EditorFileSystemDirectory::get_file(int p_idx) const { - ERR_FAIL_INDEX_V(p_idx, files.size(), ""); return files[p_idx]->file; } String EditorFileSystemDirectory::get_path() const { - String p; const EditorFileSystemDirectory *d = this; while (d->parent) { @@ -104,7 +99,6 @@ String EditorFileSystemDirectory::get_path() const { } String EditorFileSystemDirectory::get_file_path(int p_idx) const { - String file = get_file(p_idx); const EditorFileSystemDirectory *d = this; while (d->parent) { @@ -116,13 +110,11 @@ String EditorFileSystemDirectory::get_file_path(int p_idx) const { } Vector<String> EditorFileSystemDirectory::get_file_deps(int p_idx) const { - ERR_FAIL_INDEX_V(p_idx, files.size(), Vector<String>()); 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; } @@ -140,23 +132,19 @@ String EditorFileSystemDirectory::get_file_script_class_icon_path(int p_idx) con } StringName EditorFileSystemDirectory::get_file_type(int p_idx) const { - ERR_FAIL_INDEX_V(p_idx, files.size(), ""); return files[p_idx]->type; } String EditorFileSystemDirectory::get_name() { - return name; } EditorFileSystemDirectory *EditorFileSystemDirectory::get_parent() { - return parent; } void EditorFileSystemDirectory::_bind_methods() { - ClassDB::bind_method(D_METHOD("get_subdir_count"), &EditorFileSystemDirectory::get_subdir_count); ClassDB::bind_method(D_METHOD("get_subdir", "idx"), &EditorFileSystemDirectory::get_subdir); ClassDB::bind_method(D_METHOD("get_file_count"), &EditorFileSystemDirectory::get_file_count); @@ -174,27 +162,22 @@ void EditorFileSystemDirectory::_bind_methods() { } EditorFileSystemDirectory::EditorFileSystemDirectory() { - modified_time = 0; parent = nullptr; verified = false; } EditorFileSystemDirectory::~EditorFileSystemDirectory() { - for (int i = 0; i < files.size(); i++) { - memdelete(files[i]); } for (int i = 0; i < subdirs.size(); i++) { - memdelete(subdirs[i]); } } void EditorFileSystem::_scan_filesystem() { - ERR_FAIL_COND(!scanning || new_filesystem); //read .fscache @@ -212,7 +195,6 @@ void EditorFileSystem::_scan_filesystem() { if (f) { //read the disk cache while (!f->eof_reached()) { - String l = f->get_line().strip_edges(); if (first) { if (first_scan) { @@ -229,8 +211,9 @@ void EditorFileSystem::_scan_filesystem() { first = false; continue; } - if (l == String()) + if (l == String()) { continue; + } if (l.begins_with("::")) { Vector<String> split = l.split("::"); @@ -282,7 +265,6 @@ void EditorFileSystem::_scan_filesystem() { FileAccessRef f2 = FileAccess::open(update_cache, FileAccess::READ); String l = f2->get_line().strip_edges(); while (l != String()) { - file_cache.erase(l); //erase cache for this, so it gets updated l = f2->get_line().strip_edges(); } @@ -319,7 +301,6 @@ void EditorFileSystem::_scan_filesystem() { } void EditorFileSystem::_save_filesystem_cache() { - group_file_cache.clear(); String fscache = EditorSettings::get_singleton()->get_project_settings_dir().plus_file(CACHE_FILE_NAME); @@ -334,15 +315,14 @@ void EditorFileSystem::_save_filesystem_cache() { } void EditorFileSystem::_thread_func(void *_userdata) { - EditorFileSystem *sd = (EditorFileSystem *)_userdata; sd->_scan_filesystem(); } bool EditorFileSystem::_test_for_reimport(const String &p_path, bool p_only_imported_files) { - - if (!reimport_on_missing_imported_files && p_only_imported_files) + if (!reimport_on_missing_imported_files && p_only_imported_files) { return false; + } if (!FileAccess::exists(p_path + ".import")) { return true; @@ -378,7 +358,6 @@ bool EditorFileSystem::_test_for_reimport(const String &p_path, bool p_only_impo String dest_md5 = ""; while (true) { - assign = Variant(); next_tag.fields.clear(); next_tag.name = String(); @@ -460,7 +439,6 @@ bool EditorFileSystem::_test_for_reimport(const String &p_path, bool p_only_impo //check source md5 matching if (!p_only_imported_files) { - if (source_file != String() && source_file != p_path) { return true; //file was moved, reimport } @@ -486,7 +464,6 @@ bool EditorFileSystem::_test_for_reimport(const String &p_path, bool p_only_impo } bool EditorFileSystem::_update_scan_actions() { - sources_changed.clear(); bool fs_changed = false; @@ -495,20 +472,17 @@ bool EditorFileSystem::_update_scan_actions() { Vector<String> reloads; for (List<ItemAction>::Element *E = scan_actions.front(); E; E = E->next()) { - ItemAction &ia = E->get(); switch (ia.action) { case ItemAction::ACTION_NONE: { - } break; case ItemAction::ACTION_DIR_ADD: { - int idx = 0; for (int i = 0; i < ia.dir->subdirs.size(); i++) { - - if (ia.new_dir->name < ia.dir->subdirs[i]->name) + if (ia.new_dir->name < ia.dir->subdirs[i]->name) { break; + } idx++; } if (idx == ia.dir->subdirs.size()) { @@ -520,19 +494,17 @@ bool EditorFileSystem::_update_scan_actions() { fs_changed = true; } break; case ItemAction::ACTION_DIR_REMOVE: { - ERR_CONTINUE(!ia.dir->parent); ia.dir->parent->subdirs.erase(ia.dir); memdelete(ia.dir); fs_changed = true; } break; case ItemAction::ACTION_FILE_ADD: { - int idx = 0; for (int i = 0; i < ia.dir->files.size(); i++) { - - if (ia.new_file->file < ia.dir->files[i]->file) + if (ia.new_file->file < ia.dir->files[i]->file) { break; + } idx++; } if (idx == ia.dir->files.size()) { @@ -545,7 +517,6 @@ bool EditorFileSystem::_update_scan_actions() { } break; case ItemAction::ACTION_FILE_REMOVE: { - int idx = ia.dir->find_file_index(ia.file); ERR_CONTINUE(idx == -1); _delete_internal_files(ia.dir->files[idx]->file); @@ -556,7 +527,6 @@ bool EditorFileSystem::_update_scan_actions() { } break; case ItemAction::ACTION_FILE_TEST_REIMPORT: { - int idx = ia.dir->find_file_index(ia.file); ERR_CONTINUE(idx == -1); String full_path = ia.dir->get_file_path(idx); @@ -573,7 +543,6 @@ bool EditorFileSystem::_update_scan_actions() { fs_changed = true; } break; case ItemAction::ACTION_FILE_RELOAD: { - int idx = ia.dir->find_file_index(ia.file); ERR_CONTINUE(idx == -1); String full_path = ia.dir->get_file_path(idx); @@ -604,12 +573,13 @@ bool EditorFileSystem::_update_scan_actions() { } void EditorFileSystem::scan() { - - if (false /*&& bool(Globals::get_singleton()->get("debug/disable_scan"))*/) + if (false /*&& bool(Globals::get_singleton()->get("debug/disable_scan"))*/) { return; + } - if (scanning || scanning_changes || thread) + if (scanning || scanning_changes || thread) { return; + } _update_extensions(); @@ -618,8 +588,9 @@ void EditorFileSystem::scan() { scanning = true; scan_total = 0; _scan_filesystem(); - if (filesystem) + if (filesystem) { memdelete(filesystem); + } //file_type_cache.clear(); filesystem = new_filesystem; new_filesystem = nullptr; @@ -630,7 +601,6 @@ void EditorFileSystem::scan() { _queue_update_script_classes(); first_scan = false; } else { - ERR_FAIL_COND(thread); set_process(true); Thread::Settings s; @@ -644,14 +614,12 @@ void EditorFileSystem::scan() { } void EditorFileSystem::ScanProgress::update(int p_current, int p_total) const { - float ratio = low + ((hi - low) / p_total) * p_current; progress->step(ratio * 1000); EditorFileSystem::singleton->scan_total = ratio; } EditorFileSystem::ScanProgress EditorFileSystem::ScanProgress::get_sub(int p_current, int p_total) const { - ScanProgress sp = *this; float slice = (sp.hi - sp.low) / p_total; sp.low += slice * p_current; @@ -660,7 +628,6 @@ EditorFileSystem::ScanProgress EditorFileSystem::ScanProgress::get_sub(int p_cur } void EditorFileSystem::_scan_new_dir(EditorFileSystemDirectory *p_dir, DirAccess *da, const ScanProgress &p_progress) { - List<String> dirs; List<String> files; @@ -670,28 +637,30 @@ void EditorFileSystem::_scan_new_dir(EditorFileSystemDirectory *p_dir, DirAccess da->list_dir_begin(); while (true) { - String f = da->get_next(); - if (f == "") + if (f == "") { break; + } - if (da->current_is_hidden()) + if (da->current_is_hidden()) { continue; + } if (da->current_is_dir()) { - - if (f.begins_with(".")) // Ignore special and . / .. + if (f.begins_with(".")) { // Ignore special and . / .. continue; + } - if (FileAccess::exists(cd.plus_file(f).plus_file("project.godot"))) // skip if another project inside this + if (FileAccess::exists(cd.plus_file(f).plus_file("project.godot"))) { // skip if another project inside this continue; - if (FileAccess::exists(cd.plus_file(f).plus_file(".gdignore"))) // skip if another project inside this + } + if (FileAccess::exists(cd.plus_file(f).plus_file(".gdignore"))) { // skip if another project inside this continue; + } dirs.push_back(f); } else { - files.push_back(f); } } @@ -705,15 +674,12 @@ void EditorFileSystem::_scan_new_dir(EditorFileSystemDirectory *p_dir, DirAccess int idx = 0; for (List<String>::Element *E = dirs.front(); E; E = E->next(), idx++) { - if (da->change_dir(E->get()) == OK) { - String d = da->get_current_dir(); if (d == cd || !d.begins_with(cd)) { da->change_dir(cd); //avoid recursion } else { - EditorFileSystemDirectory *efd = memnew(EditorFileSystemDirectory); efd->parent = p_dir; @@ -723,9 +689,9 @@ void EditorFileSystem::_scan_new_dir(EditorFileSystemDirectory *p_dir, DirAccess int idx2 = 0; for (int i = 0; i < p_dir->subdirs.size(); i++) { - - if (efd->name < p_dir->subdirs[i]->name) + if (efd->name < p_dir->subdirs[i]->name) { break; + } idx2++; } if (idx2 == p_dir->subdirs.size()) { @@ -744,7 +710,6 @@ void EditorFileSystem::_scan_new_dir(EditorFileSystemDirectory *p_dir, DirAccess } for (List<String>::Element *E = files.front(); E; E = E->next(), idx++) { - String ext = E->get().get_extension().to_lower(); if (!valid_extensions.has(ext)) { continue; //invalid @@ -759,7 +724,6 @@ void EditorFileSystem::_scan_new_dir(EditorFileSystemDirectory *p_dir, DirAccess uint64_t mt = FileAccess::get_modified_time(path); if (import_extensions.has(ext)) { - //is imported uint64_t import_mt = 0; if (FileAccess::exists(path + ".import")) { @@ -767,7 +731,6 @@ void EditorFileSystem::_scan_new_dir(EditorFileSystemDirectory *p_dir, DirAccess } if (fc && fc->modification_time == mt && fc->import_modification_time == import_mt && !_test_for_reimport(path, true)) { - fi->type = fc->type; fi->deps = fc->deps; fi->modified_time = fc->modification_time; @@ -795,7 +758,6 @@ void EditorFileSystem::_scan_new_dir(EditorFileSystemDirectory *p_dir, DirAccess } } else { - fi->type = ResourceFormatImporter::get_singleton()->get_resource_type(path); fi->import_group_file = ResourceFormatImporter::get_singleton()->get_import_group_file(path); fi->script_class_name = _get_global_script_class(fi->type, path, &fi->script_class_extends, &fi->script_class_icon_path); @@ -810,7 +772,6 @@ void EditorFileSystem::_scan_new_dir(EditorFileSystemDirectory *p_dir, DirAccess scan_actions.push_back(ia); } } else { - if (fc && fc->modification_time == mt) { //not imported, so just update type if changed fi->type = fc->type; @@ -838,14 +799,12 @@ void EditorFileSystem::_scan_new_dir(EditorFileSystemDirectory *p_dir, DirAccess } void EditorFileSystem::_scan_fs_changes(EditorFileSystemDirectory *p_dir, const ScanProgress &p_progress) { - uint64_t current_mtime = FileAccess::get_modified_time(p_dir->get_path()); bool updated_dir = false; String cd = p_dir->get_path(); if (current_mtime != p_dir->modified_time || using_fat32_or_exfat) { - updated_dir = true; p_dir->modified_time = current_mtime; //ooooops, dir changed, see what's going on @@ -853,12 +812,10 @@ void EditorFileSystem::_scan_fs_changes(EditorFileSystemDirectory *p_dir, const //first mark everything as veryfied for (int i = 0; i < p_dir->files.size(); i++) { - p_dir->files[i]->verified = false; } for (int i = 0; i < p_dir->subdirs.size(); i++) { - p_dir->get_subdir(i)->verified = false; } @@ -869,26 +826,28 @@ void EditorFileSystem::_scan_fs_changes(EditorFileSystemDirectory *p_dir, const da->change_dir(cd); da->list_dir_begin(); while (true) { - String f = da->get_next(); - if (f == "") + if (f == "") { break; + } - if (da->current_is_hidden()) + if (da->current_is_hidden()) { continue; + } if (da->current_is_dir()) { - - if (f.begins_with(".")) // Ignore special and . / .. + if (f.begins_with(".")) { // Ignore special and . / .. continue; + } int idx = p_dir->find_dir_index(f); if (idx == -1) { - - if (FileAccess::exists(cd.plus_file(f).plus_file("project.godot"))) // skip if another project inside this + if (FileAccess::exists(cd.plus_file(f).plus_file("project.godot"))) { // skip if another project inside this continue; - if (FileAccess::exists(cd.plus_file(f).plus_file(".gdignore"))) // skip if another project inside this + } + if (FileAccess::exists(cd.plus_file(f).plus_file(".gdignore"))) { // skip if another project inside this continue; + } EditorFileSystemDirectory *efd = memnew(EditorFileSystemDirectory); @@ -911,8 +870,9 @@ void EditorFileSystem::_scan_fs_changes(EditorFileSystemDirectory *p_dir, const } else { String ext = f.get_extension().to_lower(); - if (!valid_extensions.has(ext)) + if (!valid_extensions.has(ext)) { continue; //invalid + } int idx = p_dir->find_file_index(f); @@ -958,7 +918,6 @@ void EditorFileSystem::_scan_fs_changes(EditorFileSystemDirectory *p_dir, const } for (int i = 0; i < p_dir->files.size(); i++) { - if (updated_dir && !p_dir->files[i]->verified) { //this file was removed, add action to remove it ItemAction ia; @@ -983,7 +942,6 @@ void EditorFileSystem::_scan_fs_changes(EditorFileSystemDirectory *p_dir, const } else if (!FileAccess::exists(path + ".import")) { reimport = true; //no .import file, obviously reimport } else { - uint64_t import_mt = FileAccess::get_modified_time(path + ".import"); if (import_mt != p_dir->files[i]->import_modified_time) { reimport = true; @@ -993,7 +951,6 @@ void EditorFileSystem::_scan_fs_changes(EditorFileSystemDirectory *p_dir, const } if (reimport) { - ItemAction ia; ia.action = ItemAction::ACTION_FILE_TEST_REIMPORT; ia.dir = p_dir; @@ -1005,7 +962,6 @@ void EditorFileSystem::_scan_fs_changes(EditorFileSystemDirectory *p_dir, const uint64_t mt = FileAccess::get_modified_time(path); if (mt != p_dir->files[i]->modified_time) { - p_dir->files[i]->modified_time = mt; //save new time, but test for reload ItemAction ia; @@ -1018,7 +974,6 @@ void EditorFileSystem::_scan_fs_changes(EditorFileSystemDirectory *p_dir, const } for (int i = 0; i < p_dir->subdirs.size(); i++) { - if (updated_dir && !p_dir->subdirs[i]->verified) { //this directory was removed, add action to remove it ItemAction ia; @@ -1045,7 +1000,6 @@ void EditorFileSystem::_delete_internal_files(String p_file) { } void EditorFileSystem::_thread_func_sources(void *_userdata) { - EditorFileSystem *efs = (EditorFileSystem *)_userdata; if (efs->filesystem) { EditorProgressBG pr("sources", TTR("ScanSources"), 1000); @@ -1059,12 +1013,10 @@ void EditorFileSystem::_thread_func_sources(void *_userdata) { } void EditorFileSystem::get_changed_sources(List<String> *r_changed) { - *r_changed = sources_changed; } void EditorFileSystem::scan_changes() { - if (first_scan || // Prevent a premature changes scan from inhibiting the first full scan scanning || scanning_changes || thread) { scan_changes_pending = true; @@ -1088,14 +1040,14 @@ void EditorFileSystem::scan_changes() { sp.low = 0; scan_total = 0; _scan_fs_changes(filesystem, sp); - if (_update_scan_actions()) + if (_update_scan_actions()) { emit_signal("filesystem_changed"); + } } scanning_changes = false; scanning_changes_done = true; emit_signal("sources_changed", sources_changed.size() > 0); } else { - ERR_FAIL_COND(thread_sources); set_process(true); scan_total = 0; @@ -1106,11 +1058,8 @@ void EditorFileSystem::scan_changes() { } void EditorFileSystem::_notification(int p_what) { - switch (p_what) { - case NOTIFICATION_ENTER_TREE: { - call_deferred("scan"); //this should happen after every editor node entered the tree } break; @@ -1130,22 +1079,20 @@ void EditorFileSystem::_notification(int p_what) { set_process(false); } - if (filesystem) + if (filesystem) { memdelete(filesystem); - if (new_filesystem) + } + if (new_filesystem) { memdelete(new_filesystem); + } filesystem = nullptr; new_filesystem = nullptr; } break; case NOTIFICATION_PROCESS: { - if (use_threads) { - if (scanning_changes) { - if (scanning_changes_done) { - scanning_changes = false; set_process(false); @@ -1153,18 +1100,19 @@ void EditorFileSystem::_notification(int p_what) { Thread::wait_to_finish(thread_sources); memdelete(thread_sources); thread_sources = nullptr; - if (_update_scan_actions()) + if (_update_scan_actions()) { emit_signal("filesystem_changed"); + } emit_signal("sources_changed", sources_changed.size() > 0); _queue_update_script_classes(); first_scan = false; } } else if (!scanning) { - set_process(false); - if (filesystem) + if (filesystem) { memdelete(filesystem); + } filesystem = new_filesystem; new_filesystem = nullptr; Thread::wait_to_finish(thread); @@ -1187,36 +1135,33 @@ void EditorFileSystem::_notification(int p_what) { } bool EditorFileSystem::is_scanning() const { - return scanning || scanning_changes; } -float EditorFileSystem::get_scanning_progress() const { +float EditorFileSystem::get_scanning_progress() const { return scan_total; } EditorFileSystemDirectory *EditorFileSystem::get_filesystem() { - return filesystem; } void EditorFileSystem::_save_filesystem_cache(EditorFileSystemDirectory *p_dir, FileAccess *p_file) { - - if (!p_dir) + if (!p_dir) { return; //none + } p_file->store_line("::" + p_dir->get_path() + "::" + String::num(p_dir->modified_time)); for (int i = 0; i < p_dir->files.size(); i++) { - if (p_dir->files[i]->import_group_file != String()) { group_file_cache.insert(p_dir->files[i]->import_group_file); } 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) + "::" + p_dir->files[i]->import_group_file + "::" + p_dir->files[i]->script_class_name + "<>" + p_dir->files[i]->script_class_extends + "<>" + p_dir->files[i]->script_class_icon_path; s += "::"; for (int j = 0; j < p_dir->files[i]->deps.size(); j++) { - - if (j > 0) + if (j > 0) { s += "<>"; + } s += p_dir->files[i]->deps[j]; } @@ -1224,7 +1169,6 @@ void EditorFileSystem::_save_filesystem_cache(EditorFileSystemDirectory *p_dir, } for (int i = 0; i < p_dir->subdirs.size(); i++) { - _save_filesystem_cache(p_dir->subdirs[i], p_file); } } @@ -1232,33 +1176,35 @@ void EditorFileSystem::_save_filesystem_cache(EditorFileSystemDirectory *p_dir, bool EditorFileSystem::_find_file(const String &p_file, EditorFileSystemDirectory **r_d, int &r_file_pos) const { //todo make faster - if (!filesystem || scanning) + if (!filesystem || scanning) { return false; + } String f = ProjectSettings::get_singleton()->localize_path(p_file); - if (!f.begins_with("res://")) + if (!f.begins_with("res://")) { return false; + } f = f.substr(6, f.length()); f = f.replace("\\", "/"); Vector<String> path = f.split("/"); - if (path.size() == 0) + if (path.size() == 0) { return false; + } String file = path[path.size() - 1]; path.resize(path.size() - 1); EditorFileSystemDirectory *fs = filesystem; for (int i = 0; i < path.size(); i++) { - - if (path[i].begins_with(".")) + if (path[i].begins_with(".")) { return false; + } int idx = -1; for (int j = 0; j < fs->get_subdir_count(); j++) { - if (fs->get_subdir(j)->get_name() == path[i]) { idx = j; break; @@ -1274,26 +1220,25 @@ bool EditorFileSystem::_find_file(const String &p_file, EditorFileSystemDirector int idx2 = 0; for (int j = 0; j < fs->get_subdir_count(); j++) { - - if (efsd->name < fs->get_subdir(j)->get_name()) + if (efsd->name < fs->get_subdir(j)->get_name()) { break; + } idx2++; } - if (idx2 == fs->get_subdir_count()) + if (idx2 == fs->get_subdir_count()) { fs->subdirs.push_back(efsd); - else + } else { fs->subdirs.insert(idx2, efsd); + } fs = efsd; } else { - fs = fs->get_subdir(idx); } } int cpos = -1; for (int i = 0; i < fs->files.size(); i++) { - if (fs->files[i]->file == file) { cpos = i; break; @@ -1307,12 +1252,10 @@ bool EditorFileSystem::_find_file(const String &p_file, EditorFileSystemDirector } String EditorFileSystem::get_file_type(const String &p_file) const { - EditorFileSystemDirectory *fs = nullptr; int cpos = -1; if (!_find_file(p_file, &fs, cpos)) { - return ""; } @@ -1320,53 +1263,55 @@ String EditorFileSystem::get_file_type(const String &p_file) const { } EditorFileSystemDirectory *EditorFileSystem::find_file(const String &p_file, int *r_index) const { - - if (!filesystem || scanning) + if (!filesystem || scanning) { return nullptr; + } EditorFileSystemDirectory *fs = nullptr; int cpos = -1; if (!_find_file(p_file, &fs, cpos)) { - return nullptr; } - if (r_index) + if (r_index) { *r_index = cpos; + } return fs; } EditorFileSystemDirectory *EditorFileSystem::get_filesystem_path(const String &p_path) { - - if (!filesystem || scanning) + if (!filesystem || scanning) { return nullptr; + } String f = ProjectSettings::get_singleton()->localize_path(p_path); - if (!f.begins_with("res://")) + if (!f.begins_with("res://")) { return nullptr; + } f = f.substr(6, f.length()); f = f.replace("\\", "/"); - if (f == String()) + if (f == String()) { return filesystem; + } - if (f.ends_with("/")) + if (f.ends_with("/")) { f = f.substr(0, f.length() - 1); + } Vector<String> path = f.split("/"); - if (path.size() == 0) + if (path.size() == 0) { return nullptr; + } EditorFileSystemDirectory *fs = filesystem; for (int i = 0; i < path.size(); i++) { - int idx = -1; for (int j = 0; j < fs->get_subdir_count(); j++) { - if (fs->get_subdir(j)->get_name() == path[i]) { idx = j; break; @@ -1376,7 +1321,6 @@ EditorFileSystemDirectory *EditorFileSystem::get_filesystem_path(const String &p if (idx == -1) { return nullptr; } else { - fs = fs->get_subdir(idx); } } @@ -1395,7 +1339,6 @@ void EditorFileSystem::_save_late_updated_files() { } Vector<String> EditorFileSystem::_get_dependencies(const String &p_path) { - List<String> deps; ResourceLoader::get_dependencies(p_path, &deps); @@ -1408,7 +1351,6 @@ Vector<String> EditorFileSystem::_get_dependencies(const String &p_path) { } String EditorFileSystem::_get_global_script_class(const String &p_type, const String &p_path, String *r_extends, String *r_icon_path) const { - for (int i = 0; i < ScriptServer::get_language_count(); i++) { if (ScriptServer::get_language(i)->handles_global_class_type(p_type)) { String global_name; @@ -1450,9 +1392,9 @@ void EditorFileSystem::_scan_script_classes(EditorFileSystemDirectory *p_dir) { } void EditorFileSystem::update_script_classes() { - - if (!update_script_classes_queued) + if (!update_script_classes_queued) { return; + } update_script_classes_queued = false; ScriptServer::global_classes_clear(); @@ -1482,14 +1424,13 @@ void EditorFileSystem::_queue_update_script_classes() { } void EditorFileSystem::update_file(const String &p_file) { - EditorFileSystemDirectory *fs = nullptr; int cpos = -1; if (!_find_file(p_file, &fs, cpos)) { - - if (!fs) + if (!fs) { return; + } } if (!FileAccess::exists(p_file)) { @@ -1508,15 +1449,15 @@ void EditorFileSystem::update_file(const String &p_file) { String type = ResourceLoader::get_resource_type(p_file); if (cpos == -1) { - //the file did not exist, it was added late_added_files.insert(p_file); //remember that it was added. This mean it will be scanned and imported on editor restart int idx = 0; for (int i = 0; i < fs->files.size(); i++) { - if (p_file < fs->files[i]->file) + if (p_file < fs->files[i]->file) { break; + } idx++; } @@ -1528,12 +1469,10 @@ void EditorFileSystem::update_file(const String &p_file) { if (idx == fs->files.size()) { fs->files.push_back(fi); } else { - fs->files.insert(idx, fi); } cpos = idx; } else { - //the file exists and it was updated, and was not added in this step. //this means we must force upon next restart to scan it again, to get proper type and dependencies late_update_files.insert(p_file); @@ -1555,13 +1494,11 @@ void EditorFileSystem::update_file(const String &p_file) { } Error EditorFileSystem::_reimport_group(const String &p_group_file, const Vector<String> &p_files) { - String importer_name; Map<String, Map<StringName, Variant>> source_file_options; Map<String, String> base_paths; for (int i = 0; i < p_files.size(); i++) { - Ref<ConfigFile> config; config.instance(); Error err = config->load(p_files[i] + ".import"); @@ -1585,7 +1522,6 @@ Error EditorFileSystem::_reimport_group(const String &p_group_file, const Vector importer->get_import_options(&options); //set default values for (List<ResourceImporter::ImportOption>::Element *E = options.front(); E; E = E->next()) { - source_file_options[p_files[i]][E->get().option.name] = E->get().default_value; } @@ -1611,7 +1547,6 @@ Error EditorFileSystem::_reimport_group(const String &p_group_file, const Vector //all went well, overwrite config files with proper remaps and md5s for (Map<String, Map<StringName, Variant>>::Element *E = source_file_options.front(); E; E = E->next()) { - const String &file = E->key(); String base_path = ResourceFormatImporter::get_singleton()->get_import_base_path(file); FileAccessRef f = FileAccess::open(file + ".import", FileAccess::WRITE); @@ -1661,7 +1596,6 @@ Error EditorFileSystem::_reimport_group(const String &p_group_file, const Vector importer->get_import_options(&options); //set default values for (List<ResourceImporter::ImportOption>::Element *F = options.front(); F; F = F->next()) { - String base = F->get().option.name; Variant v = F->get().default_value; if (source_file_options[file].has(base)) { @@ -1699,11 +1633,9 @@ Error EditorFileSystem::_reimport_group(const String &p_group_file, const Vector //if file is currently up, maybe the source it was loaded from changed, so import math must be updated for it //to reload properly if (ResourceCache::has(file)) { - Resource *r = ResourceCache::get(file); if (r->get_import_path() != String()) { - String dst_path = ResourceFormatImporter::get_singleton()->get_internal_resource_path(file); r->set_import_path(dst_path); r->set_import_last_modified_time(0); @@ -1717,7 +1649,6 @@ Error EditorFileSystem::_reimport_group(const String &p_group_file, const Vector } void EditorFileSystem::_reimport_file(const String &p_file) { - EditorFileSystemDirectory *fs = nullptr; int cpos = -1; bool found = _find_file(p_file, &fs, cpos); @@ -1816,13 +1747,11 @@ void EditorFileSystem::_reimport_file(const String &p_file) { Vector<String> dest_paths; 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(); f->store_line("path." + E->get() + "=\"" + path + "\""); @@ -1835,7 +1764,6 @@ void EditorFileSystem::_reimport_file(const String &p_file) { } } else { - f->store_line("valid=false"); } @@ -1876,7 +1804,6 @@ void EditorFileSystem::_reimport_file(const String &p_file) { //store options in provided order, to avoid file changing. Order is also important because first match is accepted first. for (List<ResourceImporter::ImportOption>::Element *E = opts.front(); E; E = E->next()) { - String base = E->get().option.name; String value; VariantWriter::write_to_string(params[base], value); @@ -1907,11 +1834,9 @@ void EditorFileSystem::_reimport_file(const String &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 if (ResourceCache::has(p_file)) { - Resource *r = ResourceCache::get(p_file); if (r->get_import_path() != String()) { - String dst_path = ResourceFormatImporter::get_singleton()->get_internal_resource_path(p_file); r->set_import_path(dst_path); r->set_import_last_modified_time(0); @@ -1922,7 +1847,6 @@ void EditorFileSystem::_reimport_file(const String &p_file) { } void EditorFileSystem::_find_group_files(EditorFileSystemDirectory *efd, Map<String, Vector<String>> &group_files, Set<String> &groups_to_reimport) { - int fc = efd->files.size(); const EditorFileSystemDirectory::FileInfo *const *files = efd->files.ptr(); for (int i = 0; i < fc; i++) { @@ -1940,7 +1864,6 @@ void EditorFileSystem::_find_group_files(EditorFileSystemDirectory *efd, Map<Str } void EditorFileSystem::reimport_files(const Vector<String> &p_files) { - { //check that .import folder exists DirAccess *da = DirAccess::open("res://"); if (da->change_dir(".import") != OK) { @@ -1960,7 +1883,6 @@ void EditorFileSystem::reimport_files(const Vector<String> &p_files) { Set<String> groups_to_reimport; for (int i = 0; i < p_files.size(); i++) { - String group_file = ResourceFormatImporter::get_singleton()->get_import_group_file(p_files[i]); if (group_file_cache.has(p_files[i])) { @@ -1983,7 +1905,6 @@ void EditorFileSystem::reimport_files(const Vector<String> &p_files) { EditorFileSystemDirectory *fs = nullptr; int cpos = -1; if (_find_file(p_files[i], &fs, cpos)) { - fs->files.write[cpos]->import_group_file = group_file; } } @@ -2001,7 +1922,6 @@ void EditorFileSystem::reimport_files(const Vector<String> &p_files) { Map<String, Vector<String>> group_files; _find_group_files(filesystem, group_files, groups_to_reimport); for (Map<String, Vector<String>>::Element *E = group_files.front(); E; E = E->next()) { - Error err = _reimport_group(E->key(), E->get()); if (err == OK) { _reimport_file(E->key()); @@ -2019,7 +1939,6 @@ void EditorFileSystem::reimport_files(const Vector<String> &p_files) { } Error EditorFileSystem::_resource_import(const String &p_path) { - Vector<String> files; files.push_back(p_path); @@ -2034,13 +1953,10 @@ bool EditorFileSystem::is_group_file(const String &p_path) const { } void EditorFileSystem::_move_group_files(EditorFileSystemDirectory *efd, const String &p_group_file, const String &p_new_location) { - int fc = efd->files.size(); EditorFileSystemDirectory::FileInfo *const *files = efd->files.ptrw(); for (int i = 0; i < fc; i++) { - if (files[i]->import_group_file == p_group_file) { - files[i]->import_group_file = p_new_location; Ref<ConfigFile> config; @@ -2051,7 +1967,6 @@ void EditorFileSystem::_move_group_files(EditorFileSystemDirectory *efd, const S continue; } if (config->has_section_key("remap", "group_file")) { - config->set_value("remap", "group_file", p_new_location); } @@ -2076,7 +1991,6 @@ void EditorFileSystem::_move_group_files(EditorFileSystemDirectory *efd, const S } void EditorFileSystem::move_group_file(const String &p_path, const String &p_new_path) { - if (get_filesystem()) { _move_group_files(get_filesystem(), p_path, p_new_path); if (group_file_cache.has(p_path)) { @@ -2087,7 +2001,6 @@ void EditorFileSystem::move_group_file(const String &p_path, const String &p_new } void EditorFileSystem::_bind_methods() { - ClassDB::bind_method(D_METHOD("get_filesystem"), &EditorFileSystem::get_filesystem); ClassDB::bind_method(D_METHOD("is_scanning"), &EditorFileSystem::is_scanning); ClassDB::bind_method(D_METHOD("get_scanning_progress"), &EditorFileSystem::get_scanning_progress); @@ -2105,27 +2018,23 @@ void EditorFileSystem::_bind_methods() { } void EditorFileSystem::_update_extensions() { - valid_extensions.clear(); import_extensions.clear(); List<String> extensionsl; ResourceLoader::get_recognized_extensions_for_type("", &extensionsl); for (List<String>::Element *E = extensionsl.front(); E; E = E->next()) { - valid_extensions.insert(E->get()); } extensionsl.clear(); ResourceFormatImporter::get_singleton()->get_recognized_extensions(&extensionsl); for (List<String>::Element *E = extensionsl.front(); E; E = E->next()) { - import_extensions.insert(E->get()); } } EditorFileSystem::EditorFileSystem() { - ResourceLoader::import = _resource_import; reimport_on_missing_imported_files = GLOBAL_DEF("editor/reimport_missing_imported_files", true); |