FIX: safe the ams_id traverse

jira: [none]
Change-Id: I58b7769f843f3dbef8b51a15768711257f590dba
This commit is contained in:
xin.zhang 2025-01-11 14:14:15 +08:00 committed by lane.wei
parent b9ec612416
commit f0efb9af0d
3 changed files with 19 additions and 5 deletions

View File

@ -54,6 +54,20 @@ struct FilamentInfo
/*for new ams mapping*/
std::string ams_id;
std::string slot_id;
public:
int get_amd_id() const
{
if (ams_id.empty()) { return -1; };
try
{
return stoi(ams_id);
}
catch (...) {};
return -1;
};
};
class BBLSliceInfo {

View File

@ -1243,7 +1243,7 @@ bool MachineObject::need_SD_card() const
int MachineObject::get_extruder_id_by_ams_id(const std::string &ams_id)
{
if (ams_id.empty())
if (ams_id.empty() || (ams_id == "-1"))
return 0;
auto it = amsList.find(ams_id);

View File

@ -2105,7 +2105,7 @@ void SelectMachineDialog::on_ok_btn(wxCommandEvent &event)
//check blacklist
for (auto i = 0; i < m_ams_mapping_result.size(); i++) {
const auto& ams_id = m_ams_mapping_result[i].ams_id;
const auto& ams_id = m_ams_mapping_result[i].get_amd_id();
auto tid = m_ams_mapping_result[i].tray_id;
std::string filament_type = boost::to_upper_copy(m_ams_mapping_result[i].type);
@ -2121,7 +2121,7 @@ void SelectMachineDialog::on_ok_btn(wxCommandEvent &event)
std::string action;
std::string info;
DeviceManager::check_filaments_in_blacklist(filament_brand, filament_type, stoi(ams_id), in_blacklist, action, info);
DeviceManager::check_filaments_in_blacklist(filament_brand, filament_type, ams_id, in_blacklist, action, info);
if (in_blacklist && action == "warning") {
wxString prohibited_error = wxString::FromUTF8(info);
@ -2172,7 +2172,7 @@ void SelectMachineDialog::on_ok_btn(wxCommandEvent &event)
for (auto i = 0; i < m_ams_mapping_result.size(); i++) {
const auto& ams_id = m_ams_mapping_result[i].ams_id;
const auto& ams_id = m_ams_mapping_result[i].get_amd_id();
auto tid = m_ams_mapping_result[i].tray_id;
std::string filament_type = boost::to_upper_copy(m_ams_mapping_result[i].type);
@ -2187,7 +2187,7 @@ void SelectMachineDialog::on_ok_btn(wxCommandEvent &event)
bool in_blacklist = false;
std::string action;
std::string info;
DeviceManager::check_filaments_in_blacklist(filament_brand, filament_type, stoi(ams_id), in_blacklist, action, info);
DeviceManager::check_filaments_in_blacklist(filament_brand, filament_type, ams_id, in_blacklist, action, info);
if (in_blacklist && action == "prohibition") {
has_prohibited_filament = true;