OrcaSlicer latest
OrcaSlicer
Loading...
Searching...
No Matches
Slic3r::CapabilityConfigDocument Class Reference

#include </home/runner/work/OrcaSlicer/OrcaSlicer/src/slic3r/plugin/PluginConfig.hpp>

Collaboration diagram for Slic3r::CapabilityConfigDocument:

Public Member Functions

std::optional< CapabilityConfigEntry > find (const PluginCapabilityId &id) const
bool contains (const PluginCapabilityId &id) const
bool upsert (CapabilityConfigEntry entry)
bool erase (const PluginCapabilityId &id)
bool prune_unreferenced (const std::set< std::pair< PluginCapabilityType, std::string > > &referenced)
bool empty () const
nlohmann::json serialize_entries () const
nlohmann::json root_json () const

Static Public Member Functions

static CapabilityConfigDocument from_root_json (const nlohmann::json &root)
static CapabilityConfigDocument from_entries (const nlohmann::json &entries)

Static Public Attributes

static constexpr const char * KeyEntries = "config"

Private Attributes

std::map< PluginCapabilityId, nlohmann::json > m_entries
std::vector< nlohmann::json > m_opaque_entries

Detailed Description

Member Function Documentation

◆ contains()

bool Slic3r::CapabilityConfigDocument::contains ( const PluginCapabilityId & id) const
148{
149 return find(id).has_value();
150}
std::optional< CapabilityConfigEntry > find(const PluginCapabilityId &id) const
Definition PluginConfig.cpp:131

References find().

Here is the call graph for this function:

◆ empty()

bool Slic3r::CapabilityConfigDocument::empty ( ) const
198{
199 return m_entries.empty() && m_opaque_entries.empty();
200}
std::map< PluginCapabilityId, nlohmann::json > m_entries
Definition PluginConfig.hpp:48
std::vector< nlohmann::json > m_opaque_entries
Definition PluginConfig.hpp:49

References m_entries, and m_opaque_entries.

Referenced by Slic3r::serialize_plugin_overrides().

Here is the caller graph for this function:

◆ erase()

bool Slic3r::CapabilityConfigDocument::erase ( const PluginCapabilityId & id)
176{
177 bool erased = m_entries.erase(id) != 0;
178 if (id.type != PluginCapabilityType::Unknown)
179 erased = m_entries.erase({PluginCapabilityType::Unknown, id.name, id.plugin_key}) != 0 || erased;
180 return erased;
181}
@ Unknown
Definition PythonPluginInterface.hpp:17

References m_entries, and Slic3r::Unknown.

Referenced by Slic3r::PresetPluginConfigService::remove_preset_override().

Here is the caller graph for this function:

◆ find()

std::optional< CapabilityConfigEntry > Slic3r::CapabilityConfigDocument::find ( const PluginCapabilityId & id) const
132{
133 const auto it = m_entries.find(id);
134 if (it != m_entries.end())
135 return decode_entry(it->first, it->second);
136
137 // Legacy config.json entries have no capability type. Keep them addressable by the new
138 // typed API until that capability is saved again.
139 if (id.type != PluginCapabilityType::Unknown) {
140 const auto legacy = m_entries.find({PluginCapabilityType::Unknown, id.name, id.plugin_key});
141 if (legacy != m_entries.end())
142 return decode_entry(id, legacy->second);
143 }
144 return std::nullopt;
145}
CapabilityConfigEntry decode_entry(const PluginCapabilityId &id, const nlohmann::json &entry)
Definition PluginConfig.cpp:66

References m_entries, and Slic3r::Unknown.

Referenced by contains(), from_root_json(), Slic3r::PresetPluginConfigService::get_effective_config(), and Slic3r::PresetPluginConfigService::set_preset_override().

Here is the caller graph for this function:

◆ from_entries()

CapabilityConfigDocument Slic3r::CapabilityConfigDocument::from_entries ( const nlohmann::json & entries)
static
109{
110 CapabilityConfigDocument document;
111 if (!entries.is_array())
112 return document;
113
114 for (const nlohmann::json& entry : entries) {
115 PluginCapabilityId id;
116 if (is_recognized_entry(entry, id) || (!id.plugin_key.empty() && !id.name.empty()))
117 document.m_entries[id] = entry;
118 else
119 document.m_opaque_entries.push_back(entry);
120 }
121
122 return document;
123}
bool is_recognized_entry(const nlohmann::json &entry, PluginCapabilityId &id)
Definition PluginConfig.cpp:55

References m_entries, and m_opaque_entries.

Referenced by from_root_json(), and Slic3r::parse_plugin_overrides().

Here is the caller graph for this function:

◆ from_root_json()

