FIX: Prompt to delete problematic presets

Jira: XXXX

Change-Id: Ic43f7bb782794d7ab0b6acbffbb5d73e94f6ed73
This commit is contained in:
maosheng.wei 2024-01-04 20:52:12 +08:00 committed by Lane.Wei
parent 27d3fd73ee
commit b7a5bb48da
2 changed files with 56 additions and 13 deletions

View File

@ -420,7 +420,7 @@ static std::string get_filament_id(std::string vendor_typr_serial)
continue;
}
std::string filament_name = preset_name.substr(0, index_at - 1);
if (filament_name == vendor_typr_serial)
if (filament_name == vendor_typr_serial && preset.filament_id != "null")
return preset.filament_id;
filament_id_to_filament_name[preset.filament_id].insert(filament_name);
}
@ -437,7 +437,7 @@ static std::string get_filament_id(std::string vendor_typr_serial)
continue;
}
std::string filament_name = preset_name.substr(0, index_at - 1);
if (filament_name == vendor_typr_serial)
if (filament_name == vendor_typr_serial && preset->filament_id != "null")
return preset->filament_id;
filament_id_to_filament_name[preset->filament_id].insert(filament_name);
}
@ -4935,6 +4935,14 @@ wxPanel *PresetTree::get_child_item(wxPanel *parent, std::shared_ptr<Preset> pre
preset_name->SetFont(Label::Body_10);
preset_name->SetForegroundColour(*wxBLACK);
sizer->Add(preset_name, 0, wxEXPAND | wxALL, 5);
bool base_id_error = false;
if (preset->inherits() == "" && preset->base_id != "") base_id_error = true;
if (base_id_error) {
std::string wiki_url = "https://wiki.bambulab.com/en/software/bambu-studio/custom-filament-issue";
wxHyperlinkCtrl *m_download_hyperlink = new wxHyperlinkCtrl(panel, wxID_ANY, _L("[Delete Required]"), wiki_url, wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE);
m_download_hyperlink->SetFont(Label::Body_10);
sizer->Add(m_download_hyperlink, 0, wxEXPAND | wxALL, 5);
}
sizer->Add(0, 0, 1, wxEXPAND, 0);
StateColor flush_bg_col(std::pair<wxColour, int>(wxColour(219, 253, 231), StateColor::Pressed), std::pair<wxColour, int>(wxColour(238, 238, 238), StateColor::Hovered),
@ -4946,6 +4954,9 @@ wxPanel *PresetTree::get_child_item(wxPanel *parent, std::shared_ptr<Preset> pre
StateColor flush_bd_col(std::pair<wxColour, int>(wxColour(0, 174, 66), StateColor::Pressed), std::pair<wxColour, int>(wxColour(0, 174, 66), StateColor::Hovered),
std::pair<wxColour, int>(wxColour(172, 172, 172), StateColor::Normal));
StateColor btn_bg_green(std::pair<wxColour, int>(wxColour(27, 136, 68), StateColor::Pressed), std::pair<wxColour, int>(wxColour(61, 203, 115), StateColor::Hovered),
std::pair<wxColour, int>(wxColour(0, 174, 66), StateColor::Normal));
Button *edit_preset_btn = new Button(panel, _L("Edit Preset"));
edit_preset_btn->SetFont(Label::Body_10);
edit_preset_btn->SetPaddingSize(wxSize(8, 3));
@ -4961,9 +4972,16 @@ wxPanel *PresetTree::get_child_item(wxPanel *parent, std::shared_ptr<Preset> pre
del_preset_btn->SetFont(Label::Body_10);
del_preset_btn->SetPaddingSize(wxSize(8, 3));
del_preset_btn->SetCornerRadius(8);
del_preset_btn->SetBackgroundColor(flush_bg_col);
del_preset_btn->SetBorderColor(flush_bd_col);
del_preset_btn->SetTextColor(flush_fg_col);
if (base_id_error) {
del_preset_btn->SetBackgroundColor(btn_bg_green);
del_preset_btn->SetBorderColor(btn_bg_green);
del_preset_btn->SetTextColor(wxColour(0xFFFFFE));
} else {
del_preset_btn->SetBackgroundColor(flush_bg_col);
del_preset_btn->SetBorderColor(flush_bd_col);
del_preset_btn->SetTextColor(flush_fg_col);
}
//del_preset_btn->Hide();
sizer->Add(del_preset_btn, 0, wxALL | wxALIGN_CENTER_VERTICAL, 0);

View File

@ -45,21 +45,46 @@ static wxString update_custom_filaments()
std::map<std::string, std::vector<Preset const *>> temp_filament_id_to_presets = preset_bundle->filaments.get_filament_presets();
std::vector<std::pair<std::string, std::string>> need_sort;
bool need_delete_some_filament = false;
for (std::pair<std::string, std::vector<Preset const *>> filament_id_to_presets : temp_filament_id_to_presets) {
std::string filament_id = filament_id_to_presets.first;
if (filament_id.empty()) continue;
if (filament_id == "null") {
need_delete_some_filament = true;
}
bool filament_with_base_id = false;
bool vendor_is_generic = false;
std::string filament_name;
for (const Preset *preset : filament_id_to_presets.second) {
if (preset->is_system || filament_id.empty() || "null" == filament_id || filament_id.size() != 8 || filament_id[0] != 'P') break;
auto filament_vendor = dynamic_cast<ConfigOptionStrings *> (const_cast<Preset*>(preset)->config.option("filament_vendor",false));
if(filament_vendor&&filament_vendor->values.size()&&filament_vendor->values[0] == "Generic") break;
std::string preset_name = preset->name;
size_t index_at = preset_name.find(" @");
if (std::string::npos != index_at) { preset_name = preset_name.substr(0, index_at); }
need_sort.push_back(std::make_pair(preset_name, preset->filament_id));
break;
if (preset->is_system || preset->inherits() != "") continue;
if (!preset->base_id.empty()) filament_with_base_id = true;
if (!vendor_is_generic) {
auto filament_vendor = dynamic_cast<ConfigOptionStrings *>(const_cast<Preset *>(preset)->config.option("filament_vendor", false));
if (filament_vendor && filament_vendor->values.size() && filament_vendor->values[0] == "Generic") vendor_is_generic = true;
}
if (filament_name.empty()) {
std::string preset_name = preset->name;
size_t index_at = preset_name.find(" @");
if (std::string::npos != index_at) { preset_name = preset_name.substr(0, index_at); }
filament_name = preset_name;
}
}
if (vendor_is_generic) continue;
if (!filament_name.empty()) {
if (filament_with_base_id) {
need_sort.push_back(std::make_pair("[Action Required] " + filament_name, filament_id));
} else {
need_sort.push_back(std::make_pair(filament_name, filament_id));
}
}
}
std::sort(need_sort.begin(), need_sort.end(), [](const std::pair<std::string, std::string> &a, const std::pair<std::string, std::string> &b) { return a.first < b.first; });
if (need_delete_some_filament) {
need_sort.push_back(std::make_pair("[Action Required]", "null"));
}
json temp_j;
for (std::pair<std::string, std::string> &filament_name_to_id : need_sort) {
temp_j["name"] = filament_name_to_id.first;