FIX: connecting the printer when selecting printer in prepare page

2. sort the display name of printer in prepare page
3. update the printer list when the connected printer modified
jira: none

Change-Id: I3cf28179b25cda1b07efd3a2257aee9b483d0af9
This commit is contained in:
zhimin.zeng 2025-01-11 10:35:44 +08:00 committed by lane.wei
parent d3f9723349
commit d92db44f47
2 changed files with 51 additions and 3 deletions

View File

@ -124,7 +124,10 @@ PresetComboBox::PresetComboBox(wxWindow* parent, Preset::Type preset_type, const
else
e.Skip();
});
Bind(wxEVT_COMBOBOX_DROPDOWN, [this](wxCommandEvent&) { m_suppress_change = false; });
Bind(wxEVT_COMBOBOX_DROPDOWN, [this](wxCommandEvent &) {
update_printer_list();
m_suppress_change = false;
});
Bind(wxEVT_COMBOBOX_CLOSEUP, [this](wxCommandEvent&) { m_suppress_change = true; });
Bind(wxEVT_COMBOBOX, &PresetComboBox::OnSelect, this);
@ -306,6 +309,7 @@ wxString PresetComboBox::get_preset_item_name(unsigned int index)
std::advance(iter, idx);
Preset* machine_preset = get_printer_preset(iter->second);
if (machine_preset) {
dev->set_selected_machine(iter->first);
return from_u8(machine_preset->name);
}
}
@ -403,6 +407,33 @@ void PresetComboBox::update_from_bundle()
this->update(m_collection->get_selected_preset().name);
}
bool PresetComboBox::update_printer_list()
{
if (m_type != Preset::TYPE_PRINTER)
return false;
if (wxGetApp().is_user_login()) {
Slic3r::DeviceManager *dev = Slic3r::GUI::wxGetApp().getDeviceManager();
if (!dev)
return false;
NetworkAgent *agent = wxGetApp().getAgent();
unsigned int http_code;
std::string body;
int result = agent->get_user_print_info(&http_code, &body);
if (!body.empty()) {
dev->parse_user_print_info(body);
std::vector<std::string> new_machine_list;
std::map<std::string, MachineObject *> machine_list = dev->get_my_machine_list();
for (auto &it : machine_list) { new_machine_list.push_back(it.first); }
if (new_machine_list != m_backup_dev_list) {
update();
}
}
}
return true;
}
void PresetComboBox::add_connected_printers(std::string selected, bool alias_name)
{
DeviceManager *dev = Slic3r::GUI::wxGetApp().getDeviceManager();
@ -415,7 +446,21 @@ void PresetComboBox::add_connected_printers(std::string selected, bool alias_nam
set_label_marker(Append(separator(L("My Printer")), wxNullBitmap));
m_first_printer_idx = GetCount();
for (auto iter = machine_list.begin(); iter != machine_list.end(); ++iter) {
// sort list
std::vector<std::pair<std::string, MachineObject *>> user_machine_list;
m_backup_dev_list.clear();
for (auto &it : machine_list) {
m_backup_dev_list.push_back(it.first);
user_machine_list.push_back(it);
}
std::sort(user_machine_list.begin(), user_machine_list.end(), [&](auto &a, auto &b) {
if (a.second && b.second) { return a.second->dev_name.compare(b.second->dev_name) < 0; }
return false;
});
for (auto iter = user_machine_list.begin(); iter != user_machine_list.end(); ++iter) {
Preset* printer_preset = get_printer_preset(iter->second);
if (!printer_preset)
continue;
@ -423,7 +468,7 @@ void PresetComboBox::add_connected_printers(std::string selected, bool alias_nam
auto printer_model = printer_preset->config.opt_string("printer_model");
boost::replace_all(printer_model, "Bambu Lab ", "");
auto text = iter->second->dev_name + " (" + printer_model + ")";
int item_id = Append(from_u8(text), wxNullBitmap, &m_first_printer_idx + std::distance(machine_list.begin(), iter));
int item_id = Append(from_u8(text), wxNullBitmap, &m_first_printer_idx + std::distance(user_machine_list.begin(), iter));
}
m_last_printer_idx = GetCount();
}

View File

@ -70,6 +70,7 @@ public:
void update_from_bundle();
// BBS: printer
bool update_printer_list();
void add_connected_printers(std::string selected, bool alias_name = false);
int selected_connected_printer() const;
@ -135,6 +136,8 @@ protected:
int m_first_printer_idx = 0;
int m_last_printer_idx = 0;
std::vector<std::string> m_backup_dev_list;
PrinterTechnology printer_technology {ptAny};
void invalidate_selection();