Skip to content

Commit

Permalink
Merge pull request #90845 from KoBeWi/best_of_both_worlds
Browse files Browse the repository at this point in the history
Fix folder scan replacing project list
  • Loading branch information
akien-mga committed Apr 18, 2024
2 parents 978d206 + a00527e commit 8d557e5
Show file tree
Hide file tree
Showing 4 changed files with 33 additions and 23 deletions.
11 changes: 4 additions & 7 deletions editor/project_manager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1571,6 +1571,8 @@ ProjectManager::ProjectManager() {

// Initialize project list.
{
project_list->load_project_list();

Ref<DirAccess> dir_access = DirAccess::create(DirAccess::AccessType::ACCESS_FILESYSTEM);

String default_project_path = EDITOR_GET("filesystem/directories/default_project_path");
Expand All @@ -1581,24 +1583,19 @@ ProjectManager::ProjectManager() {
}
}

bool scanned_for_projects = false; // Scanning will update the list automatically.

String autoscan_path = EDITOR_GET("filesystem/directories/autoscan_project_path");
if (!autoscan_path.is_empty()) {
if (dir_access->dir_exists(autoscan_path)) {
project_list->find_projects(autoscan_path);
scanned_for_projects = true;
} else {
Error error = dir_access->make_dir_recursive(autoscan_path);
if (error != OK) {
ERR_PRINT("Could not create project autoscan directory at: " + autoscan_path);
}
}
}

if (!scanned_for_projects) {
project_list->update_project_list();
}
project_list->update_project_list();
initialized = true;
}

// Extend menu bar to window title.
Expand Down
2 changes: 2 additions & 0 deletions editor/project_manager.h
Original file line number Diff line number Diff line change
Expand Up @@ -141,6 +141,7 @@ class ProjectManager : public Control {
void _update_list_placeholder();

ProjectList *project_list = nullptr;
bool initialized = false;

LineEdit *search_box = nullptr;
Label *loading_label = nullptr;
Expand Down Expand Up @@ -239,6 +240,7 @@ class ProjectManager : public Control {

// Project list.

bool is_initialized() const { return initialized; }
LineEdit *get_search_box();

// Project tag management.
Expand Down
42 changes: 26 additions & 16 deletions editor/project_manager/project_list.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -469,23 +469,19 @@ void ProjectList::update_project_list() {
// If you have 150 projects, it may read through 150 files on your disk at once + load 150 icons.
// FIXME: Does it really have to be a full, hard reload? Runtime updates should be made much cheaper.

// Clear whole list
for (int i = 0; i < _projects.size(); ++i) {
Item &project = _projects.write[i];
CRASH_COND(project.control == nullptr);
memdelete(project.control); // Why not queue_free()?
}
_projects.clear();
_last_clicked = "";
_selected_project_paths.clear();
if (ProjectManager::get_singleton()->is_initialized()) {
// Clear whole list
for (int i = 0; i < _projects.size(); ++i) {
Item &project = _projects.write[i];
CRASH_COND(project.control == nullptr);
memdelete(project.control); // Why not queue_free()?
}

List<String> sections;
_config.load(_config_path);
_config.get_sections(&sections);
_projects.clear();
_last_clicked = "";
_selected_project_paths.clear();

for (const String &path : sections) {
bool favorite = _config.get_value(path, "favorite", false);
_projects.push_back(load_project_data(path, favorite));
load_project_list();
}

// Create controls
Expand Down Expand Up @@ -590,7 +586,21 @@ void ProjectList::find_projects_multiple(const PackedStringArray &p_paths) {
}

save_config();
update_project_list();

if (ProjectManager::get_singleton()->is_initialized()) {
update_project_list();
}
}

void ProjectList::load_project_list() {
List<String> sections;
_config.load(_config_path);
_config.get_sections(&sections);

for (const String &path : sections) {
bool favorite = _config.get_value(path, "favorite", false);
_projects.push_back(load_project_data(path, favorite));
}
}

void ProjectList::_scan_folder_recursive(const String &p_path, List<String> *r_projects) {
Expand Down
1 change: 1 addition & 0 deletions editor/project_manager/project_list.h
Original file line number Diff line number Diff line change
Expand Up @@ -220,6 +220,7 @@ class ProjectList : public ScrollContainer {

// Project list updates.

void load_project_list();
void update_project_list();
void sort_projects();
int get_project_count() const;
Expand Down

0 comments on commit 8d557e5

Please sign in to comment.