From ffeb0684528387b9e2cd1988322dfabcb3e6cfb5 Mon Sep 17 00:00:00 2001 From: David Kocik Date: Wed, 24 Apr 2024 15:34:07 +0200 Subject: [PATCH] Change printer maps data from model to model nozzle pair --- src/slic3r/GUI/PresetComboBoxes.cpp | 16 ++++++++++------ src/slic3r/GUI/UserAccount.cpp | 16 ++++++++++------ src/slic3r/GUI/UserAccount.hpp | 8 ++++---- 3 files changed, 24 insertions(+), 16 deletions(-) diff --git a/src/slic3r/GUI/PresetComboBoxes.cpp b/src/slic3r/GUI/PresetComboBoxes.cpp index 90ad852587..343d9cab51 100644 --- a/src/slic3r/GUI/PresetComboBoxes.cpp +++ b/src/slic3r/GUI/PresetComboBoxes.cpp @@ -890,9 +890,11 @@ static std::string get_connect_state_suffix_for_printer(const Preset& printer_pr if (auto printer_state_map = wxGetApp().plater()->get_user_account()->get_printer_state_map(); !printer_state_map.empty()) { - for (const auto& [printer_model_id, states] : printer_state_map) { - if (printer_model_id == printer_preset.config.opt_string("printer_model")) { - + for (const auto& [printer_model_nozzle_pair, states] : printer_state_map) { + if (printer_model_nozzle_pair.first == printer_preset.config.opt_string("printer_model") + && (printer_model_nozzle_pair.second.empty() + || printer_model_nozzle_pair.second == printer_preset.config.opt_string("nozzle_diamenter")) + ) { PrinterStatesCount states_cnt = get_printe_states_count(states); if (states_cnt.available_cnt > 0) @@ -912,9 +914,11 @@ static wxString get_connect_info_line(const Preset& printer_preset) if (auto printer_state_map = wxGetApp().plater()->get_user_account()->get_printer_state_map(); !printer_state_map.empty()) { - for (const auto& [printer_model_id, states] : printer_state_map) { - if (printer_model_id == printer_preset.config.opt_string("printer_model")) { - + for (const auto& [printer_model_nozzle_pair, states] : printer_state_map) { + if (printer_model_nozzle_pair.first == printer_preset.config.opt_string("printer_model") + && (printer_model_nozzle_pair.second.empty() + || printer_model_nozzle_pair.second == printer_preset.config.opt_string("nozzle_diamenter")) + ) { PrinterStatesCount states_cnt = get_printe_states_count(states); return format_wxstr(_L("Available: %1%, Offline: %2%, Busy: %3%. Total: %4% printers"), diff --git a/src/slic3r/GUI/UserAccount.cpp b/src/slic3r/GUI/UserAccount.cpp index 8bcc62e89b..4a0b3efb0a 100644 --- a/src/slic3r/GUI/UserAccount.cpp +++ b/src/slic3r/GUI/UserAccount.cpp @@ -238,14 +238,15 @@ bool UserAccount::on_connect_printers_success(const std::string& data, AppConfig BOOST_LOG_TRIVIAL(error) << "Missing printer model for printer uuid: " << *printer_uuid; continue; } - const std::string printer_model = m_printer_uuid_map[*printer_uuid]; - if (new_printer_map.find(printer_model) == new_printer_map.end()) { - new_printer_map[printer_model].reserve(static_cast(ConnectPrinterState::CONNECT_PRINTER_STATE_COUNT)); + std::pair model_nozzle_pair = m_printer_uuid_map[*printer_uuid]; + + if (new_printer_map.find(model_nozzle_pair) == new_printer_map.end()) { + new_printer_map[model_nozzle_pair].reserve(static_cast(ConnectPrinterState::CONNECT_PRINTER_STATE_COUNT)); for (size_t i = 0; i < static_cast(ConnectPrinterState::CONNECT_PRINTER_STATE_COUNT); i++) { - new_printer_map[printer_model].push_back(0); + new_printer_map[model_nozzle_pair].push_back(0); } } - new_printer_map[printer_model][static_cast(state)] += 1; + new_printer_map[model_nozzle_pair][static_cast(state)] += 1; } // compare new and old printer map and update old map into new @@ -293,7 +294,10 @@ bool UserAccount::on_connect_uiid_map_success(const std::string& data, AppConfig if (!printer_model) { continue; } - m_printer_uuid_map[*printer_uuid] = *printer_model; + const auto nozzle_diameter_opt = printer_tree.second.get_optional("nozzle_diameter"); + const std::string nozzle_diameter = nozzle_diameter_opt ? *nozzle_diameter_opt : std::string(); + std::pair model_nozzle_pair = { *printer_model, nozzle_diameter }; + m_printer_uuid_map[*printer_uuid] = model_nozzle_pair; } m_communication->on_uuid_map_success(); return on_connect_printers_success(data, app_config, out_printers_changed); diff --git a/src/slic3r/GUI/UserAccount.hpp b/src/slic3r/GUI/UserAccount.hpp index 4d86f33b5d..df3961f6a9 100644 --- a/src/slic3r/GUI/UserAccount.hpp +++ b/src/slic3r/GUI/UserAccount.hpp @@ -24,9 +24,9 @@ enum class ConnectPrinterState { CONNECT_PRINTER_ERROR, CONNECT_PRINTER_STATE_COUNT }; - -typedef std::map> ConnectPrinterStateMap; -typedef std::map ConnectUUIDToModelMap; +// is pair of printer_model and nozzle_diameter. std::vector is vector of ConnectPrinterState counters +typedef std::map, std::vector> ConnectPrinterStateMap; +typedef std::map< std::string, std::pair> ConnectUUIDToModelNozzleMap; // Class UserAccount should handle every request for entities outside PrusaSlicer like PrusaAuth or PrusaConnect. // Outside communication is implemented in class UserAccountCommunication that runs separate thread. Results come back in events to Plater. // All incoming data shoud be stored in UserAccount. @@ -82,7 +82,7 @@ private: std::unique_ptr m_communication; ConnectPrinterStateMap m_printer_map; - ConnectUUIDToModelMap m_printer_uuid_map; + ConnectUUIDToModelNozzleMap m_printer_uuid_map; std::map m_account_user_data; std::string m_username; size_t m_fail_counter { 0 };