OrcaSlicer latest
OrcaSlicer
Loading...
Searching...
No Matches
Slic3r::GUI::anonymous_namespace{PluginsDialog.cpp} Namespace Reference

Classes

struct  PluginContextAction
struct  PluginAvailableActions
struct  PluginCapabilityView
struct  PluginChangelogView
struct  PluginDialogItem
struct  PluginOperationState

Functions

PluginCapabilityType primary_capability_type_of (PluginManager &manager, const std::string &plugin_key)
PluginDescriptor as_cloud_only_descriptor (PluginDescriptor descriptor)
std::string to_string (PluginUpdateStatus status)
nlohmann::json build_context_actions_payload (const PluginAvailableActions &available_actions)
nlohmann::json build_plugin_payload_item (const PluginDialogItem &dialog_item)
PluginSource derive_plugin_source (const PluginDescriptor &descriptor)
PluginAvailableActions evaluate_action_policy (const PluginDialogItem &item)
PluginDialogItem build_plugin_dialog_item (const PluginDescriptor &descriptor)
const PluginContextAction * find_context_action (const PluginAvailableActions &available_actions, const std::string &action_id)
void store_plugin_operation_result (const std::shared_ptr< PluginOperationState > &state, bool succeeded, std::string error)
bool take_plugin_operation_result (const std::shared_ptr< PluginOperationState > &state, std::string &error)
std::vector< PluginDescriptor > current_cloud_metadata_snapshot ()

Variables

const wxString kDeletePluginTitle = _L("Delete Plugin")
const wxString kUnsubscribeTitle = _L("Unsubscribe")
const wxString kOverwritePluginTitle = _L("Overwrite Plugin")
std::string s_selected_plugin_install_action = "explore"
constexpr bool kFetchCloudMeta = true
constexpr bool kUseCurrentCloudMeta = false

Class Documentation

◆ Slic3r::GUI::anonymous_namespace{PluginsDialog.cpp}::PluginContextAction

struct Slic3r::GUI::anonymous_namespace{PluginsDialog.cpp}::PluginContextAction
Collaboration diagram for Slic3r::GUI::anonymous_namespace{PluginsDialog.cpp}::PluginContextAction:
Class Members
bool danger = false
bool enabled = true
string id
string label

◆ Slic3r::GUI::anonymous_namespace{PluginsDialog.cpp}::PluginAvailableActions

struct Slic3r::GUI::anonymous_namespace{PluginsDialog.cpp}::PluginAvailableActions
Collaboration diagram for Slic3r::GUI::anonymous_namespace{PluginsDialog.cpp}::PluginAvailableActions:
Class Members
bool can_toggle = false
vector< PluginContextAction > context_actions
bool toggle_installs_cloud_plugin = false

◆ Slic3r::GUI::anonymous_namespace{PluginsDialog.cpp}::PluginCapabilityView

struct Slic3r::GUI::anonymous_namespace{PluginsDialog.cpp}::PluginCapabilityView
Collaboration diagram for Slic3r::GUI::anonymous_namespace{PluginsDialog.cpp}::PluginCapabilityView:
Class Members
bool can_run = false
bool can_toggle = false
bool enabled = false
bool has_config_ui = false
PluginCapabilityId id

◆ Slic3r::GUI::anonymous_namespace{PluginsDialog.cpp}::PluginChangelogView

struct Slic3r::GUI::anonymous_namespace{PluginsDialog.cpp}::PluginChangelogView
Collaboration diagram for Slic3r::GUI::anonymous_namespace{PluginsDialog.cpp}::PluginChangelogView:
Class Members
string changelog
long long created_time = 0
string version

◆ Slic3r::GUI::anonymous_namespace{PluginsDialog.cpp}::PluginDialogItem

struct Slic3r::GUI::anonymous_namespace{PluginsDialog.cpp}::PluginDialogItem
Collaboration diagram for Slic3r::GUI::anonymous_namespace{PluginsDialog.cpp}::PluginDialogItem:
Class Members
string author
PluginAvailableActions available_actions
bool can_run_script = false
vector< PluginCapabilityView > capabilities
vector< PluginChangelogView > changelog
string description
string display_name
string error_text
bool has_error = false
bool has_local_package = false
bool has_script_capability = false
string installed_version
bool is_cloud_plugin = false
bool is_loaded = false
string latest_version
bool loading = false
bool orphaned = false
string plugin_id
string plugin_key
string sharing_token
string sort_version
PluginSource source = PluginSource::Local
PluginStatus status = PluginStatus::Inactive
string thumbnail_url
string type_key
string type_label
vector< string > type_labels
bool unauthorized = false
PluginUpdateStatus update_status = PluginUpdateStatus::Normal
string version

◆ Slic3r::GUI::anonymous_namespace{PluginsDialog.cpp}::PluginOperationState

