Skip to content

Commit 53d6c4b

Browse files
authored
Merge pull request #5172 from wled/copilot/update-install-prompt-messaging
Simplify upgrade reporting prompt with checkbox-based preference
2 parents 5beafe0 + 6f65b46 commit 53d6c4b

File tree

1 file changed

+41
-21
lines changed

1 file changed

+41
-21
lines changed

wled00/data/index.js

Lines changed: 41 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)