浏览代码

Account for file deletion and renaming in Export Presets

Ensure that presets are updated with the latest files when
starting up or opening the Project Export dialog. Fixes the
error where Godot would attempt to export deleted files that
were previously selected.

(cherry picked from commit 44094b082d56daa2eab5a8f6c6d73f86d8b18d8b)
Maganty Rushyendra 5 年之前
父节点
当前提交
0efa59bfdc
共有 3 个文件被更改,包括 21 次插入1 次删除
  1. 18 1
      editor/editor_export.cpp
  2. 2 0
      editor/editor_export.h
  3. 1 0
      editor/project_export.cpp

+ 18 - 1
editor/editor_export.cpp

@@ -96,6 +96,19 @@ Ref<EditorExportPlatform> EditorExportPreset::get_platform() const {
 	return platform;
 }
 
+void EditorExportPreset::update_files_to_export() {
+	Vector<String> to_remove;
+	for (Set<String>::Element *E = selected_files.front(); E; E = E->next()) {
+		if (!FileAccess::exists(E->get())) {
+			to_remove.push_back(E->get());
+		}
+	}
+	for (int i = 0; i < to_remove.size(); ++i) {
+		selected_files.erase(to_remove[i]);
+	}
+	EditorExport::singleton->save_presets();
+}
+
 Vector<String> EditorExportPreset::get_files_to_export() const {
 
 	Vector<String> files;
@@ -1382,7 +1395,11 @@ void EditorExport::load_config() {
 			Vector<String> files = config->get_value(section, "export_files");
 
 			for (int i = 0; i < files.size(); i++) {
-				preset->add_export_file(files[i]);
+				if (!FileAccess::exists(files[i])) {
+					preset->remove_export_file(files[i]);
+				} else {
+					preset->add_export_file(files[i]);
+				}
 			}
 		}
 

+ 2 - 0
editor/editor_export.h

@@ -95,6 +95,8 @@ public:
 
 	bool has(const StringName &p_property) const { return values.has(p_property); }
 
+	void update_files_to_export();
+
 	Vector<String> get_files_to_export() const;
 
 	void add_export_file(const String &p_path);

+ 1 - 0
editor/project_export.cpp

@@ -161,6 +161,7 @@ void ProjectExportDialog::_update_presets() {
 		String name = preset->get_name();
 		if (preset->is_runnable())
 			name += " (" + TTR("Runnable") + ")";
+		preset->update_files_to_export();
 		presets->add_item(name, preset->get_platform()->get_logo());
 	}