diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp index 759e3f325..1289fc8f1 100644 --- a/src/slic3r/GUI/GUI_App.cpp +++ b/src/slic3r/GUI/GUI_App.cpp @@ -144,6 +144,11 @@ using namespace std::literals; namespace pt = boost::property_tree; +struct StaticBambuLib +{ + static void reset(); +}; + namespace Slic3r { namespace GUI { @@ -1834,6 +1839,7 @@ void GUI_App::restart_networking() { BOOST_LOG_TRIVIAL(info) << __FUNCTION__<< boost::format(" enter, mainframe %1%")%mainframe; on_init_network(true); + StaticBambuLib::reset(); if(m_agent) { init_networking_callbacks(); m_agent->set_on_ssdp_msg_fn( @@ -4019,9 +4025,9 @@ std::string GUI_App::handle_web_request(std::string cmd) boost::optional ModelID = root.get_optional("makerworld_model_id"); if (ModelID.has_value()) { if (mainframe) { - if (mainframe->m_webview) - { - mainframe->m_webview->SetMakerworldModelID(ModelID.value()); + if (mainframe->m_webview) + { + mainframe->m_webview->SetMakerworldModelID(ModelID.value()); } } } diff --git a/src/slic3r/GUI/Printer/PrinterFileSystem.cpp b/src/slic3r/GUI/Printer/PrinterFileSystem.cpp index 2bacbe60b..ade96b346 100644 --- a/src/slic3r/GUI/Printer/PrinterFileSystem.cpp +++ b/src/slic3r/GUI/Printer/PrinterFileSystem.cpp @@ -26,9 +26,9 @@ std::string last_system_error() { return Slic3r::decode_path(std::error_code( #ifdef _WIN32 - GetLastError(), + GetLastError(), #else - errno, + errno, #endif std::system_category()).message().c_str()); } @@ -54,12 +54,15 @@ static std::map error_messages = { }; struct StaticBambuLib : BambuLib { - static StaticBambuLib & get(); + static StaticBambuLib &get(BambuLib * copy = nullptr); static int Fake_Bambu_Create(Bambu_Tunnel*, char const*) { return -2; } + static void reset(); +private: + std::vector copies_; }; PrinterFileSystem::PrinterFileSystem() - : BambuLib(StaticBambuLib::get()) + : BambuLib(StaticBambuLib::get(this)) { if (!default_thumbnail.IsOk()) { default_thumbnail = *Slic3r::GUI::BitmapCache().load_svg("printer_file", 0, 0); @@ -360,7 +363,7 @@ void PrinterFileSystem::FetchModel(size_t index, std::functionsecond.c_str()); else file_data->clear(); @@ -754,7 +757,7 @@ void PrinterFileSystem::UpdateFocusThumbnail() if (names.empty() && paths.empty()) return; m_task_flags |= FF_THUMNAIL; - UpdateFocusThumbnail2(std::make_shared>(paths.empty() ? names : paths), + UpdateFocusThumbnail2(std::make_shared>(paths.empty() ? names : paths), paths.empty() ? OldThumbnail : m_file_type == F_MODEL ? ModelMetadata : VideoThumbnail); } @@ -838,7 +841,7 @@ void PrinterFileSystem::UpdateFocusThumbnail2(std::shared_ptr> if (!thumbnail.empty()) { arr.push_back(file.path + "#" + thumbnail); file.flags &= ~FF_THUMNAIL; - file.local_path.clear(); + file.local_path.clear(); } } } @@ -944,7 +947,7 @@ std::pair PrinterFileSystem::FindFile(std m_file_list : m_file_list_cache[type]; if (index >= file_list.size() || (by_path ? file_list[index].path : file_list[index].name) != name) { - auto iter = std::find_if(m_file_list.begin(), file_list.end(), + auto iter = std::find_if(m_file_list.begin(), file_list.end(), [name, by_path](File &f) { return (by_path ? f.path : f.name) == name; }); if (iter == m_file_list.end()) return {file_list, -1}; index = std::distance(m_file_list.begin(), iter); @@ -1013,7 +1016,7 @@ void PrinterFileSystem::SendChangedEvent(wxEventType type, size_t index, std::st event.SetInt(index); if (!str.empty()) event.SetString(wxString::FromUTF8(str.c_str())); - else if (auto iter = error_messages.find(extra); iter != error_messages.end()) + else if (auto iter = error_messages.find(extra); iter != error_messages.end()) event.SetString(_L(iter->second.c_str())); else if (extra > CONTINUE && extra != ERROR_CANCEL) event.SetString(wxString::Format(_L("Error code: %d"), int(extra))); @@ -1276,7 +1279,7 @@ void PrinterFileSystem::Reconnect(boost::unique_lock &l, int resul } if (ret == 0) do { - ret = Bambu_StartStreamEx + ret = Bambu_StartStreamEx ? Bambu_StartStreamEx(tunnel, CTRL_TYPE) : Bambu_StartStream(tunnel, false); } while (ret == Bambu_would_block); @@ -1344,12 +1347,12 @@ static void* get_function(const char* name) #define GET_FUNC(x) lib.x = reinterpret_cast(get_function(#x)) -StaticBambuLib &StaticBambuLib::get() +StaticBambuLib &StaticBambuLib::get(BambuLib *copy) { static StaticBambuLib lib; // first load the library - if (lib.Bambu_Open) + if (lib.Bambu_Create) return lib; if (!module) { @@ -1373,11 +1376,22 @@ StaticBambuLib &StaticBambuLib::get() GET_FUNC(Bambu_SetLogger); GET_FUNC(Bambu_FreeLogMsg); - if (!lib.Bambu_Open) + if (!lib.Bambu_Create) { lib.Bambu_Create = Fake_Bambu_Create; + if (copy) + lib.copies_.push_back(copy); + } return lib; } +void StaticBambuLib::reset() +{ + get().Bambu_Create = nullptr; + auto &lib = get(); + for (auto c : lib.copies_) + *c = lib; +} + extern "C" BambuLib *bambulib_get() { return &StaticBambuLib::get(); } diff --git a/src/slic3r/GUI/wxMediaCtrl3.cpp b/src/slic3r/GUI/wxMediaCtrl3.cpp index 302af5fe2..ca371314d 100644 --- a/src/slic3r/GUI/wxMediaCtrl3.cpp +++ b/src/slic3r/GUI/wxMediaCtrl3.cpp @@ -19,12 +19,12 @@ END_EVENT_TABLE() struct StaticBambuLib : BambuLib { - static StaticBambuLib &get(); + static StaticBambuLib &get(BambuLib *); }; wxMediaCtrl3::wxMediaCtrl3(wxWindow *parent) : wxWindow(parent, wxID_ANY) - , BambuLib(StaticBambuLib::get()) + , BambuLib(StaticBambuLib::get(this)) , m_thread([this] { PlayThread(); }) { SetBackgroundColour(*wxBLACK);