struct Slic3r::GUI::anonymous_namespace{PluginsDialog.cpp}::PluginOperationState
Collaboration diagram for Slic3r::GUI::anonymous_namespace{PluginsDialog.cpp}::PluginOperationState:
Class Members
string error
mutex mutex
bool succeeded = false

Function Documentation

◆ as_cloud_only_descriptor()

PluginDescriptor Slic3r::GUI::anonymous_namespace{PluginsDialog.cpp}::as_cloud_only_descriptor ( PluginDescriptor descriptor)
145{
146 descriptor.plugin_root.clear();
147 descriptor.entry_path.clear();
148 descriptor.installed_version.clear();
149 // No local package is left behind, so the package verdict and any load error it produced go with it.
150 descriptor.metadata_valid = false;
151 descriptor.clear_error();
152 if (descriptor.cloud.has_value()) {
153 descriptor.cloud->installed = false;
154 descriptor.cloud->update_available = false;
155 }
156 return descriptor;
157}
bool metadata_valid
Definition PluginDescriptor.hpp:70
std::string entry_path
Definition PluginDescriptor.hpp:63
std::optional< CloudPluginState > cloud
Definition PluginDescriptor.hpp:69
std::string installed_version
Definition PluginDescriptor.hpp:60
std::string plugin_root
Definition PluginDescriptor.hpp:62
void clear_error()
Definition PluginDescriptor.hpp:145

References as_cloud_only_descriptor(), Slic3r::PluginDescriptor::clear_error(), Slic3r::PluginDescriptor::cloud, Slic3r::PluginDescriptor::entry_path, Slic3r::PluginDescriptor::installed_version, Slic3r::PluginDescriptor::metadata_valid, and Slic3r::PluginDescriptor::plugin_root.

Referenced by as_cloud_only_descriptor().

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

◆ build_context_actions_payload()

nlohmann::json Slic3r::GUI::anonymous_namespace{PluginsDialog.cpp}::build_context_actions_payload ( const PluginAvailableActions & available_actions)
379{
380 nlohmann::json payload = nlohmann::json::array();
381
382 for (const PluginContextAction& action : available_actions.context_actions) {
383 nlohmann::json item;
384 item["id"] = action.id;
385 item["label"] = action.label;
386 item["enabled"] = action.enabled;
387 item["danger"] = action.danger;
388 payload.push_back(std::move(item));
389 }
390
391 return payload;
392}
std::vector< PluginContextAction > context_actions
Definition PluginsDialog.cpp:73

References build_context_actions_payload(), Slic3r::GUI::anonymous_namespace{PluginsDialog.cpp}::PluginAvailableActions::context_actions, Slic3r::GUI::anonymous_namespace{PluginsDialog.cpp}::PluginContextAction::danger, Slic3r::GUI::anonymous_namespace{PluginsDialog.cpp}::PluginContextAction::enabled, Slic3r::GUI::anonymous_namespace{PluginsDialog.cpp}::PluginContextAction::id, and Slic3r::GUI::anonymous_namespace{PluginsDialog.cpp}::PluginContextAction::label.

Referenced by build_context_actions_payload(), and build_plugin_payload_item().

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

◆ build_plugin_dialog_item()

