From 32c055ca7ad517e8ddeadb76f532ba112266ba47 Mon Sep 17 00:00:00 2001 From: milk Date: Mon, 21 Apr 2025 21:00:14 +0800 Subject: [PATCH] ENH: Optimization of File Transfer System Part1 jira: [STUDIO-11777] Change-Id: I733fd3532caa19546763ab8a72eb7667d5ffec53 (cherry picked from commit aa52c99076a78e2c8fd8d4e4b0b64de0bc761469) --- src/slic3r/GUI/DeviceManager.cpp | 23 ++++++++++++++++++++ src/slic3r/GUI/DeviceManager.hpp | 2 ++ src/slic3r/GUI/Printer/PrinterFileSystem.cpp | 6 ++++- src/slic3r/GUI/Printer/PrinterFileSystem.h | 1 + 4 files changed, 31 insertions(+), 1 deletion(-) diff --git a/src/slic3r/GUI/DeviceManager.cpp b/src/slic3r/GUI/DeviceManager.cpp index 8d1f633b7a..8e2bb16905 100644 --- a/src/slic3r/GUI/DeviceManager.cpp +++ b/src/slic3r/GUI/DeviceManager.cpp @@ -535,6 +535,13 @@ bool MachineObject::is_lan_mode_printer() const return result; } +std::string MachineObject::convertToIp(long long ip) +{ + std::stringstream ss; + ss << ((ip >> 0) & 0xFF) << "." << ((ip >> 8) & 0xFF) << "." << ((ip >> 16) & 0xFF) << "." << ((ip >> 24) & 0xFF); + return ss.str(); +} + PrinterSeries MachineObject::get_printer_series() const { std::string series = DeviceManager::get_printer_series(printer_type); @@ -3423,8 +3430,24 @@ int MachineObject::parse_json(std::string payload, bool key_field_only) if (jj["net"].contains("conf")) { network_wired = (jj["net"]["conf"].get() & (0x1)) != 0; } + if (jj["net"].contains("info")) { + for (auto info_item = jj["net"]["info"].begin(); info_item != jj["net"]["info"].end(); info_item++) { + + if (info_item->contains("ip")) { + auto tmp_dev_ip = (*info_item)["ip"].get(); + if (tmp_dev_ip == 0) + continue ; + else { + set_dev_ip(convertToIp(tmp_dev_ip)); + } + } else { + break; + } + } + } } } + #pragma endregion #pragma region online diff --git a/src/slic3r/GUI/DeviceManager.hpp b/src/slic3r/GUI/DeviceManager.hpp index 5ba30c8837..60cba81537 100644 --- a/src/slic3r/GUI/DeviceManager.hpp +++ b/src/slic3r/GUI/DeviceManager.hpp @@ -509,6 +509,7 @@ public: int subscribe_counter{3}; std::string dev_connection_type; /* lan | cloud */ std::string connection_type() { return dev_connection_type; } + std::string dev_connection_name; /* lan | eth */ void set_dev_ip(std::string ip) {dev_ip = ip;} std::string get_ftp_folder(); @@ -520,6 +521,7 @@ public: void erase_user_access_code(); std::string get_user_access_code() const; bool is_lan_mode_printer() const; + std::string convertToIp(long long ip); //PRINTER_TYPE printer_type = PRINTER_3DPrinter_UKNOWN; std::string printer_type; /* model_id */ diff --git a/src/slic3r/GUI/Printer/PrinterFileSystem.cpp b/src/slic3r/GUI/Printer/PrinterFileSystem.cpp index f97ea156bc..48753a8393 100644 --- a/src/slic3r/GUI/Printer/PrinterFileSystem.cpp +++ b/src/slic3r/GUI/Printer/PrinterFileSystem.cpp @@ -1232,7 +1232,7 @@ void PrinterFileSystem::Reconnect(boost::unique_lock &l, int resul if (m_session.owner == nullptr) return; json r; - while (!m_callbacks.empty()) { + while(!m_callbacks.empty()) { auto c = m_callbacks.front(); m_callbacks.pop_front(); ++m_sequence; @@ -1245,6 +1245,8 @@ void PrinterFileSystem::Reconnect(boost::unique_lock &l, int resul while (m_stopped) { if (m_session.owner == nullptr) return; + m_status = Status::Stopped; + SendChangedEvent(EVT_STATUS_CHANGED, m_status); m_cond.wait(l); } wxLogMessage("PrinterFileSystem::Reconnect Initializing"); @@ -1271,6 +1273,7 @@ void PrinterFileSystem::Reconnect(boost::unique_lock &l, int resul Bambu_Tunnel tunnel = nullptr; int ret = Bambu_Create(&tunnel, url.c_str()); if (ret == 0) { + Bambu_SetLogger(tunnel, DumpLog, this); ret = Bambu_Open(tunnel); } @@ -1297,6 +1300,7 @@ void PrinterFileSystem::Reconnect(boost::unique_lock &l, int resul } wxLogMessage("PrinterFileSystem::Reconnect Failed"); m_status = Status::Failed; + SendChangedEvent(EVT_STATUS_CHANGED, m_status, "", url.size() < 2 ? 1 : m_last_error); m_cond.timed_wait(l, boost::posix_time::seconds(10)); } diff --git a/src/slic3r/GUI/Printer/PrinterFileSystem.h b/src/slic3r/GUI/Printer/PrinterFileSystem.h index 237378744c..43a53c8687 100644 --- a/src/slic3r/GUI/Printer/PrinterFileSystem.h +++ b/src/slic3r/GUI/Printer/PrinterFileSystem.h @@ -170,6 +170,7 @@ public: ListSyncing, ListReady, Failed, + Stopped, }; Status GetStatus() const { return m_status; }