Improve performance of imported file scan
This commit is contained in:
parent
cd3e03432a
commit
2cfab94fef
@ -2890,12 +2890,19 @@ void FileSystemDock::_file_list_gui_input(Ref<InputEvent> p_event) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void FileSystemDock::_get_imported_files(const String &p_path, Vector<String> &r_files) const {
|
bool FileSystemDock::_get_imported_files(const String &p_path, String &r_extension, Vector<String> &r_files) const {
|
||||||
if (!p_path.ends_with("/")) {
|
if (!p_path.ends_with("/")) {
|
||||||
if (FileAccess::exists(p_path + ".import")) {
|
if (FileAccess::exists(p_path + ".import")) {
|
||||||
|
if (r_extension.is_empty()) {
|
||||||
|
r_extension = p_path.get_extension();
|
||||||
|
} else if (r_extension != p_path.get_extension()) {
|
||||||
|
r_files.clear();
|
||||||
|
return false; // File type mismatch, stop search.
|
||||||
|
}
|
||||||
|
|
||||||
r_files.push_back(p_path);
|
r_files.push_back(p_path);
|
||||||
}
|
}
|
||||||
return;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
Ref<DirAccess> da = DirAccess::open(p_path);
|
Ref<DirAccess> da = DirAccess::open(p_path);
|
||||||
@ -2904,11 +2911,14 @@ void FileSystemDock::_get_imported_files(const String &p_path, Vector<String> &r
|
|||||||
while (!n.is_empty()) {
|
while (!n.is_empty()) {
|
||||||
if (n != "." && n != ".." && !n.ends_with(".import")) {
|
if (n != "." && n != ".." && !n.ends_with(".import")) {
|
||||||
String npath = p_path + n + (da->current_is_dir() ? "/" : "");
|
String npath = p_path + n + (da->current_is_dir() ? "/" : "");
|
||||||
_get_imported_files(npath, r_files);
|
if (!_get_imported_files(npath, r_extension, r_files)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
n = da->get_next();
|
n = da->get_next();
|
||||||
}
|
}
|
||||||
da->list_dir_end();
|
da->list_dir_end();
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void FileSystemDock::_update_import_dock() {
|
void FileSystemDock::_update_import_dock() {
|
||||||
@ -2933,10 +2943,16 @@ void FileSystemDock::_update_import_dock() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Expand directory selection
|
if (!selected.is_empty() && selected[0] == "res://") {
|
||||||
|
// Scanning res:// is costly and unlikely to yield any useful results.
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Expand directory selection.
|
||||||
Vector<String> efiles;
|
Vector<String> efiles;
|
||||||
for (int i = 0; i < selected.size(); i++) {
|
String extension;
|
||||||
_get_imported_files(selected[i], efiles);
|
for (const String &fpath : selected) {
|
||||||
|
_get_imported_files(fpath, extension, efiles);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check import.
|
// Check import.
|
||||||
|
@ -213,7 +213,7 @@ private:
|
|||||||
void _file_multi_selected(int p_index, bool p_selected);
|
void _file_multi_selected(int p_index, bool p_selected);
|
||||||
void _tree_multi_selected(Object *p_item, int p_column, bool p_selected);
|
void _tree_multi_selected(Object *p_item, int p_column, bool p_selected);
|
||||||
|
|
||||||
void _get_imported_files(const String &p_path, Vector<String> &r_files) const;
|
bool _get_imported_files(const String &p_path, String &r_extension, Vector<String> &r_files) const;
|
||||||
void _update_import_dock();
|
void _update_import_dock();
|
||||||
|
|
||||||
void _get_all_items_in_dir(EditorFileSystemDirectory *p_efsd, Vector<String> &r_files, Vector<String> &r_folders) const;
|
void _get_all_items_in_dir(EditorFileSystemDirectory *p_efsd, Vector<String> &r_files, Vector<String> &r_folders) const;
|
||||||
|
Loading…
Reference in New Issue
Block a user