PluginDialogItem Slic3r::GUI::anonymous_namespace{PluginsDialog.cpp}::build_plugin_dialog_item ( const PluginDescriptor & descriptor)
295{
296 PluginDialogItem item;
298
299 item.plugin_key = descriptor.plugin_key;
300 item.display_name = descriptor.name;
301 item.description = !descriptor.is_metadata_valid() && descriptor.has_error() ?
302 descriptor.normalized_error() :
303 (descriptor.description.empty() ? _u8L("No description.") : descriptor.description);
304 item.author = descriptor.author;
305 item.version = descriptor.version;
306 // The cloud merge overwrites `version` with the latest cloud version, so prefer the preserved local
307 // one, falling back to `version` for local-only / pre-merge descriptors.
308 item.installed_version = descriptor.has_local_package() ?
309 (descriptor.installed_version.empty() ? descriptor.version : descriptor.installed_version) :
310 std::string{};
311 item.latest_version = descriptor.latest_available_version();
312 item.sort_version = item.installed_version.empty() ? item.latest_version : item.installed_version;
313 // A package that is not loaded has no capabilities, so its row contributes none and does not
314 // expand.
315 const std::vector<std::shared_ptr<PluginCapabilityInterface>> capabilities =
316 manager.get_plugin_capabilities(descriptor.plugin_key, PluginCapabilityType::Unknown, /*only_enabled=*/false);
317
318 const PluginCapabilityType primary_type = capabilities.empty() ? PluginCapabilityType::Unknown : capabilities.front()->type();
319 item.type_label = plugin_capability_type_to_string(primary_type);
320 item.type_key = plugin_capability_type_to_string(primary_type);
321 // "types" is the display-only compatibility list. Cloud plugins show the raw labels the
322 // service returned (which may not map to real capability types); local plugins derive them
323 // from the capabilities actually loaded.
324 if (descriptor.is_cloud_plugin() && !descriptor.display_types.empty()) {
325 for (const std::string& label : descriptor.display_types)
326 if (std::find(item.type_labels.begin(), item.type_labels.end(), label) == item.type_labels.end())
327 item.type_labels.push_back(label);
328 } else {
329 for (const auto& capability : capabilities) {
330 const std::string label = PluginConfig::capability_type_label(capability->type());
331 if (std::find(item.type_labels.begin(), item.type_labels.end(), label) == item.type_labels.end())
332 item.type_labels.push_back(label);
333 }
334 }
335 for (const PluginChangelog& entry : descriptor.changelog)
336 item.changelog.push_back({entry.version, entry.changelog, entry.created_time});
337 item.source = derive_plugin_source(descriptor);
338 item.update_status = descriptor.get_update_status();
339 item.error_text = descriptor.normalized_error();
340 item.has_error = descriptor.has_error();
341 item.is_cloud_plugin = descriptor.is_cloud_plugin();
342 item.orphaned = descriptor.cloud.has_value() && descriptor.cloud->orphaned;
343 item.has_local_package = descriptor.has_local_package();
344 item.unauthorized = descriptor.is_unauthorized();
345 item.is_loaded = manager.is_plugin_loaded(descriptor.plugin_key);
346 item.loading = manager.is_plugin_load_in_progress(descriptor.plugin_key);
347 item.has_script_capability = false;
348 for (const auto& capability : capabilities) {
349 item.capabilities.push_back({capability->identity(), capability->is_enabled(), true, false, capability->config_ui_available()});
350 if (capability->type() == PluginCapabilityType::Script)
351 item.has_script_capability = true;
352 }
353 item.sharing_token = descriptor.sharing_token;
354 item.thumbnail_url = descriptor.thumbnail_url;
355
356 item.status = resolve_plugin_status(item.loading, item.has_error, item.is_loaded);
357
359 const bool has_enabled_script = std::any_of(item.capabilities.begin(), item.capabilities.end(),
360 [](const PluginCapabilityView& capability) {
361 return capability.id.type == PluginCapabilityType::Script && capability.enabled;
362 });
363 item.can_run_script = descriptor.is_metadata_valid() && !descriptor.has_error() && item.has_script_capability && item.is_loaded &&
364 !item.loading && has_enabled_script;
365 for (PluginCapabilityView& capability : item.capabilities) {
366 capability.can_run = item.can_run_script && capability.id.type == PluginCapabilityType::Script && capability.enabled;
367 }
368 return item;
369}
static std::string capability_type_label(PluginCapabilityType type)
Definition PluginConfig.cpp:522
Definition PluginManager.hpp:116
bool is_plugin_loaded(const std::string &plugin_key) const
Definition PluginManager.cpp:674
std::vector< std::shared_ptr< PluginCapabilityInterface > > get_plugin_capabilities(const std::string &plugin_key="", PluginCapabilityType type=PluginCapabilityType::Unknown, bool only_enabled=true) const
Definition PluginManager.cpp:592
static PluginManager & instance()
Definition PluginManager.cpp:74
bool is_plugin_load_in_progress(const std::string &plugin_key) const
Definition PluginManager.cpp:681
std::string thumbnail_url
Definition PluginsDialog.cpp:109
PluginAvailableActions available_actions
Definition PluginsDialog.cpp:131
std::string sort_version
Definition PluginsDialog.cpp:105
PluginUpdateStatus update_status
Definition PluginsDialog.cpp:115
std::string type_label
Definition PluginsDialog.cpp:106
std::string error_text
Definition PluginsDialog.cpp:116
std::string description
Definition PluginsDialog.cpp:100
std::string sharing_token
Definition PluginsDialog.cpp:108
std::vector< std::string > type_labels
Definition PluginsDialog.cpp:110
PluginSource derive_plugin_source(const PluginDescriptor &descriptor)
Definition PluginsDialog.cpp:240
std::vector< PluginCapabilityView > capabilities
Definition PluginsDialog.cpp:129
std::string latest_version
Definition PluginsDialog.cpp:104
PluginAvailableActions evaluate_action_policy(const PluginDialogItem &item)
Definition PluginsDialog.cpp:255
std::string installed_version
Definition PluginsDialog.cpp:103
std::vector< PluginChangelogView > changelog
Definition PluginsDialog.cpp:111
PluginStatus resolve_plugin_status(bool loading, bool has_error, bool is_loaded)
Definition PluginStatus.hpp:38
PluginCapabilityType
Definition PythonPluginInterface.hpp:17
@ Unknown
Definition PythonPluginInterface.hpp:17
@ Script
Definition PythonPluginInterface.hpp:17
std::string plugin_capability_type_to_string(PluginCapabilityType type)
Definition PythonPluginInterface.hpp:40
#define _u8L(s)
Definition I18N.hpp:11
std::string author
Definition PluginDescriptor.hpp:57
std::string description
Definition PluginDescriptor.hpp:56
bool has_error() const
Definition PluginDescriptor.hpp:105
std::string plugin_key
Definition PluginDescriptor.hpp:54
std::string normalized_error() const
Definition PluginDescriptor.hpp:95
bool is_cloud_plugin() const
Definition PluginDescriptor.hpp:82
std::string version
Definition PluginDescriptor.hpp:58
PluginUpdateStatus get_update_status() const
Definition PluginDescriptor.hpp:107
std::string thumbnail_url
Definition PluginDescriptor.hpp:80
std::string latest_available_version() const
Definition PluginDescriptor.hpp:122
bool is_metadata_valid() const
Definition PluginDescriptor.hpp:85
std::vector< PluginChangelog > changelog
Definition PluginDescriptor.hpp:66
std::string name
Definition PluginDescriptor.hpp:55
bool has_local_package() const
Definition PluginDescriptor.hpp:84
bool is_unauthorized() const
Definition PluginDescriptor.hpp:121
std::vector< std::string > display_types
Definition PluginDescriptor.hpp:61
std::string sharing_token
Definition PluginDescriptor.hpp:79

