Merge pull request #61820 from pfertyk/issue-61604-is-plugin-enabled-by-name
This commit is contained in:
commit
ac9cfd0c2d
|
@ -3299,33 +3299,39 @@ void EditorNode::_update_addon_config() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void EditorNode::set_addon_plugin_enabled(const String &p_addon, bool p_enabled, bool p_config_changed) {
|
void EditorNode::set_addon_plugin_enabled(const String &p_addon, bool p_enabled, bool p_config_changed) {
|
||||||
ERR_FAIL_COND(p_enabled && addon_name_to_plugin.has(p_addon));
|
String addon_path = p_addon;
|
||||||
ERR_FAIL_COND(!p_enabled && !addon_name_to_plugin.has(p_addon));
|
|
||||||
|
if (!addon_path.begins_with("res://")) {
|
||||||
|
addon_path = "res://addons/" + addon_path + "/plugin.cfg";
|
||||||
|
}
|
||||||
|
|
||||||
|
ERR_FAIL_COND(p_enabled && addon_name_to_plugin.has(addon_path));
|
||||||
|
ERR_FAIL_COND(!p_enabled && !addon_name_to_plugin.has(addon_path));
|
||||||
|
|
||||||
if (!p_enabled) {
|
if (!p_enabled) {
|
||||||
EditorPlugin *addon = addon_name_to_plugin[p_addon];
|
EditorPlugin *addon = addon_name_to_plugin[addon_path];
|
||||||
remove_editor_plugin(addon, p_config_changed);
|
remove_editor_plugin(addon, p_config_changed);
|
||||||
memdelete(addon);
|
memdelete(addon);
|
||||||
addon_name_to_plugin.erase(p_addon);
|
addon_name_to_plugin.erase(addon_path);
|
||||||
_update_addon_config();
|
_update_addon_config();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Ref<ConfigFile> cf;
|
Ref<ConfigFile> cf;
|
||||||
cf.instantiate();
|
cf.instantiate();
|
||||||
if (!DirAccess::exists(p_addon.get_base_dir())) {
|
if (!DirAccess::exists(addon_path.get_base_dir())) {
|
||||||
_remove_plugin_from_enabled(p_addon);
|
_remove_plugin_from_enabled(addon_path);
|
||||||
WARN_PRINT("Addon '" + p_addon + "' failed to load. No directory found. Removing from enabled plugins.");
|
WARN_PRINT("Addon '" + addon_path + "' failed to load. No directory found. Removing from enabled plugins.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Error err = cf->load(p_addon);
|
Error err = cf->load(addon_path);
|
||||||
if (err != OK) {
|
if (err != OK) {
|
||||||
show_warning(vformat(TTR("Unable to enable addon plugin at: '%s' parsing of config failed."), p_addon));
|
show_warning(vformat(TTR("Unable to enable addon plugin at: '%s' parsing of config failed."), addon_path));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!cf->has_section_key("plugin", "script")) {
|
if (!cf->has_section_key("plugin", "script")) {
|
||||||
show_warning(vformat(TTR("Unable to find script field for addon plugin at: '%s'."), p_addon));
|
show_warning(vformat(TTR("Unable to find script field for addon plugin at: '%s'."), addon_path));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3334,7 +3340,7 @@ void EditorNode::set_addon_plugin_enabled(const String &p_addon, bool p_enabled,
|
||||||
|
|
||||||
// Only try to load the script if it has a name. Else, the plugin has no init script.
|
// Only try to load the script if it has a name. Else, the plugin has no init script.
|
||||||
if (script_path.length() > 0) {
|
if (script_path.length() > 0) {
|
||||||
script_path = p_addon.get_base_dir().plus_file(script_path);
|
script_path = addon_path.get_base_dir().plus_file(script_path);
|
||||||
script = ResourceLoader::load(script_path);
|
script = ResourceLoader::load(script_path);
|
||||||
|
|
||||||
if (script.is_null()) {
|
if (script.is_null()) {
|
||||||
|
@ -3344,8 +3350,8 @@ void EditorNode::set_addon_plugin_enabled(const String &p_addon, bool p_enabled,
|
||||||
|
|
||||||
// Errors in the script cause the base_type to be an empty StringName.
|
// Errors in the script cause the base_type to be an empty StringName.
|
||||||
if (script->get_instance_base_type() == StringName()) {
|
if (script->get_instance_base_type() == StringName()) {
|
||||||
show_warning(vformat(TTR("Unable to load addon script from path: '%s'. This might be due to a code error in that script.\nDisabling the addon at '%s' to prevent further errors."), script_path, p_addon));
|
show_warning(vformat(TTR("Unable to load addon script from path: '%s'. This might be due to a code error in that script.\nDisabling the addon at '%s' to prevent further errors."), script_path, addon_path));
|
||||||
_remove_plugin_from_enabled(p_addon);
|
_remove_plugin_from_enabled(addon_path);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3363,14 +3369,18 @@ void EditorNode::set_addon_plugin_enabled(const String &p_addon, bool p_enabled,
|
||||||
|
|
||||||
EditorPlugin *ep = memnew(EditorPlugin);
|
EditorPlugin *ep = memnew(EditorPlugin);
|
||||||
ep->set_script(script);
|
ep->set_script(script);
|
||||||
addon_name_to_plugin[p_addon] = ep;
|
addon_name_to_plugin[addon_path] = ep;
|
||||||
add_editor_plugin(ep, p_config_changed);
|
add_editor_plugin(ep, p_config_changed);
|
||||||
|
|
||||||
_update_addon_config();
|
_update_addon_config();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool EditorNode::is_addon_plugin_enabled(const String &p_addon) const {
|
bool EditorNode::is_addon_plugin_enabled(const String &p_addon) const {
|
||||||
return addon_name_to_plugin.has(p_addon);
|
if (p_addon.begins_with("res://")) {
|
||||||
|
return addon_name_to_plugin.has(p_addon);
|
||||||
|
}
|
||||||
|
|
||||||
|
return addon_name_to_plugin.has("res://addons/" + p_addon + "/plugin.cfg");
|
||||||
}
|
}
|
||||||
|
|
||||||
void EditorNode::_remove_edited_scene(bool p_change_tab) {
|
void EditorNode::_remove_edited_scene(bool p_change_tab) {
|
||||||
|
|
Loading…
Reference in New Issue