prusa3d / PrusaSlicer

G-code generator for 3D printers (RepRap, Makerbot, Ultimaker etc.)
https://www.prusa3d.com/prusaslicer/
GNU Affero General Public License v3.0
7.62k stars 1.92k forks source link

Add option to disable "configuration update" nags #13078

Open buhman opened 1 month ago

buhman commented 1 month ago

Is your feature request related to a problem? Please describe. I currently have all update checkboxes in the configuration wizard unchecked: image However, despite this, I am still given notifications for both 2.8.0, as well as notifications for "configuration bundles": image Additionally, every time I open the configuration wizard, I am re-nagged with the "configuration bundle" update.

Describe the solution you'd like It should be possible to configure PrusaSlicer to not check for updates of any kind.

It should be possible to configure PrusaSlicer to never offer updates, even when the metadata for that update previously exists in local caches: e.g: if update-checking is at first enabled, then later disabled, update nag-dialogs should never be spawned.

This also includes the lower-right corner notification: image

Describe how it would work The configuration checkboxes for this already exist, they merely appear to have no or partial effect.

Describe alternatives you've considered Clear all PrusaSlicer local storage and apply operating-system level restrictions on PrusaSlicer's outbound network access.

themanyone commented 1 month ago

In GUI_App::check_updates(), we see that it is indeed doing PresetUpdater::UpdateParams::SHOW_NOTIFICATION even when not invoked by user.

3504 bool GUI_App::check_updates(const bool invoked_by_user)
3505 {   
3506      if (invoked_by_user) {
....
3522     }
3523
3524     PresetUpdater::UpdateResult updater_result;
3525     try {
3526         preset_updater->update_index_db();
3527         updater_result = preset_updater->config_update(app_config->orig_version(),
     invoked_by_user ? PresetUpdater::UpdateParams::SHOW_TEXT_BOX :
     PresetUpdater::UpdateParams::SHOW_NOTIFICATION,
     plater()->get_preset_archive_database()->get_selected_archive_repositories());
3528         if (updater_result == PresetUpdater::R_INCOMPAT_EXIT) {
3529             mainframe->Close();
3530             // Applicaiton is closing.
3531             return false;
3532         }

You could just wipe out the rest of the function from 3522 onward, and just return true; If not invoked_by_user, then no dialog. Nothing. Nada.

3521         // and then we check updates (not)
3522     }
3523     return true;
3524 }

(swoosh)

themanyone commented 1 month ago

Added to my ever-growing pull request https://github.com/prusa3d/PrusaSlicer/pull/12994