References _u8L, Slic3r::GUI::anonymous_namespace{PluginsDialog.cpp}::PluginDialogItem::author, Slic3r::PluginDescriptor::author, Slic3r::GUI::anonymous_namespace{PluginsDialog.cpp}::PluginDialogItem::available_actions, build_plugin_dialog_item(), Slic3r::GUI::anonymous_namespace{PluginsDialog.cpp}::PluginCapabilityView::can_run, Slic3r::GUI::anonymous_namespace{PluginsDialog.cpp}::PluginDialogItem::can_run_script, Slic3r::GUI::anonymous_namespace{PluginsDialog.cpp}::PluginDialogItem::capabilities, Slic3r::PluginConfig::capability_type_label(), Slic3r::GUI::anonymous_namespace{PluginsDialog.cpp}::PluginDialogItem::changelog, Slic3r::PluginChangelog::changelog, Slic3r::PluginDescriptor::changelog, Slic3r::PluginDescriptor::cloud, Slic3r::PluginChangelog::created_time, derive_plugin_source(), Slic3r::GUI::anonymous_namespace{PluginsDialog.cpp}::PluginDialogItem::description, Slic3r::PluginDescriptor::description, Slic3r::GUI::anonymous_namespace{PluginsDialog.cpp}::PluginDialogItem::display_name, Slic3r::PluginDescriptor::display_types, Slic3r::GUI::anonymous_namespace{PluginsDialog.cpp}::PluginCapabilityView::enabled, Slic3r::GUI::anonymous_namespace{PluginsDialog.cpp}::PluginDialogItem::error_text, evaluate_action_policy(), Slic3r::PluginManager::get_plugin_capabilities(), Slic3r::PluginDescriptor::get_update_status(), Slic3r::GUI::anonymous_namespace{PluginsDialog.cpp}::PluginDialogItem::has_error, Slic3r::PluginDescriptor::has_error(), Slic3r::GUI::anonymous_namespace{PluginsDialog.cpp}::PluginDialogItem::has_local_package, Slic3r::PluginDescriptor::has_local_package(), Slic3r::GUI::anonymous_namespace{PluginsDialog.cpp}::PluginDialogItem::has_script_capability, Slic3r::GUI::anonymous_namespace{PluginsDialog.cpp}::PluginCapabilityView::id, Slic3r::GUI::anonymous_namespace{PluginsDialog.cpp}::PluginDialogItem::installed_version, Slic3r::PluginDescriptor::installed_version, Slic3r::PluginManager::instance(), Slic3r::GUI::anonymous_namespace{PluginsDialog.cpp}::PluginDialogItem::is_cloud_plugin, Slic3r::PluginDescriptor::is_cloud_plugin(), Slic3r::GUI::anonymous_namespace{PluginsDialog.cpp}::PluginDialogItem::is_loaded, Slic3r::PluginDescriptor::is_metadata_valid(), Slic3r::PluginManager::is_plugin_load_in_progress(), Slic3r::PluginManager::is_plugin_loaded(), Slic3r::PluginDescriptor::is_unauthorized(), Slic3r::PluginDescriptor::latest_available_version(), Slic3r::GUI::anonymous_namespace{PluginsDialog.cpp}::PluginDialogItem::latest_version, Slic3r::GUI::anonymous_namespace{PluginsDialog.cpp}::PluginDialogItem::loading, Slic3r::PluginDescriptor::name, Slic3r::PluginDescriptor::normalized_error(), Slic3r::GUI::anonymous_namespace{PluginsDialog.cpp}::PluginDialogItem::orphaned, Slic3r::plugin_capability_type_to_string(), Slic3r::GUI::anonymous_namespace{PluginsDialog.cpp}::PluginDialogItem::plugin_key, Slic3r::PluginDescriptor::plugin_key, Slic3r::GUI::resolve_plugin_status(), Slic3r::Script, Slic3r::GUI::anonymous_namespace{PluginsDialog.cpp}::PluginDialogItem::sharing_token, Slic3r::PluginDescriptor::sharing_token, Slic3r::GUI::anonymous_namespace{PluginsDialog.cpp}::PluginDialogItem::sort_version, Slic3r::GUI::anonymous_namespace{PluginsDialog.cpp}::PluginDialogItem::source, Slic3r::GUI::anonymous_namespace{PluginsDialog.cpp}::PluginDialogItem::status, Slic3r::GUI::anonymous_namespace{PluginsDialog.cpp}::PluginDialogItem::thumbnail_url, Slic3r::PluginDescriptor::thumbnail_url, Slic3r::PluginCapabilityId::type, Slic3r::GUI::anonymous_namespace{PluginsDialog.cpp}::PluginDialogItem::type_key, Slic3r::GUI::anonymous_namespace{PluginsDialog.cpp}::PluginDialogItem::type_label, Slic3r::GUI::anonymous_namespace{PluginsDialog.cpp}::PluginDialogItem::type_labels, Slic3r::GUI::anonymous_namespace{PluginsDialog.cpp}::PluginDialogItem::unauthorized, Slic3r::Unknown, Slic3r::GUI::anonymous_namespace{PluginsDialog.cpp}::PluginDialogItem::update_status, Slic3r::GUI::anonymous_namespace{PluginsDialog.cpp}::PluginDialogItem::version, Slic3r::PluginChangelog::version, and Slic3r::PluginDescriptor::version.

