GDNative: Save singletons only if there's a change

Ensures that the Project Settings are saved only if the list of
singletons actually changed.
This commit is contained in:
George Marques 2017-12-05 00:21:04 -02:00
parent 055c5600c8
commit 6af42c536a
No known key found for this signature in database
GPG Key ID: 046BD46A3201E43D
1 changed files with 20 additions and 2 deletions

View File

@ -103,17 +103,35 @@ static void actual_discoverer_handler() {
Set<String> file_paths = get_gdnative_singletons(dir); Set<String> file_paths = get_gdnative_singletons(dir);
bool changed = false;
Array current_files = ProjectSettings::get_singleton()->get("gdnative/singletons");
Array files; Array files;
files.resize(file_paths.size()); files.resize(file_paths.size());
int i = 0; int i = 0;
for (Set<String>::Element *E = file_paths.front(); E; i++, E = E->next()) { for (Set<String>::Element *E = file_paths.front(); E; i++, E = E->next()) {
if (!current_files.has(E->get())) {
changed = true;
}
files.set(i, E->get()); files.set(i, E->get());
} }
// Check for removed files
if (!changed) {
for (int i = 0; i < current_files.size(); i++) {
if (!file_paths.has(current_files[i])) {
changed = true;
break;
}
}
}
if (changed) {
ProjectSettings::get_singleton()->set("gdnative/singletons", files); ProjectSettings::get_singleton()->set("gdnative/singletons", files);
ProjectSettings::get_singleton()->save(); ProjectSettings::get_singleton()->save();
} }
}
static GDNativeSingletonDiscover *discoverer = NULL; static GDNativeSingletonDiscover *discoverer = NULL;