From 464ca4c7656b6a1cb787f3142e715ea22afa2da0 Mon Sep 17 00:00:00 2001 From: Ian Chua Date: Fri, 22 May 2026 19:05:28 +0800 Subject: [PATCH] fix: detached presets not showing up (#13793) * fix: detached presets not showing up * slightly better code clarity * remove cloud_prefix --- src/libslic3r/Preset.cpp | 54 ++++++++++++++++++++++++---------------- 1 file changed, 33 insertions(+), 21 deletions(-) diff --git a/src/libslic3r/Preset.cpp b/src/libslic3r/Preset.cpp index 62d44be8e3..cd58e90e97 100644 --- a/src/libslic3r/Preset.cpp +++ b/src/libslic3r/Preset.cpp @@ -2178,19 +2178,29 @@ bool PresetCollection::load_user_preset(std::string name, std::mapsecond; + } else { + const auto inherits_iter = preset_values.find(BBL_JSON_KEY_INHERITS); + const bool preset_inherits_from_parent = inherits_iter != preset_values.end() && !inherits_iter->second.empty(); + if (preset_inherits_from_parent) { + // This indicates that there is inherits exists but there is no base_id + BOOST_LOG_TRIVIAL(warning) << __FUNCTION__ + << boost::format("can not find base_id, not loading for user preset %1%") % canonical_name; + unlock(); + return false; + } } - std::string cloud_base_id = preset_values[BBL_JSON_KEY_BASE_ID]; //filament_id std::string cloud_filament_id; if ((m_type == Preset::TYPE_FILAMENT) && preset_values.find(BBL_JSON_KEY_FILAMENT_ID) != preset_values.end()) { cloud_filament_id = preset_values[BBL_JSON_KEY_FILAMENT_ID]; - BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << " " << canonical_name << " filament_id: " << cloud_filament_id << " base_id: " << cloud_base_id; + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << " " << canonical_name << " filament_id: " << cloud_filament_id << " base_id: " << based_id; } DynamicPrintConfig new_config, cloud_config; @@ -2263,7 +2273,7 @@ bool PresetCollection::load_user_preset(std::string name, std::mapversion = cloud_version.value(); iter->user_id = cloud_user_id; iter->setting_id = cloud_setting_id; - iter->base_id = cloud_base_id; + iter->base_id = based_id; iter->filament_id = cloud_filament_id; update_alias(*iter); //presets_loaded.emplace_back(*it->second); @@ -2282,7 +2292,7 @@ bool PresetCollection::load_user_preset(std::string name, std::map(BBL_JSON_KEY_INHERITS)->value.empty()) { - if (alias_name.empty()) { - size_t end_pos = preset_name.find_first_of("@"); - if (end_pos != std::string::npos) { - alias_name = preset_name.substr(0, end_pos); - boost::trim_right(alias_name); - } + std::string bare_preset_name = get_preset_bare_name(preset.name); + std::string alias_name = bare_preset_name; + + const bool is_root_filament_preset = + m_type == Preset::Type::TYPE_FILAMENT && + preset.config.has(BBL_JSON_KEY_INHERITS) && + preset.config.option(BBL_JSON_KEY_INHERITS)->value.empty(); + if (is_root_filament_preset) { + const size_t suffix_separator_pos = bare_preset_name.find_first_of("@"); + if (suffix_separator_pos != std::string::npos) { + alias_name = bare_preset_name.substr(0, suffix_separator_pos); + boost::trim_right(alias_name); + if (alias_name.empty()) + alias_name = bare_preset_name; } } - else { - alias_name = preset_name; - } preset.alias = std::move(alias_name); m_map_alias_to_profile_name[preset.alias].push_back(preset.name);