Referenced by build_plugin_dialog_item().

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

◆ build_plugin_payload_item()

nlohmann::json Slic3r::GUI::anonymous_namespace{PluginsDialog.cpp}::build_plugin_payload_item ( const PluginDialogItem & dialog_item)
163{
164 nlohmann::json payload_item;
165 payload_item["plugin_key"] = dialog_item.plugin_key;
166 payload_item["plugin_id"] = dialog_item.plugin_id;
167 payload_item["name"] = dialog_item.display_name;
168 payload_item["description"] = dialog_item.description;
169 payload_item["author"] = dialog_item.author;
170 payload_item["version"] = dialog_item.version;
171 payload_item["type"] = dialog_item.type_label;
172 payload_item["type_key"] = dialog_item.type_key;
173 payload_item["types"] = dialog_item.type_labels;
174
175 nlohmann::json caps = nlohmann::json::array();
176 for (const PluginCapabilityView& capability : dialog_item.capabilities) {
177 nlohmann::json c;
178 c["name"] = capability.id.name;
179 c["type"] = PluginConfig::capability_type_label(capability.id.type);
180 c["type_key"] = plugin_capability_type_to_string(capability.id.type);
181 c["enabled"] = capability.enabled;
182 c["can_toggle"] = capability.can_toggle;
183 c["can_run"] = capability.can_run;
184 c["has_config_ui"] = capability.has_config_ui;
185 caps.push_back(std::move(c));
186 }
187 payload_item["capabilities"] = std::move(caps);
188
189 // The Config tab's sidebar, built by the shared builder so it stays identical to PluginsConfigDialog's.
190 // Not the `capabilities` array above: that is the list tab's, with enable/run state and descriptor-only
191 // rows the config view has no use for.
192 std::vector<PluginCapabilityId> config_ids;
193 for (const PluginCapabilityView& capability : dialog_item.capabilities)
194 if (!capability.id.name.empty())
195 config_ids.push_back(capability.id);
196 payload_item["config_capabilities"] = PluginConfig::capabilities_payload(config_ids);
197
198 nlohmann::json changelog = nlohmann::json::array();
199 for (const PluginChangelogView& entry : dialog_item.changelog) {
200 nlohmann::json c;
201 c["version"] = entry.version;
202 c["changelog"] = entry.changelog;
203 c["created_time"] = entry.created_time;
204 changelog.push_back(std::move(c));
205 }
206 payload_item["changelog"] = std::move(changelog);
207
208 payload_item["label"] = dialog_item.display_name;
209 payload_item["source"] = to_string(dialog_item.source);
210 payload_item["status"] = to_string(dialog_item.status);
211 payload_item["is_loaded"] = dialog_item.is_loaded;
212 payload_item["error"] = dialog_item.error_text;
213 payload_item["update_status"] = to_string(dialog_item.update_status);
214 payload_item["unauthorized"] = dialog_item.unauthorized;
215 payload_item["context_actions"] = build_context_actions_payload(dialog_item.available_actions);
216 payload_item["update_available"] = dialog_item.update_status == PluginUpdateStatus::UpdateAvailable;
217 payload_item["can_toggle"] = dialog_item.available_actions.can_toggle;
218 payload_item["has_script_capability"] = dialog_item.has_script_capability;
219 payload_item["can_run_script"] = dialog_item.can_run_script;
220 payload_item["sharing_token"] = dialog_item.sharing_token;
221 payload_item["thumbnail_url"] = dialog_item.thumbnail_url;
222 payload_item["installed"] = dialog_item.has_local_package;
223 payload_item["orphaned"] = dialog_item.orphaned;
224 payload_item["installed_version"] = dialog_item.installed_version;
225 payload_item["latest_version"] = dialog_item.latest_version;
226 return payload_item;
227}
static nlohmann::json capabilities_payload(const std::vector< PluginCapabilityId > &caps)
Definition PluginConfig.cpp:538
std::string to_string(PluginUpdateStatus status)
Definition PluginsDialog.cpp:229
nlohmann::json build_context_actions_payload(const PluginAvailableActions &available_actions)
Definition PluginsDialog.cpp:378
PluginCapabilityId id
Definition PluginsDialog.cpp:78
@ UpdateAvailable
Definition PluginDescriptor.hpp:30
PluginCapabilityType type
Definition PythonPluginInterface.hpp:21
std::string name
Definition PythonPluginInterface.hpp:22

