mirror of
				https://github.com/SoftFever/OrcaSlicer.git
				synced 2025-10-30 20:21:12 -06:00 
			
		
		
		
	If configuration update is available, show Dialog with information about it before ConfigWizard is opened
This commit is contained in:
		
							parent
							
								
									5dac5a2ca5
								
							
						
					
					
						commit
						4cbe7a9545
					
				
					 6 changed files with 58 additions and 17 deletions
				
			
		|  | @ -1886,6 +1886,9 @@ void GUI_App::add_config_menu(wxMenuBar *menu) | |||
| 
 | ||||
|                         // Load the currently selected preset into the GUI, update the preset selection box.
 | ||||
|                         load_current_presets(); | ||||
| 
 | ||||
|                         // update config wizard in respect to the new config
 | ||||
|                         update_wizard_from_config(); | ||||
|                     } catch (std::exception &ex) { | ||||
|                         GUI::show_error(nullptr, _L("Failed to activate configuration snapshot.") + "\n" + into_u8(ex.what())); | ||||
|                     } | ||||
|  | @ -2137,6 +2140,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() | ||||
| { | ||||
|     generic_exception_handle(); | ||||
|  | @ -2297,7 +2311,13 @@ bool GUI_App::run_wizard(ConfigWizard::RunReason reason, ConfigWizard::StartPage | |||
| { | ||||
|     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) { | ||||
|         wxBusyCursor wait; | ||||
|         m_wizard = new ConfigWizard(mainframe); | ||||
|     } | ||||
| 
 | ||||
|  | @ -2465,7 +2485,7 @@ void GUI_App::check_updates(const bool verbose) | |||
| {	 | ||||
| 	PresetUpdater::UpdateResult updater_result; | ||||
| 	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) { | ||||
| 			mainframe->Close(); | ||||
| 		} | ||||
|  |  | |||
|  | @ -247,6 +247,7 @@ public: | |||
|     bool            check_print_host_queue(); | ||||
|     bool            checked_tab(Tab* tab); | ||||
|     void            load_current_presets(bool check_printer_presets = true); | ||||
|     void            update_wizard_from_config(); | ||||
| 
 | ||||
|     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".
 | ||||
|  |  | |||
|  | @ -85,8 +85,11 @@ bool MsgUpdateSlic3r::disable_version_check() const | |||
| 
 | ||||
| // MsgUpdateConfig
 | ||||
| 
 | ||||
| MsgUpdateConfig::MsgUpdateConfig(const std::vector<Update> &updates) : | ||||
| 	MsgDialog(nullptr, _(L("Configuration update")), _(L("Configuration update is available")), wxID_NONE) | ||||
| MsgUpdateConfig::MsgUpdateConfig(const std::vector<Update> &updates, bool force_before_wizard/* = false*/) : | ||||
| 	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( | ||||
| 		"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->AddSpacer(2*VERT_SPACING); | ||||
| 
 | ||||
| 	auto *btn_cancel = new wxButton(this, wxID_CANCEL); | ||||
| 	btn_sizer->Add(btn_cancel); | ||||
| 	btn_sizer->AddSpacer(HORIZ_SPACING); | ||||
| 	auto *btn_ok = new wxButton(this, wxID_OK); | ||||
| 	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); | ||||
| 	btn_sizer->Add(btn_cancel); | ||||
| 	btn_ok->SetFocus(); | ||||
| 
 | ||||
| 	wxGetApp().UpdateDlgDarkUI(this); | ||||
|  |  | |||
|  | @ -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(const 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().load_current_presets(); | ||||
| 	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; } | ||||
| 
 | ||||
|  | @ -809,7 +810,11 @@ PresetUpdater::UpdateResult PresetUpdater::config_update(const Semver& old_slic3 | |||
| 		} | ||||
| 
 | ||||
| 		// 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()); | ||||
| 
 | ||||
| 			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)); | ||||
| 			} | ||||
| 
 | ||||
| 			GUI::MsgUpdateConfig dlg(updates_msg); | ||||
| 			GUI::MsgUpdateConfig dlg(updates_msg, params == UpdateParams::FORCED_BEFORE_WIZARD); | ||||
| 
 | ||||
| 			const auto res = dlg.ShowModal(); | ||||
| 			if (res == wxID_OK) { | ||||
|  | @ -829,11 +834,10 @@ PresetUpdater::UpdateResult PresetUpdater::config_update(const Semver& old_slic3 | |||
| 			} | ||||
| 			else { | ||||
| 				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; | ||||
| 			} | ||||
| 		} 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
 | ||||
|  |  | |||
|  | @ -35,15 +35,21 @@ public: | |||
| 		R_INCOMPAT_CONFIGURED, | ||||
| 		R_UPDATE_INSTALLED, | ||||
| 		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.
 | ||||
| 	// 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
 | ||||
| 	// 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, bool no_notification) const; | ||||
| 	UpdateResult config_update(const Semver &old_slic3r_version, UpdateParams params) const; | ||||
| 
 | ||||
| 	// "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; | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 YuSanka
						YuSanka