summaryrefslogtreecommitdiff
path: root/modules/gltf/editor
diff options
context:
space:
mode:
authorRedMser <redmser.jj2@gmail.com>2023-02-06 18:23:20 +0100
committerRedMser <redmser.jj2@gmail.com>2023-02-06 18:23:20 +0100
commit8f099c7de3cb664266faad5bd2b469e07925b8e0 (patch)
tree5ac926474e45727e28aa40b8029b7832a4a40f83 /modules/gltf/editor
parent8a37fad281f369d152fd0748875b05d58076e006 (diff)
Better error handling for Blender RPC import
- If RPC import fails, then try a direct import as well. While it's slower, it may be better than failing the import completely. - Connection errors will disable RPC automatically, to avoid having to wait the full 30 seconds timeout each time. This should be properly fixed by allowing to override the timeout per HTTPClient.
Diffstat (limited to 'modules/gltf/editor')
-rw-r--r--modules/gltf/editor/editor_import_blend_runner.cpp13
1 files changed, 12 insertions, 1 deletions
diff --git a/modules/gltf/editor/editor_import_blend_runner.cpp b/modules/gltf/editor/editor_import_blend_runner.cpp
index c203a91834..659a60e6a1 100644
--- a/modules/gltf/editor/editor_import_blend_runner.cpp
+++ b/modules/gltf/editor/editor_import_blend_runner.cpp
@@ -181,7 +181,18 @@ Error EditorImportBlendRunner::start_blender(const String &p_python_script, bool
Error EditorImportBlendRunner::do_import(const Dictionary &p_options) {
if (is_using_rpc()) {
- return do_import_rpc(p_options);
+ Error err = do_import_rpc(p_options);
+ if (err != OK) {
+ // Retry without using RPC (slow, but better than the import failing completely).
+ if (err == ERR_CONNECTION_ERROR) {
+ // Disable RPC if the connection could not be established.
+ print_error(vformat("Failed to connect to Blender via RPC, switching to direct imports of .blend files. Check your proxy and firewall settings, then RPC can be re-enabled by changing the editor setting `filesystem/import/blender/rpc_port` to %d.", rpc_port));
+ EditorSettings::get_singleton()->set_manually("filesystem/import/blender/rpc_port", 0);
+ rpc_port = 0;
+ }
+ err = do_import_direct(p_options);
+ }
+ return err;
} else {
return do_import_direct(p_options);
}