References Slic3r::GUI::anonymous_namespace{PluginsDialog.cpp}::PluginDialogItem::author, Slic3r::GUI::anonymous_namespace{PluginsDialog.cpp}::PluginDialogItem::available_actions, build_context_actions_payload(), build_plugin_payload_item(), Slic3r::GUI::anonymous_namespace{PluginsDialog.cpp}::PluginCapabilityView::can_run, Slic3r::GUI::anonymous_namespace{PluginsDialog.cpp}::PluginDialogItem::can_run_script, Slic3r::GUI::anonymous_namespace{PluginsDialog.cpp}::PluginAvailableActions::can_toggle, Slic3r::GUI::anonymous_namespace{PluginsDialog.cpp}::PluginCapabilityView::can_toggle, Slic3r::GUI::anonymous_namespace{PluginsDialog.cpp}::PluginDialogItem::capabilities, Slic3r::PluginConfig::capabilities_payload(), Slic3r::PluginConfig::capability_type_label(), Slic3r::GUI::anonymous_namespace{PluginsDialog.cpp}::PluginChangelogView::changelog, Slic3r::GUI::anonymous_namespace{PluginsDialog.cpp}::PluginDialogItem::changelog, Slic3r::GUI::anonymous_namespace{PluginsDialog.cpp}::PluginChangelogView::created_time, Slic3r::GUI::anonymous_namespace{PluginsDialog.cpp}::PluginDialogItem::description, Slic3r::GUI::anonymous_namespace{PluginsDialog.cpp}::PluginDialogItem::display_name, Slic3r::GUI::anonymous_namespace{PluginsDialog.cpp}::PluginCapabilityView::enabled, Slic3r::GUI::anonymous_namespace{PluginsDialog.cpp}::PluginDialogItem::error_text, Slic3r::GUI::anonymous_namespace{PluginsDialog.cpp}::PluginCapabilityView::has_config_ui, Slic3r::GUI::anonymous_namespace{PluginsDialog.cpp}::PluginDialogItem::has_local_package, Slic3r::GUI::anonymous_namespace{PluginsDialog.cpp}::PluginDialogItem::has_script_capability, Slic3r::GUI::anonymous_namespace{PluginsDialog.cpp}::PluginCapabilityView::id, Slic3r::GUI::anonymous_namespace{PluginsDialog.cpp}::PluginDialogItem::installed_version, Slic3r::GUI::anonymous_namespace{PluginsDialog.cpp}::PluginDialogItem::is_loaded, Slic3r::GUI::anonymous_namespace{PluginsDialog.cpp}::PluginDialogItem::latest_version, Slic3r::PluginCapabilityId::name, Slic3r::GUI::anonymous_namespace{PluginsDialog.cpp}::PluginDialogItem::orphaned, Slic3r::plugin_capability_type_to_string(), Slic3r::GUI::anonymous_namespace{PluginsDialog.cpp}::PluginDialogItem::plugin_id, Slic3r::GUI::anonymous_namespace{PluginsDialog.cpp}::PluginDialogItem::plugin_key, Slic3r::GUI::anonymous_namespace{PluginsDialog.cpp}::PluginDialogItem::sharing_token, Slic3r::GUI::anonymous_namespace{PluginsDialog.cpp}::PluginDialogItem::source, Slic3r::GUI::anonymous_namespace{PluginsDialog.cpp}::PluginDialogItem::status, Slic3r::GUI::anonymous_namespace{PluginsDialog.cpp}::PluginDialogItem::thumbnail_url, Slic3r::GUI::to_string(), Slic3r::PluginCapabilityId::type, Slic3r::GUI::anonymous_namespace{PluginsDialog.cpp}::PluginDialogItem::type_key, Slic3r::GUI::anonymous_namespace{PluginsDialog.cpp}::PluginDialogItem::type_label, Slic3r::GUI::anonymous_namespace{PluginsDialog.cpp}::PluginDialogItem::type_labels, Slic3r::GUI::anonymous_namespace{PluginsDialog.cpp}::PluginDialogItem::unauthorized, Slic3r::GUI::anonymous_namespace{PluginsDialog.cpp}::PluginDialogItem::update_status, Slic3r::UpdateAvailable, Slic3r::GUI::anonymous_namespace{PluginsDialog.cpp}::PluginChangelogView::version, and Slic3r::GUI::anonymous_namespace{PluginsDialog.cpp}::PluginDialogItem::version.

Referenced by build_plugin_payload_item().

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

◆ current_cloud_metadata_snapshot()

std::vector< PluginDescriptor > Slic3r::GUI::anonymous_namespace{PluginsDialog.cpp}::current_cloud_metadata_snapshot ( )
423{
424 std::vector<PluginDescriptor> cloud_entries;
425 for (const PluginDescriptor& entry : PluginManager::instance().get_plugin_descriptors(/*include_invalid=*/true))
426 if (entry.is_cloud_plugin())
427 cloud_entries.push_back(entry);
428 return cloud_entries;
429}
Definition PluginDescriptor.hpp:53

References current_cloud_metadata_snapshot(), and Slic3r::PluginManager::instance().

Referenced by current_cloud_metadata_snapshot().

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

◆ derive_plugin_source()

PluginSource Slic3r::GUI::anonymous_namespace{PluginsDialog.cpp}::derive_plugin_source ( const PluginDescriptor & descriptor)
241{
242 const bool has_cloud_meta = descriptor.cloud.has_value();
243 const bool is_cloud = descriptor.is_cloud_plugin();
244 const bool is_mine = is_cloud && has_cloud_meta && descriptor.cloud->is_mine;
245
246 if (is_cloud && has_cloud_meta && descriptor.cloud->orphaned)
248 if (is_mine)
249 return PluginSource::Mine;
250 if (is_cloud)
252 return PluginSource::Local;
253}
@ Local
Definition PluginSource.hpp:15
@ Subscribed
Definition PluginSource.hpp:13
@ Orphaned
Definition PluginSource.hpp:14
@ Mine
Definition PluginSource.hpp:12

References Slic3r::PluginDescriptor::cloud, derive_plugin_source(), Slic3r::PluginDescriptor::is_cloud_plugin(), Slic3r::GUI::Local, Slic3r::GUI::Mine, Slic3r::GUI::Orphaned, and Slic3r::GUI::Subscribed.

Referenced by build_plugin_dialog_item(), and derive_plugin_source().

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

◆ evaluate_action_policy()

PluginAvailableActions Slic3r::GUI::anonymous_namespace{PluginsDialog.cpp}::evaluate_action_policy ( const PluginDialogItem & item)
256{
257 PluginAvailableActions available_actions;
258 const bool is_loading = item.status == PluginStatus::Loading;
259 const bool is_cloud = item.is_cloud_plugin;
260 const bool is_orphaned = item.orphaned;
261 const bool is_mine = item.source == PluginSource::Mine;
262 const bool has_local = item.has_local_package;
263 const bool authorized_for_install = !item.unauthorized;
264
265 available_actions.toggle_installs_cloud_plugin = is_cloud && !is_orphaned && !has_local && authorized_for_install;
266 available_actions.can_toggle = !is_loading && (has_local || available_actions.toggle_installs_cloud_plugin);
267
268 auto add_action = [&available_actions](const char* id, const char* label, bool enabled = true, bool danger = false) {
269 available_actions.context_actions.push_back(PluginContextAction{id, _u8L(label), enabled, danger});
270 };
271
272 // Owned cloud plugins fall through to the local delete: it removes the installed package only.
273 // Deleting a plugin from the cloud is a plugin hub operation and is never offered here.
274 if (is_cloud && !is_orphaned && !is_mine) {
275 add_action("unsubscribe_plugin", L("Unsubscribe"), true, true);
276 } else if (has_local) {
277 add_action("delete_plugin", L("Delete"), true, true);
278 }
279
280 add_action("open_folder", L("Show in folder"), has_local);
281
282 if (!is_orphaned) {
283 if (is_cloud) {
284 add_action("reinstall_plugin", L("Reinstall"));
285 } else {
286 add_action("reload_plugin", L("Reload"));
287 add_action("clear_cache_reload_plugin", L("Delete cache and reload"));
288 }
289 }
290
291 return available_actions;
292}
#define L(s)
Definition ExtrusionEntity.cpp:25
@ Loading
Definition PluginStatus.hpp:16

