fix(preset): filament_id auch im parent_config-Branch von Preset::save() schreiben

Außerdem: sub_brands in AMS-Config übergeben damit sync_ams_list()
bei ID-Kollisionen (z.B. OGFL04 = Overture + eSUN) den korrekten
Hersteller per Namens-Prefix bevorzugt.
This commit is contained in:
viewit
2026-06-03 11:15:59 +02:00
parent 3c291f8883
commit 9de06ea7f1
2 changed files with 16 additions and 3 deletions

View File

@@ -3201,9 +3201,21 @@ unsigned int PresetBundle::sync_ams_list(std::vector<std::pair<DynamicPrintConfi
}
bool has_type = false;
auto filament_type = ams.opt_string("filament_type", 0u);
auto iter = std::find_if(filaments.begin(), filaments.end(), [this, &filament_id, &has_type, filament_type](auto &f) {
has_type |= f.config.opt_string("filament_type", 0u) == filament_type;
return f.is_compatible && filaments.get_preset_base(f) == &f && f.filament_id == filament_id; });
auto sub_brands = ams.opt_string("filament_sub_brands", 0u);
// If sub_brands (filament brand name) is known, prefer a preset whose name starts with it
// to resolve ID collisions where two different vendors share the same filament_id.
auto iter = filaments.end();
if (!sub_brands.empty() && !filament_id.empty()) {
iter = std::find_if(filaments.begin(), filaments.end(), [this, &filament_id, &has_type, filament_type, &sub_brands](auto &f) {
has_type |= f.config.opt_string("filament_type", 0u) == filament_type;
return f.is_compatible && filaments.get_preset_base(f) == &f && f.filament_id == filament_id
&& boost::algorithm::istarts_with(f.name, sub_brands); });
}
if (iter == filaments.end()) {
iter = std::find_if(filaments.begin(), filaments.end(), [this, &filament_id, &has_type, filament_type](auto &f) {
has_type |= f.config.opt_string("filament_type", 0u) == filament_type;
return f.is_compatible && filaments.get_preset_base(f) == &f && f.filament_id == filament_id; });
}
if (iter == filaments.end()) {
BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(": filament_id %1% not found or system or compatible") % filament_id;
if (!filament_type.empty()) {

View File

@@ -3341,6 +3341,7 @@ std::map<int, DynamicPrintConfig> Sidebar::build_filament_ams_list(MachineObject
tray_config.set_key_value("filament_colour_type", new ConfigOptionStrings{std::to_string(tray.ctype)});
tray_config.set_key_value("filament_exist", new ConfigOptionBools{tray.is_exists});
tray_config.set_key_value("filament_slot_placeholder", new ConfigOptionBools{tray.is_slot_placeholder});
tray_config.set_key_value("filament_sub_brands", new ConfigOptionStrings{tray.sub_brands});
std::optional<FilamentBaseInfo> info;
if (wxGetApp().preset_bundle) {
info = wxGetApp().preset_bundle->get_filament_by_filament_id(tray.setting_id);