diff --git a/wled00/data/index.js b/wled00/data/index.js index 84b256183c..754b006c1c 100644 --- a/wled00/data/index.js +++ b/wled00/data/index.js @@ -3343,8 +3343,14 @@ function checkVersionUpgrade(info) { const storedVersion = versionInfo.version || ''; if (storedVersion && storedVersion !== currentVersion) { - // Version has changed, show upgrade prompt - showVersionUpgradePrompt(info, storedVersion, currentVersion); + // Version has changed + if (versionInfo.alwaysReport) { + // Automatically report if user opted in for always reporting + reportUpgradeEvent(info, storedVersion, true); + } else { + // Show upgrade prompt + showVersionUpgradePrompt(info, storedVersion, currentVersion); + } } else if (!storedVersion) { // Empty version in file, show install prompt showVersionUpgradePrompt(info, null, currentVersion); @@ -3354,7 +3360,7 @@ function checkVersionUpgrade(info) { console.log('Failed to load version-info.json', e); // On error, save current version for next time if (info && info.ver) { - updateVersionInfo(info.ver, false); + updateVersionInfo(info.ver, false, false); } }); } @@ -3380,7 +3386,7 @@ function showVersionUpgradePrompt(info, oldVersion, newVersion) { ? `You are now running WLED ${newVersion}.` : `Your WLED has been upgraded from ${oldVersion} to ${newVersion}.`; - 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.' + 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.' dialog.innerHTML = `

${title}

@@ -3389,10 +3395,15 @@ function showVersionUpgradePrompt(info, oldVersion, newVersion) {

Learn more about what data is collected and why

-
- - - +
+ +
+
+ +
`; @@ -3401,23 +3412,25 @@ function showVersionUpgradePrompt(info, oldVersion, newVersion) { // Add event listeners gId('versionReportYes').addEventListener('click', () => { - reportUpgradeEvent(info, oldVersion); + const saveChoice = gId('versionSaveChoice').checked; d.body.removeChild(overlay); + // Pass saveChoice as alwaysReport parameter + reportUpgradeEvent(info, oldVersion, saveChoice); }); gId('versionReportNo').addEventListener('click', () => { - // Don't update version, will ask again on next load + const saveChoice = gId('versionSaveChoice').checked; d.body.removeChild(overlay); - }); - - gId('versionReportNever').addEventListener('click', () => { - updateVersionInfo(newVersion, true); - d.body.removeChild(overlay); - showToast('You will not be asked again.'); + if (saveChoice) { + // Save "never ask" preference + updateVersionInfo(newVersion, true, false); + showToast('You will not be asked again.'); + } + // Don't update version if not saving choice, will ask again on next load }); } -function reportUpgradeEvent(info, oldVersion) { +function reportUpgradeEvent(info, oldVersion, alwaysReport) { showToast('Reporting upgrade...'); // Fetch fresh data from /json/info endpoint as requested @@ -3457,8 +3470,12 @@ function reportUpgradeEvent(info, oldVersion) { }) .then(res => { if (res.ok) { - showToast('Thank you for reporting!'); - updateVersionInfo(info.ver, false); + if (alwaysReport) { + showToast('Thank you! Future upgrades will be reported automatically.'); + } else { + showToast('Thank you for reporting!'); + } + updateVersionInfo(info.ver, false, !!alwaysReport); } else { showToast('Report failed. Please try again later.', true); // Do NOT update version info on failure - user will be prompted again @@ -3471,10 +3488,11 @@ function reportUpgradeEvent(info, oldVersion) { }); } -function updateVersionInfo(version, neverAsk) { +function updateVersionInfo(version, neverAsk, alwaysReport) { const versionInfo = { version: version, - neverAsk: neverAsk + neverAsk: neverAsk, + alwaysReport: !!alwaysReport }; // Create a Blob with JSON content and use /upload endpoint