References _u8L, Slic3r::GUI::anonymous_namespace{PluginsDialog.cpp}::PluginAvailableActions::can_toggle, Slic3r::GUI::anonymous_namespace{PluginsDialog.cpp}::PluginAvailableActions::context_actions, evaluate_action_policy(), Slic3r::GUI::anonymous_namespace{PluginsDialog.cpp}::PluginDialogItem::has_local_package, Slic3r::GUI::anonymous_namespace{PluginsDialog.cpp}::PluginDialogItem::is_cloud_plugin, L, Slic3r::GUI::Loading, Slic3r::GUI::Mine, Slic3r::GUI::anonymous_namespace{PluginsDialog.cpp}::PluginDialogItem::orphaned, Slic3r::GUI::anonymous_namespace{PluginsDialog.cpp}::PluginDialogItem::source, Slic3r::GUI::anonymous_namespace{PluginsDialog.cpp}::PluginDialogItem::status, Slic3r::GUI::anonymous_namespace{PluginsDialog.cpp}::PluginAvailableActions::toggle_installs_cloud_plugin, and Slic3r::GUI::anonymous_namespace{PluginsDialog.cpp}::PluginDialogItem::unauthorized.

Referenced by build_plugin_dialog_item(), and evaluate_action_policy().

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

◆ find_context_action()

const PluginContextAction * Slic3r::GUI::anonymous_namespace{PluginsDialog.cpp}::find_context_action ( const PluginAvailableActions & available_actions,
const std::string & action_id )
372{
373 const auto it = std::find_if(available_actions.context_actions.begin(), available_actions.context_actions.end(),
374 [&action_id](const PluginContextAction& action) { return action.id == action_id; });
375 return it != available_actions.context_actions.end() ? &(*it) : nullptr;
376}

References Slic3r::GUI::anonymous_namespace{PluginsDialog.cpp}::PluginAvailableActions::context_actions, and find_context_action().

Referenced by find_context_action().

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

◆ primary_capability_type_of()

PluginCapabilityType Slic3r::GUI::anonymous_namespace{PluginsDialog.cpp}::primary_capability_type_of ( PluginManager & manager,
const std::string & plugin_key )
139{
140 const auto capabilities = manager.get_plugin_capabilities(plugin_key, PluginCapabilityType::Unknown, /*only_enabled=*/false);
141 return capabilities.empty() ? PluginCapabilityType::Unknown : capabilities.front()->type();
142}

References Slic3r::PluginManager::get_plugin_capabilities(), primary_capability_type_of(), and Slic3r::Unknown.

Referenced by primary_capability_type_of().

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

◆ store_plugin_operation_result()

void Slic3r::GUI::anonymous_namespace{PluginsDialog.cpp}::store_plugin_operation_result ( const std::shared_ptr< PluginOperationState > & state,
bool succeeded,
std::string error )
402{
403 std::lock_guard<std::mutex> lock(state->mutex);
404 state->succeeded = succeeded;
405 state->error = std::move(error);
406}

References store_plugin_operation_result().

Referenced by store_plugin_operation_result().

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

◆ take_plugin_operation_result()

bool Slic3r::GUI::anonymous_namespace{PluginsDialog.cpp}::take_plugin_operation_result ( const std::shared_ptr< PluginOperationState > & state,
std::string & error )
409{
410 std::lock_guard<std::mutex> lock(state->mutex);
411 error = std::move(state->error);
412 return state->succeeded;
413}

References take_plugin_operation_result().

Referenced by take_plugin_operation_result().

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

◆ to_string()

std::string Slic3r::GUI::anonymous_namespace{PluginsDialog.cpp}::to_string ( PluginUpdateStatus status)
230{
231 switch (status) {
232 case PluginUpdateStatus::Normal: return "normal";
233 case PluginUpdateStatus::UpdateAvailable: return "update_available";
234 case PluginUpdateStatus::Unauthorized: return "unauthorized";
235 }
236
237 return "normal";
238}
@ Normal
Definition PluginDescriptor.hpp:29
@ Unauthorized
Definition PluginDescriptor.hpp:31

References Slic3r::Normal, Slic3r::Unauthorized, and Slic3r::UpdateAvailable.

Variable Documentation

◆ kDeletePluginTitle

const wxString Slic3r::GUI::anonymous_namespace{PluginsDialog.cpp}::kDeletePluginTitle = _L("Delete Plugin")

◆ kFetchCloudMeta

bool Slic3r::GUI::anonymous_namespace{PluginsDialog.cpp}::kFetchCloudMeta = true
constexpr

◆ kOverwritePluginTitle

const wxString Slic3r::GUI::anonymous_namespace{PluginsDialog.cpp}::kOverwritePluginTitle = _L("Overwrite Plugin")

◆ kUnsubscribeTitle

const wxString Slic3r::GUI::anonymous_namespace{PluginsDialog.cpp}::kUnsubscribeTitle = _L("Unsubscribe")

◆ kUseCurrentCloudMeta

bool Slic3r::GUI::anonymous_namespace{PluginsDialog.cpp}::kUseCurrentCloudMeta = false
constexpr

◆ s_selected_plugin_install_action

std::string Slic3r::GUI::anonymous_namespace{PluginsDialog.cpp}::s_selected_plugin_install_action = "explore"