mirror of
https://github.com/SoftFever/OrcaSlicer.git
synced 2025-07-07 15:07:31 -06:00
ENH: [STUDIO-1871] merge changes of user presets from other sessions
Change-Id: I2841ff4e23b18ebe7cdf374b69a494a4c05a49ee
This commit is contained in:
parent
e71b5a88b7
commit
ae959b7400
4 changed files with 28 additions and 15 deletions
|
@ -553,6 +553,10 @@ PresetsConfigSubstitutions PresetBundle::load_user_presets(AppConfig &
|
|||
BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(" print's selected_idx %1%, selected_name %2%") %prints.get_selected_idx() %prints.get_selected_preset_name();
|
||||
BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(" filament's selected_idx %1%, selected_name %2%") %filaments.get_selected_idx() %filaments.get_selected_preset_name();
|
||||
BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(" printers's selected_idx %1%, selected_name %2%") %printers.get_selected_idx() %printers.get_selected_preset_name();
|
||||
|
||||
// Sync removing
|
||||
remove_users_preset(config, &my_presets);
|
||||
|
||||
std::map<std::string, std::map<std::string, std::string>>::iterator it;
|
||||
for (it = my_presets.begin(); it != my_presets.end(); it++) {
|
||||
std::string name = it->first;
|
||||
|
@ -838,13 +842,26 @@ bool PresetBundle::validate_printers(const std::string &name, DynamicPrintConfig
|
|||
#endif
|
||||
}
|
||||
|
||||
void PresetBundle::remove_users_preset(AppConfig& config)
|
||||
void PresetBundle::remove_users_preset(AppConfig &config, std::map<std::string, std::map<std::string, std::string>> *my_presets)
|
||||
{
|
||||
auto check_removed = [my_presets, this](Preset &preset) -> bool {
|
||||
if (my_presets == nullptr) return true;
|
||||
if (my_presets->find(preset.name) != my_presets->end()) return false;
|
||||
if (!preset.sync_info.empty()) return false; // syncing, not remove
|
||||
if (preset.setting_id.empty()) return false; // no id, not remove
|
||||
// Saved preset is removed by another session
|
||||
if (preset.is_dirty) {
|
||||
preset.setting_id.clear();
|
||||
return false;
|
||||
}
|
||||
preset.remove_files();
|
||||
return true;
|
||||
};
|
||||
std::string preset_folder_user_id = config.get("preset_folder");
|
||||
std::string printer_selected_preset_name = printers.get_selected_preset().name;
|
||||
bool need_reset_printer_preset = false;
|
||||
for (auto it = printers.begin(); it != printers.end();) {
|
||||
if (it->is_user() && !it->user_id.empty() && it->user_id.compare(preset_folder_user_id) == 0) {
|
||||
if (it->is_user() && !it->user_id.empty() && it->user_id.compare(preset_folder_user_id) == 0 && check_removed(*it)) {
|
||||
BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << boost::format(":printers erase %1%, type %2%, user_id %3%") % it->name % Preset::get_type_string(it->type) % it->user_id;
|
||||
if (it->name == printer_selected_preset_name)
|
||||
need_reset_printer_preset = true;
|
||||
|
@ -875,7 +892,7 @@ void PresetBundle::remove_users_preset(AppConfig& config)
|
|||
bool need_reset_print_preset = false;
|
||||
// remove preset if user_id is not current user
|
||||
for (auto it = prints.begin(); it != prints.end();) {
|
||||
if (it->is_user() && !it->user_id.empty() && it->user_id.compare(preset_folder_user_id) == 0) {
|
||||
if (it->is_user() && !it->user_id.empty() && it->user_id.compare(preset_folder_user_id) == 0 && check_removed(*it)) {
|
||||
BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << boost::format(":prints erase %1%, type %2%, user_id %3%")%it->name %Preset::get_type_string(it->type) %it->user_id;
|
||||
if (it->name == selected_print_name)
|
||||
need_reset_print_preset = true;
|
||||
|
@ -895,7 +912,7 @@ void PresetBundle::remove_users_preset(AppConfig& config)
|
|||
std::string selected_filament_name = filaments.get_selected_preset().name;
|
||||
bool need_reset_filament_preset = false;
|
||||
for (auto it = filaments.begin(); it != filaments.end();) {
|
||||
if (it->is_user() && !it->user_id.empty() && it->user_id.compare(preset_folder_user_id) == 0) {
|
||||
if (it->is_user() && !it->user_id.empty() && it->user_id.compare(preset_folder_user_id) == 0 && check_removed(*it)) {
|
||||
BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << boost::format(":filaments erase %1%, type %2%, user_id %3%")%it->name %Preset::get_type_string(it->type) %it->user_id;
|
||||
if (it->name == selected_filament_name)
|
||||
need_reset_filament_preset = true;
|
||||
|
@ -1348,7 +1365,7 @@ void PresetBundle::load_selections(AppConfig &config, const PresetPreferences& p
|
|||
void PresetBundle::export_selections(AppConfig &config)
|
||||
{
|
||||
assert(this->printers.get_edited_preset().printer_technology() != ptFFF || filament_presets.size() >= 1);
|
||||
assert(this->printers.get_edited_preset().printer_technology() != ptFFF || filament_presets.size() > 1 || filaments.get_selected_preset_name() == filament_presets.front());
|
||||
//assert(this->printers.get_edited_preset().printer_technology() != ptFFF || filament_presets.size() > 1 || filaments.get_selected_preset_name() == filament_presets.front());
|
||||
config.clear_section("presets");
|
||||
config.set("presets", PRESET_PRINT_NAME, prints.get_selected_preset_name());
|
||||
config.set("presets", PRESET_FILAMENT_NAME, filament_presets.front());
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue