If configuration update is available, show Dialog with information about it before ConfigWizard is opened
This commit is contained in:
parent
cfad1a59be
commit
3cf73f6a06
@ -1688,6 +1688,9 @@ void GUI_App::add_config_menu(wxMenuBar *menu)
|
|||||||
|
|
||||||
// Load the currently selected preset into the GUI, update the preset selection box.
|
// Load the currently selected preset into the GUI, update the preset selection box.
|
||||||
load_current_presets();
|
load_current_presets();
|
||||||
|
|
||||||
|
// update config wizard in respect to the new config
|
||||||
|
update_wizard_from_config();
|
||||||
} catch (std::exception &ex) {
|
} catch (std::exception &ex) {
|
||||||
GUI::show_error(nullptr, _L("Failed to activate configuration snapshot.") + "\n" + into_u8(ex.what()));
|
GUI::show_error(nullptr, _L("Failed to activate configuration snapshot.") + "\n" + into_u8(ex.what()));
|
||||||
}
|
}
|
||||||
@ -1864,6 +1867,17 @@ void GUI_App::load_current_presets(bool check_printer_presets_ /*= true*/)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void GUI_App::update_wizard_from_config()
|
||||||
|
{
|
||||||
|
if (!m_wizard)
|
||||||
|
return;
|
||||||
|
// If ConfigWizard was created before changing of the configuration,
|
||||||
|
// we have to destroy it to have possibility to create it again in respect to the new config's parameters
|
||||||
|
m_wizard->Reparent(nullptr);
|
||||||
|
m_wizard->Destroy();
|
||||||
|
m_wizard = nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
bool GUI_App::OnExceptionInMainLoop()
|
bool GUI_App::OnExceptionInMainLoop()
|
||||||
{
|
{
|
||||||
generic_exception_handle();
|
generic_exception_handle();
|
||||||
@ -2024,7 +2038,13 @@ bool GUI_App::run_wizard(ConfigWizard::RunReason reason, ConfigWizard::StartPage
|
|||||||
{
|
{
|
||||||
wxCHECK_MSG(mainframe != nullptr, false, "Internal error: Main frame not created / null");
|
wxCHECK_MSG(mainframe != nullptr, false, "Internal error: Main frame not created / null");
|
||||||
|
|
||||||
|
if (reason == ConfigWizard::RR_USER)
|
||||||
|
if (PresetUpdater::UpdateResult result = preset_updater->config_update(app_config->orig_version(), PresetUpdater::UpdateParams::FORCED_BEFORE_WIZARD);
|
||||||
|
result == PresetUpdater::R_ALL_CANCELED)
|
||||||
|
return false;
|
||||||
|
|
||||||
if (! m_wizard) {
|
if (! m_wizard) {
|
||||||
|
wxBusyCursor wait;
|
||||||
m_wizard = new ConfigWizard(mainframe);
|
m_wizard = new ConfigWizard(mainframe);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2183,7 +2203,7 @@ void GUI_App::check_updates(const bool verbose)
|
|||||||
{
|
{
|
||||||
PresetUpdater::UpdateResult updater_result;
|
PresetUpdater::UpdateResult updater_result;
|
||||||
try {
|
try {
|
||||||
updater_result = preset_updater->config_update(app_config->orig_version(), verbose);
|
updater_result = preset_updater->config_update(app_config->orig_version(), verbose ? PresetUpdater::UpdateParams::SHOW_TEXT_BOX : PresetUpdater::UpdateParams::SHOW_NOTIFICATION);
|
||||||
if (updater_result == PresetUpdater::R_INCOMPAT_EXIT) {
|
if (updater_result == PresetUpdater::R_INCOMPAT_EXIT) {
|
||||||
mainframe->Close();
|
mainframe->Close();
|
||||||
}
|
}
|
||||||
|
@ -211,6 +211,7 @@ public:
|
|||||||
bool check_print_host_queue();
|
bool check_print_host_queue();
|
||||||
bool checked_tab(Tab* tab);
|
bool checked_tab(Tab* tab);
|
||||||
void load_current_presets(bool check_printer_presets = true);
|
void load_current_presets(bool check_printer_presets = true);
|
||||||
|
void update_wizard_from_config();
|
||||||
|
|
||||||
wxString current_language_code() const { return m_wxLocale->GetCanonicalName(); }
|
wxString current_language_code() const { return m_wxLocale->GetCanonicalName(); }
|
||||||
// Translate the language code to a code, for which Prusa Research maintains translations. Defaults to "en_US".
|
// Translate the language code to a code, for which Prusa Research maintains translations. Defaults to "en_US".
|
||||||
|
@ -85,8 +85,11 @@ bool MsgUpdateSlic3r::disable_version_check() const
|
|||||||
|
|
||||||
// MsgUpdateConfig
|
// MsgUpdateConfig
|
||||||
|
|
||||||
MsgUpdateConfig::MsgUpdateConfig(const std::vector<Update> &updates) :
|
MsgUpdateConfig::MsgUpdateConfig(const std::vector<Update> &updates, bool force_before_wizard/* = false*/) :
|
||||||
MsgDialog(nullptr, _(L("Configuration update")), _(L("Configuration update is available")), wxID_NONE)
|
MsgDialog(nullptr, force_before_wizard ? _L("Opening Configuration Wizard") : _L("Configuration update"),
|
||||||
|
force_before_wizard ? _L("PrusaSlicer is not using the newest configuration available.\n"
|
||||||
|
"Configuration Wizard may not offer the latest printers, filaments and SLA materials to be installed. ") :
|
||||||
|
_L("Configuration update is available"), wxID_NONE)
|
||||||
{
|
{
|
||||||
auto *text = new wxStaticText(this, wxID_ANY, _(L(
|
auto *text = new wxStaticText(this, wxID_ANY, _(L(
|
||||||
"Would you like to install it?\n\n"
|
"Would you like to install it?\n\n"
|
||||||
@ -130,11 +133,17 @@ MsgUpdateConfig::MsgUpdateConfig(const std::vector<Update> &updates) :
|
|||||||
content_sizer->Add(versions);
|
content_sizer->Add(versions);
|
||||||
content_sizer->AddSpacer(2*VERT_SPACING);
|
content_sizer->AddSpacer(2*VERT_SPACING);
|
||||||
|
|
||||||
|
auto* btn_ok = new wxButton(this, wxID_OK, force_before_wizard ? _L("Install") : "OK");
|
||||||
|
btn_sizer->Add(btn_ok);
|
||||||
|
btn_sizer->AddSpacer(HORIZ_SPACING);
|
||||||
|
if (force_before_wizard) {
|
||||||
|
auto* btn_no_install = new wxButton(this, wxID_ANY, "Don't install");
|
||||||
|
btn_no_install->Bind(wxEVT_BUTTON, [this](wxEvent&) { this->EndModal(wxID_CLOSE); });
|
||||||
|
btn_sizer->Add(btn_no_install);
|
||||||
|
btn_sizer->AddSpacer(HORIZ_SPACING);
|
||||||
|
}
|
||||||
auto* btn_cancel = new wxButton(this, wxID_CANCEL);
|
auto* btn_cancel = new wxButton(this, wxID_CANCEL);
|
||||||
btn_sizer->Add(btn_cancel);
|
btn_sizer->Add(btn_cancel);
|
||||||
btn_sizer->AddSpacer(HORIZ_SPACING);
|
|
||||||
auto *btn_ok = new wxButton(this, wxID_OK);
|
|
||||||
btn_sizer->Add(btn_ok);
|
|
||||||
btn_ok->SetFocus();
|
btn_ok->SetFocus();
|
||||||
|
|
||||||
Fit();
|
Fit();
|
||||||
|
@ -54,7 +54,8 @@ public:
|
|||||||
{}
|
{}
|
||||||
};
|
};
|
||||||
|
|
||||||
MsgUpdateConfig(const std::vector<Update> &updates);
|
// force_before_wizard - indicates that check of updated is forced before ConfigWizard opening
|
||||||
|
MsgUpdateConfig(const std::vector<Update> &updates, bool force_before_wizard = false);
|
||||||
MsgUpdateConfig(MsgUpdateConfig &&) = delete;
|
MsgUpdateConfig(MsgUpdateConfig &&) = delete;
|
||||||
MsgUpdateConfig(const MsgUpdateConfig &) = delete;
|
MsgUpdateConfig(const MsgUpdateConfig &) = delete;
|
||||||
MsgUpdateConfig &operator=(MsgUpdateConfig &&) = delete;
|
MsgUpdateConfig &operator=(MsgUpdateConfig &&) = delete;
|
||||||
|
@ -724,9 +724,10 @@ static void reload_configs_update_gui()
|
|||||||
GUI::wxGetApp().preset_bundle->load_presets(*app_config, ForwardCompatibilitySubstitutionRule::EnableSilentDisableSystem);
|
GUI::wxGetApp().preset_bundle->load_presets(*app_config, ForwardCompatibilitySubstitutionRule::EnableSilentDisableSystem);
|
||||||
GUI::wxGetApp().load_current_presets();
|
GUI::wxGetApp().load_current_presets();
|
||||||
GUI::wxGetApp().plater()->set_bed_shape();
|
GUI::wxGetApp().plater()->set_bed_shape();
|
||||||
|
GUI::wxGetApp().update_wizard_from_config();
|
||||||
}
|
}
|
||||||
|
|
||||||
PresetUpdater::UpdateResult PresetUpdater::config_update(const Semver& old_slic3r_version, bool no_notification) const
|
PresetUpdater::UpdateResult PresetUpdater::config_update(const Semver& old_slic3r_version, UpdateParams params) const
|
||||||
{
|
{
|
||||||
if (! p->enabled_config_update) { return R_NOOP; }
|
if (! p->enabled_config_update) { return R_NOOP; }
|
||||||
|
|
||||||
@ -809,7 +810,11 @@ PresetUpdater::UpdateResult PresetUpdater::config_update(const Semver& old_slic3
|
|||||||
}
|
}
|
||||||
|
|
||||||
// regular update
|
// regular update
|
||||||
if (no_notification) {
|
if (params == UpdateParams::SHOW_NOTIFICATION) {
|
||||||
|
p->set_waiting_updates(updates);
|
||||||
|
GUI::wxGetApp().plater()->get_notification_manager()->push_notification(GUI::NotificationType::PresetUpdateAvailable);
|
||||||
|
}
|
||||||
|
else {
|
||||||
BOOST_LOG_TRIVIAL(info) << format("Update of %1% bundles available. Asking for confirmation ...", p->waiting_updates.updates.size());
|
BOOST_LOG_TRIVIAL(info) << format("Update of %1% bundles available. Asking for confirmation ...", p->waiting_updates.updates.size());
|
||||||
|
|
||||||
std::vector<GUI::MsgUpdateConfig::Update> updates_msg;
|
std::vector<GUI::MsgUpdateConfig::Update> updates_msg;
|
||||||
@ -818,7 +823,7 @@ PresetUpdater::UpdateResult PresetUpdater::config_update(const Semver& old_slic3
|
|||||||
updates_msg.emplace_back(update.vendor, update.version.config_version, update.version.comment, std::move(changelog_url));
|
updates_msg.emplace_back(update.vendor, update.version.config_version, update.version.comment, std::move(changelog_url));
|
||||||
}
|
}
|
||||||
|
|
||||||
GUI::MsgUpdateConfig dlg(updates_msg);
|
GUI::MsgUpdateConfig dlg(updates_msg, params == UpdateParams::FORCED_BEFORE_WIZARD);
|
||||||
|
|
||||||
const auto res = dlg.ShowModal();
|
const auto res = dlg.ShowModal();
|
||||||
if (res == wxID_OK) {
|
if (res == wxID_OK) {
|
||||||
@ -829,11 +834,10 @@ PresetUpdater::UpdateResult PresetUpdater::config_update(const Semver& old_slic3
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
BOOST_LOG_TRIVIAL(info) << "User refused the update";
|
BOOST_LOG_TRIVIAL(info) << "User refused the update";
|
||||||
|
if (params == UpdateParams::FORCED_BEFORE_WIZARD && res == wxID_CANCEL)
|
||||||
|
return R_ALL_CANCELED;
|
||||||
return R_UPDATE_REJECT;
|
return R_UPDATE_REJECT;
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
p->set_waiting_updates(updates);
|
|
||||||
GUI::wxGetApp().plater()->get_notification_manager()->push_notification(GUI::NotificationType::PresetUpdateAvailable);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// MsgUpdateConfig will show after the notificaation is clicked
|
// MsgUpdateConfig will show after the notificaation is clicked
|
||||||
|
@ -35,15 +35,21 @@ public:
|
|||||||
R_INCOMPAT_CONFIGURED,
|
R_INCOMPAT_CONFIGURED,
|
||||||
R_UPDATE_INSTALLED,
|
R_UPDATE_INSTALLED,
|
||||||
R_UPDATE_REJECT,
|
R_UPDATE_REJECT,
|
||||||
R_UPDATE_NOTIFICATION
|
R_UPDATE_NOTIFICATION,
|
||||||
|
R_ALL_CANCELED
|
||||||
|
};
|
||||||
|
|
||||||
|
enum class UpdateParams {
|
||||||
|
SHOW_TEXT_BOX, // force modal textbox
|
||||||
|
SHOW_NOTIFICATION, // only shows notification
|
||||||
|
FORCED_BEFORE_WIZARD // indicates that check of updated is forced before ConfigWizard opening
|
||||||
};
|
};
|
||||||
|
|
||||||
// If updating is enabled, check if updates are available in cache, if so, ask about installation.
|
// If updating is enabled, check if updates are available in cache, if so, ask about installation.
|
||||||
// A false return value implies Slic3r should exit due to incompatibility of configuration.
|
// A false return value implies Slic3r should exit due to incompatibility of configuration.
|
||||||
// Providing old slic3r version upgrade profiles on upgrade of an application even in case
|
// Providing old slic3r version upgrade profiles on upgrade of an application even in case
|
||||||
// that the config index installed from the Internet is equal to the index contained in the installation package.
|
// that the config index installed from the Internet is equal to the index contained in the installation package.
|
||||||
// no_notification = force modal textbox, otherwise some cases only shows notification
|
UpdateResult config_update(const Semver &old_slic3r_version, UpdateParams params) const;
|
||||||
UpdateResult config_update(const Semver &old_slic3r_version, bool no_notification) const;
|
|
||||||
|
|
||||||
// "Update" a list of bundles from resources (behaves like an online update).
|
// "Update" a list of bundles from resources (behaves like an online update).
|
||||||
void install_bundles_rsrc(std::vector<std::string> bundles, bool snapshot = true) const;
|
void install_bundles_rsrc(std::vector<std::string> bundles, bool snapshot = true) const;
|
||||||
|
Loading…
Reference in New Issue
Block a user