diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp index 83f7371a63..abaf23a6d6 100644 --- a/src/slic3r/GUI/GUI_App.cpp +++ b/src/slic3r/GUI/GUI_App.cpp @@ -1332,10 +1332,15 @@ int GUI_App::install_plugin(InstallProgressFn pro_fn, WasCancelledFn cancel_fn) BOOST_LOG_TRIVIAL(info) << "[install_plugin] enter"; // get plugin folder auto plugin_folder = boost::filesystem::path(wxStandardPaths::Get().GetUserDataDir().ToUTF8().data()) / "plugins"; + auto backup_folder = plugin_folder/"backup"; if (!boost::filesystem::exists(plugin_folder)) { BOOST_LOG_TRIVIAL(info) << "[install_plugin] will create directory "<set_on_ssdp_msg_fn( @@ -2167,10 +2187,11 @@ bool GUI_App::on_init_inner() return true; } -bool GUI_App::on_init_network() +bool GUI_App::on_init_network(bool try_backup) { int load_agent_dll = Slic3r::NetworkAgent::initialize_network_module(); bool create_network_agent = false; +__retry: if (!load_agent_dll) { BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ": on_init_network, load dll ok"; if (check_networking_version()) { @@ -2185,6 +2206,13 @@ bool GUI_App::on_init_network() else create_network_agent = true; } else { + if (try_backup) { + int result = Slic3r::NetworkAgent::unload_network_module(); + BOOST_LOG_TRIVIAL(info) << "on_init_network, version mismatch, unload_network_module, result = " << result; + load_agent_dll = Slic3r::NetworkAgent::initialize_network_module(true); + try_backup = false; + goto __retry; + } BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ": on_init_network, version dismatch, need upload network module"; if (app_config->get("installed_networking") == "1") { m_networking_need_update = true; diff --git a/src/slic3r/GUI/GUI_App.hpp b/src/slic3r/GUI/GUI_App.hpp index 75130ad785..d88e1053fc 100644 --- a/src/slic3r/GUI/GUI_App.hpp +++ b/src/slic3r/GUI/GUI_App.hpp @@ -518,7 +518,7 @@ public: private: int updating_bambu_networking(); bool on_init_inner(); - bool on_init_network(); + bool on_init_network(bool try_backup = false); void init_networking_callbacks(); void init_app_config(); //BBS set extra header for http request diff --git a/src/slic3r/Utils/NetworkAgent.cpp b/src/slic3r/Utils/NetworkAgent.cpp index f53dd98b86..9620df9893 100644 --- a/src/slic3r/Utils/NetworkAgent.cpp +++ b/src/slic3r/Utils/NetworkAgent.cpp @@ -107,12 +107,16 @@ NetworkAgent::~NetworkAgent() BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(", this %1%, network_agent=%2%, destroy_agent_ptr=%3%, ret %4%")%this %network_agent %destroy_agent_ptr %ret; } -int NetworkAgent::initialize_network_module() +int NetworkAgent::initialize_network_module(bool using_backup) { //int ret = -1; std::string library; auto plugin_folder = boost::filesystem::path(wxStandardPaths::Get().GetUserDataDir().ToUTF8().data()) / "plugins"; + if (using_backup) { + plugin_folder = plugin_folder/"backup"; + } + //first load the library #if defined(_MSC_VER) || defined(_WIN32) library = plugin_folder.string() + "/" + std::string(BAMBU_NETWORK_LIBRARY) + ".dll"; diff --git a/src/slic3r/Utils/NetworkAgent.hpp b/src/slic3r/Utils/NetworkAgent.hpp index 9f1deab24e..f6bc4430ba 100644 --- a/src/slic3r/Utils/NetworkAgent.hpp +++ b/src/slic3r/Utils/NetworkAgent.hpp @@ -75,7 +75,7 @@ class NetworkAgent { public: - static int initialize_network_module(); + static int initialize_network_module(bool using_backup = false); static int unload_network_module(); #if defined(_MSC_VER) || defined(_WIN32) static HMODULE get_bambu_source_entry();