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:
@@ -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()) {
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user