diff --git a/wled00/data/index.js b/wled00/data/index.js index 84b256183c..a1c4df4c81 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); + } 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,8 +3395,9 @@ function showVersionUpgradePrompt(info, oldVersion, newVersion) {

Learn more about what data is collected and why

-
+
+
@@ -3405,19 +3412,25 @@ function showVersionUpgradePrompt(info, oldVersion, newVersion) { d.body.removeChild(overlay); }); + gId('versionReportAlways').addEventListener('click', () => { + reportUpgradeEvent(info, oldVersion, true); // Pass true for alwaysReport + d.body.removeChild(overlay); + showToast('Thank you! Future upgrades will be reported automatically.'); + }); + gId('versionReportNo').addEventListener('click', () => { // Don't update version, will ask again on next load d.body.removeChild(overlay); }); gId('versionReportNever').addEventListener('click', () => { - updateVersionInfo(newVersion, true); + updateVersionInfo(newVersion, true, false); d.body.removeChild(overlay); showToast('You will not be asked again.'); }); } -function reportUpgradeEvent(info, oldVersion) { +function reportUpgradeEvent(info, oldVersion, alwaysReport) { showToast('Reporting upgrade...'); // Fetch fresh data from /json/info endpoint as requested @@ -3458,7 +3471,7 @@ function reportUpgradeEvent(info, oldVersion) { .then(res => { if (res.ok) { showToast('Thank you for reporting!'); - updateVersionInfo(info.ver, false); + 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 +3484,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