@@ -3300,8 +3300,14 @@ function checkVersionUpgrade(info) {
33003300 const storedVersion = versionInfo . version || '' ;
33013301
33023302 if ( storedVersion && storedVersion !== currentVersion ) {
3303- // Version has changed, show upgrade prompt
3304- showVersionUpgradePrompt ( info , storedVersion , currentVersion ) ;
3303+ // Version has changed
3304+ if ( versionInfo . alwaysReport ) {
3305+ // Automatically report if user opted in for always reporting
3306+ reportUpgradeEvent ( info , storedVersion , true ) ;
3307+ } else {
3308+ // Show upgrade prompt
3309+ showVersionUpgradePrompt ( info , storedVersion , currentVersion ) ;
3310+ }
33053311 } else if ( ! storedVersion ) {
33063312 // Empty version in file, show install prompt
33073313 showVersionUpgradePrompt ( info , null , currentVersion ) ;
@@ -3311,7 +3317,7 @@ function checkVersionUpgrade(info) {
33113317 console . log ( 'Failed to load version-info.json' , e ) ;
33123318 // On error, save current version for next time
33133319 if ( info && info . ver ) {
3314- updateVersionInfo ( info . ver , false ) ;
3320+ updateVersionInfo ( info . ver , false , false ) ;
33153321 }
33163322 } ) ;
33173323}
@@ -3337,7 +3343,7 @@ function showVersionUpgradePrompt(info, oldVersion, newVersion) {
33373343 ? `You are now running WLED <strong style="text-wrap: nowrap">${ newVersion } </strong>.`
33383344 : `Your WLED has been upgraded from <strong style="text-wrap: nowrap">${ oldVersion } </strong> to <strong style="text-wrap: nowrap">${ newVersion } </strong>.` ;
33393345
3340- const question = 'Help make WLED better with a one-time hardware report? It includes only device details like chip type, LED count, etc. — never personal data or your activities.'
3346+ const question = 'Help make WLED better by sharing hardware details like chip type and LED count? This helps us understand how WLED is used and prioritize features — we never collect personal data or your activities.'
33413347
33423348 dialog . innerHTML = `
33433349 <h2 style="margin-top:0;color:var(--c-f);">${ title } </h2>
@@ -3346,10 +3352,15 @@ function showVersionUpgradePrompt(info, oldVersion, newVersion) {
33463352 <p style="color:var(--c-f);font-size:0.9em;">
33473353 <a href="https://kno.wled.ge/about/privacy-policy/" target="_blank" style="color:var(--c-6);">Learn more about what data is collected and why</a>
33483354 </p>
3349- <div style="margin-top:20px;">
3350- <button id="versionReportYes" class="btn">Yes</button>
3351- <button id="versionReportNo" class="btn">Not Now</button>
3352- <button id="versionReportNever" class="btn">Never Ask</button>
3355+ <div style="margin-top:15px;margin-bottom:15px;">
3356+ <label style="display:flex;align-items:center;gap:8px;color:var(--c-f);cursor:pointer;">
3357+ <input type="checkbox" id="versionSaveChoice" style="cursor:pointer;">
3358+ <span>Save my choice for future updates</span>
3359+ </label>
3360+ </div>
3361+ <div style="margin-top:20px;display:flex;flex-wrap:wrap;gap:8px;">
3362+ <button id="versionReportYes" class="btn">Report update</button>
3363+ <button id="versionReportNo" class="btn">Skip reporting</button>
33533364 </div>
33543365 ` ;
33553366
@@ -3358,23 +3369,27 @@ function showVersionUpgradePrompt(info, oldVersion, newVersion) {
33583369
33593370 // Add event listeners
33603371 gId ( 'versionReportYes' ) . addEventListener ( 'click' , ( ) => {
3361- reportUpgradeEvent ( info , oldVersion ) ;
3372+ const saveChoice = gId ( 'versionSaveChoice' ) . checked ;
33623373 d . body . removeChild ( overlay ) ;
3374+ // Pass saveChoice as alwaysReport parameter
3375+ reportUpgradeEvent ( info , oldVersion , saveChoice ) ;
33633376 } ) ;
33643377
33653378 gId ( 'versionReportNo' ) . addEventListener ( 'click' , ( ) => {
3366- // Don't update version, will ask again on next load
3367- d . body . removeChild ( overlay ) ;
3368- } ) ;
3369-
3370- gId ( 'versionReportNever' ) . addEventListener ( 'click' , ( ) => {
3371- updateVersionInfo ( newVersion , true ) ;
3379+ const saveChoice = gId ( 'versionSaveChoice' ) . checked ;
33723380 d . body . removeChild ( overlay ) ;
3373- showToast ( 'You will not be asked again.' ) ;
3381+ if ( saveChoice ) {
3382+ // Save "never ask" preference
3383+ updateVersionInfo ( newVersion , true , false ) ;
3384+ showToast ( 'You will not be asked again.' ) ;
3385+ } else {
3386+ // Save current version to prevent re-prompting until version changes
3387+ updateVersionInfo ( newVersion , false , false ) ;
3388+ }
33743389 } ) ;
33753390}
33763391
3377- function reportUpgradeEvent ( info , oldVersion ) {
3392+ function reportUpgradeEvent ( info , oldVersion , alwaysReport ) {
33783393 showToast ( 'Reporting upgrade...' ) ;
33793394
33803395 // Fetch fresh data from /json/info endpoint as requested
@@ -3416,8 +3431,12 @@ function reportUpgradeEvent(info, oldVersion) {
34163431 } )
34173432 . then ( res => {
34183433 if ( res . ok ) {
3419- showToast ( 'Thank you for reporting!' ) ;
3420- updateVersionInfo ( info . ver , false ) ;
3434+ if ( alwaysReport ) {
3435+ showToast ( 'Thank you! Future upgrades will be reported automatically.' ) ;
3436+ } else {
3437+ showToast ( 'Thank you for reporting!' ) ;
3438+ }
3439+ updateVersionInfo ( info . ver , false , ! ! alwaysReport ) ;
34213440 } else {
34223441 showToast ( 'Report failed. Please try again later.' , true ) ;
34233442 // Do NOT update version info on failure - user will be prompted again
@@ -3430,10 +3449,11 @@ function reportUpgradeEvent(info, oldVersion) {
34303449 } ) ;
34313450}
34323451
3433- function updateVersionInfo ( version , neverAsk ) {
3452+ function updateVersionInfo ( version , neverAsk , alwaysReport ) {
34343453 const versionInfo = {
34353454 version : version ,
3436- neverAsk : neverAsk
3455+ neverAsk : neverAsk ,
3456+ alwaysReport : ! ! alwaysReport
34373457 } ;
34383458
34393459 // Create a Blob with JSON content and use /upload endpoint
0 commit comments