fix merge conflicts

This commit is contained in:
Ian Chua
2026-07-15 21:04:42 +08:00
1025 changed files with 214944 additions and 22055 deletions

View File

@@ -7,6 +7,8 @@
#include "PluginSort.hpp"
#include "slic3r/plugin/PluginDescriptor.hpp"
#include <atomic>
#include <boost/log/trivial.hpp>
#include <exception>
#include <functional>
#include <memory>
@@ -17,6 +19,7 @@
#include <type_traits>
#include <utility>
#include <wx/evtloop.h>
#include <wx/app.h>
#include <wx/progdlg.h>
#include <wx/string.h>
#include <wx/timer.h>
@@ -25,7 +28,7 @@ class wxTimer;
namespace Slic3r {
struct LoadedPluginCapability;
class PluginCapabilityInterface;
enum class PluginCapabilityType;
namespace GUI {
@@ -55,7 +58,7 @@ private:
nlohmann::json build_plugins_payload() const;
bool get_descriptor(const std::string& plugin_key, Slic3r::PluginDescriptor& descriptor) const;
std::shared_ptr<LoadedPluginCapability> get_capability(const std::string& plugin_key, PluginCapabilityType type, const std::string& capability_name) const;
std::shared_ptr<PluginCapabilityInterface> get_capability(const std::string& plugin_key, PluginCapabilityType type, const std::string& capability_name) const;
void refresh_plugin_catalog_async(const wxString& title, const wxString& message, bool fetch_cloud);
void refresh_plugins();
@@ -100,34 +103,51 @@ private:
const wxString& title,
const wxString& message,
int maximum = 100,
int style = wxPD_APP_MODAL | wxPD_AUTO_HIDE)
int style = wxPD_APP_MODAL | wxPD_AUTO_HIDE,
bool finish_after_dialog_destroyed = false)
{
const auto alive = m_alive;
wxProgressDialog* progress = new wxProgressDialog(title, message, maximum, this, style);
wxTimer* timer = new wxTimer();
timer->Bind(wxEVT_TIMER, [progress, message](wxTimerEvent&) {
if (progress)
timer->Bind(wxEVT_TIMER, [alive, progress, message](wxTimerEvent&) {
if (alive->load(std::memory_order_acquire) && progress)
progress->Pulse(message);
});
timer->Start(100);
std::thread([this,
std::thread([alive,
progress,
timer,
run = std::forward<Run>(run),
on_finish = std::forward<OnFinish>(on_finish)]() mutable {
on_finish = std::forward<OnFinish>(on_finish),
finish_after_dialog_destroyed]() mutable {
try {
run();
} catch (const std::exception& ex) {
BOOST_LOG_TRIVIAL(error) << "Plugin dialog worker failed: " << ex.what();
} catch (...) {
BOOST_LOG_TRIVIAL(error) << "Plugin dialog worker failed with an unknown exception";
}
CallAfter([progress, timer, on_finish = std::move(on_finish)]() mutable {
if (wxTheApp == nullptr)
return;
wxTheApp->CallAfter([alive,
progress,
timer,
on_finish = std::move(on_finish),
finish_after_dialog_destroyed]() mutable {
timer->Stop();
delete timer;
progress->Destroy();
on_finish();
if (alive->load(std::memory_order_acquire)) {
progress->Destroy();
on_finish();
} else if (finish_after_dialog_destroyed) {
on_finish();
}
});
}).detach();
}
@@ -166,7 +186,7 @@ private:
state->exception = std::current_exception();
}
},
on_finish, title, message, maximum, style);
on_finish, title, message, maximum, style, true);
if (!finished)
loop.Run();
@@ -199,7 +219,7 @@ private:
state->exception = std::current_exception();
}
},
on_finish, title, message, maximum, style);
on_finish, title, message, maximum, style, true);
if (!finished)
loop.Run();
@@ -219,6 +239,7 @@ private:
}
std::function<void()> m_open_terminal_dlg_fn;
std::shared_ptr<std::atomic<bool>> m_alive = std::make_shared<std::atomic<bool>>(true);
PluginSortKey m_plugin_sort_key = PluginSortKey::None;
PluginSortOrder m_plugin_sort_order = PluginSortOrder::Asc;