CapabilityConfigDocument Slic3r::CapabilityConfigDocument::from_root_json ( const nlohmann::json & root)
static
126{
127 const auto entries = root.find(KeyEntries);
128 return entries != root.end() ? from_entries(*entries) : CapabilityConfigDocument();
129}
static constexpr const char * KeyEntries
Definition PluginConfig.hpp:31
static CapabilityConfigDocument from_entries(const nlohmann::json &entries)
Definition PluginConfig.cpp:108

References find(), from_entries(), and KeyEntries.

Referenced by Slic3r::PluginConfig::load().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ prune_unreferenced()

bool Slic3r::CapabilityConfigDocument::prune_unreferenced ( const std::set< std::pair< PluginCapabilityType, std::string > > & referenced)
184{
185 bool changed = false;
186 for (auto it = m_entries.begin(); it != m_entries.end();) {
187 if (referenced.count({it->first.type, it->first.name}) != 0) {
188 ++it;
189 } else {
190 it = m_entries.erase(it);
191 changed = true;
192 }
193 }
194 return changed;
195}

References m_entries.

Referenced by Slic3r::prune_stale_plugin_overrides().

Here is the caller graph for this function:

◆ root_json()

nlohmann::json Slic3r::CapabilityConfigDocument::root_json ( ) const
213{
214 nlohmann::json root = nlohmann::json::object();
216 return root;
217}
nlohmann::json serialize_entries() const
Definition PluginConfig.cpp:202

References KeyEntries, and serialize_entries().

Here is the call graph for this function:

◆ serialize_entries()

nlohmann::json Slic3r::CapabilityConfigDocument::serialize_entries ( ) const
203{
204 nlohmann::json result = nlohmann::json::array();
205 for (const auto& item : m_entries)
206 result.push_back(item.second);
207 for (const nlohmann::json& entry : m_opaque_entries)
208 result.push_back(entry);
209 return result;
210}

References m_entries, and m_opaque_entries.

Referenced by root_json(), and Slic3r::serialize_plugin_overrides().

Here is the caller graph for this function:

◆ upsert()

bool Slic3r::CapabilityConfigDocument::upsert ( CapabilityConfigEntry entry)
153{
154 if (entry.id.empty())
155 return false;
156
157 if (entry.id.type != PluginCapabilityType::Unknown)
158 m_entries.erase({PluginCapabilityType::Unknown, entry.id.name, entry.id.plugin_key});
159
160 nlohmann::json serialized = nlohmann::json::object();
161 const auto existing = m_entries.find(entry.id);
162 if (existing != m_entries.end() && existing->second.is_object())
163 serialized = existing->second;
164
165 serialized[KEY_PLUGIN] = entry.id.plugin_key;
166 serialized[KEY_CAPABILITY] = entry.id.name;
167 serialized[KEY_TYPE] = plugin_capability_type_to_string(entry.id.type);
168 serialized[KEY_VERSION] = entry.plugin_version;
169 serialized[KEY_CAP_CONFIG] = entry.config;
170
171 m_entries[entry.id] = std::move(serialized);
172 return true;
173}
constexpr const char * KEY_VERSION
Definition PluginConfig.cpp:46
constexpr const char * KEY_PLUGIN
Definition PluginConfig.cpp:43
constexpr const char * KEY_CAP_CONFIG
Definition PluginConfig.cpp:47
constexpr const char * KEY_TYPE
Definition PluginConfig.cpp:45
constexpr const char * KEY_CAPABILITY
Definition PluginConfig.cpp:44
std::string plugin_capability_type_to_string(PluginCapabilityType type)
Definition PythonPluginInterface.hpp:40

References Slic3r::CapabilityConfigEntry::config, Slic3r::PluginCapabilityId::empty(), Slic3r::CapabilityConfigEntry::id, m_entries, Slic3r::PluginCapabilityId::name, Slic3r::plugin_capability_type_to_string(), Slic3r::PluginCapabilityId::plugin_key, Slic3r::CapabilityConfigEntry::plugin_version, Slic3r::PluginCapabilityId::type, and Slic3r::Unknown.

Referenced by Slic3r::PresetPluginConfigService::set_preset_override().

Here is the call graph for this function:
Here is the caller graph for this function:

Member Data Documentation

◆ KeyEntries

const char* Slic3r::CapabilityConfigDocument::KeyEntries = "config"
staticconstexpr

◆ m_entries

std::map<PluginCapabilityId, nlohmann::json> Slic3r::CapabilityConfigDocument::m_entries
private

◆ m_opaque_entries

std::vector<nlohmann::json> Slic3r::CapabilityConfigDocument::m_opaque_entries
private

The documentation for this class was generated from the following files: