mirror of
https://github.com/SoftFever/OrcaSlicer.git
synced 2026-03-14 15:26:11 -06:00
FIX: reset bambu lib after restart network plugin
Change-Id: I4a3a4b7420745835ca3fa00c6edebe9d8d98cbf6 Jira: STUDIO-7571 (cherry picked from commit 28d9c6743fae80bfd40e4ee391e30d62cb16d4ab)
This commit is contained in:
parent
ac3ead14d2
commit
f2022f431b
2 changed files with 33 additions and 13 deletions
|
|
@ -154,6 +154,11 @@ typedef BOOL (WINAPI *LPFN_ISWOW64PROCESS2)(
|
|||
using namespace std::literals;
|
||||
namespace pt = boost::property_tree;
|
||||
|
||||
struct StaticBambuLib
|
||||
{
|
||||
static void reset();
|
||||
};
|
||||
|
||||
namespace Slic3r {
|
||||
namespace GUI {
|
||||
|
||||
|
|
@ -1512,6 +1517,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(
|
||||
|
|
|
|||
|
|
@ -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());
|
||||
}
|
||||
|
|
@ -66,12 +66,15 @@ static std::map<int, std::string> 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<BambuLib *> 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);
|
||||
|
|
@ -379,7 +382,7 @@ void PrinterFileSystem::FetchModel(size_t index, std::function<void(int, std::st
|
|||
m_task_flags &= ~FF_FETCH_MODEL;
|
||||
if (result != 0) {
|
||||
auto iter = error_messages.find(result);
|
||||
if (iter != error_messages.end())
|
||||
if (iter != error_messages.end())
|
||||
*file_data = _u8L(iter->second.c_str());
|
||||
else
|
||||
file_data->clear();
|
||||
|
|
@ -783,7 +786,7 @@ void PrinterFileSystem::UpdateFocusThumbnail()
|
|||
if (names.empty() && paths.empty())
|
||||
return;
|
||||
m_task_flags |= FF_THUMNAIL;
|
||||
UpdateFocusThumbnail2(std::make_shared<std::vector<File>>(paths.empty() ? names : paths),
|
||||
UpdateFocusThumbnail2(std::make_shared<std::vector<File>>(paths.empty() ? names : paths),
|
||||
paths.empty() ? OldThumbnail : m_file_type == F_MODEL ? ModelMetadata : VideoThumbnail);
|
||||
}
|
||||
|
||||
|
|
@ -867,7 +870,7 @@ void PrinterFileSystem::UpdateFocusThumbnail2(std::shared_ptr<std::vector<File>>
|
|||
if (!thumbnail.empty()) {
|
||||
arr.push_back(file.path + "#" + thumbnail);
|
||||
file.flags &= ~FF_THUMNAIL;
|
||||
file.local_path.clear();
|
||||
file.local_path.clear();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -973,7 +976,7 @@ std::pair<PrinterFileSystem::FileList &, size_t> 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);
|
||||
|
|
@ -1042,7 +1045,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)));
|
||||
|
|
@ -1539,7 +1542,7 @@ void PrinterFileSystem::Reconnect(boost::unique_lock<boost::mutex> &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);
|
||||
|
|
@ -1610,12 +1613,12 @@ static void* get_function(const char* name)
|
|||
|
||||
#define GET_FUNC(x) lib.x = reinterpret_cast<decltype(lib.x)>(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) {
|
||||
|
|
@ -1639,11 +1642,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();
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue