fix: stat timestamps, resetting achievements

This commit is contained in:
David Ralph
2026-01-24 15:43:58 +00:00
parent 8beda77a76
commit c49bc39770
3 changed files with 27 additions and 12 deletions

View File

@@ -1,31 +1,41 @@
import { achievements } from './index';
export function checkAchievements(stats) {
achievements.forEach((achievement) => {
const oldAchievements = JSON.parse(localStorage.getItem('achievements')) || [];
const achievementTimestamps = JSON.parse(localStorage.getItem('achievementTimestamps')) || {};
return achievements.map((achievement) => {
let achieved = oldAchievements.includes(achievement.id);
switch (achievement.condition.type) {
case 'tabsOpened':
if (stats['tabs-opened'] >= achievement.condition.amount) {
achievement.achieved = true;
achieved = true;
}
break;
case 'addonInstall':
if (stats.marketplace) {
if (stats.marketplace['install'] >= achievement.condition.amount) {
achievement.achieved = true;
achieved = true;
}
}
break;
default:
break;
}
});
return achievements;
return {
...achievement,
achieved,
timestamp: achievementTimestamps[achievement.id],
};
});
}
export function newAchievements(stats) {
// calculate new achievements
const oldAchievements = JSON.parse(localStorage.getItem('achievements')) || [];
const achievementTimestamps = JSON.parse(localStorage.getItem('achievementTimestamps')) || {};
const checkedAchievements = checkAchievements(stats);
const newAchievements = [];
@@ -36,15 +46,18 @@ export function newAchievements(stats) {
});
// add timestamp to new achievements
const now = Date.now();
newAchievements.forEach((achievement) => {
achievement.timestamp = Date.now();
achievement.timestamp = now;
achievementTimestamps[achievement.id] = now;
});
// save new achievements to local storage
// save new achievements and timestamps to local storage
localStorage.setItem(
'achievements',
JSON.stringify([...oldAchievements, ...newAchievements.map((achievement) => achievement.id)]),
);
localStorage.setItem('achievementTimestamps', JSON.stringify(achievementTimestamps));
return newAchievements;
}

View File

@@ -30,8 +30,7 @@ const Stats = () => {
const [clearmodal, setClearmodal] = useState(false);
const updateAchievements = useCallback(() => {
const achieved = checkAchievements(stats);
setAchievements(achieved);
setAchievements(checkAchievements(stats));
}, [stats]);
useEffect(() => {
@@ -45,11 +44,14 @@ const Stats = () => {
const resetStats = () => {
const emptyStats = {};
localStorage.setItem('statsData', JSON.stringify(emptyStats));
localStorage.setItem('achievements', JSON.stringify(initialAchievements));
localStorage.setItem('achievements', JSON.stringify([]));
localStorage.setItem('achievementTimestamps', JSON.stringify({}));
setStats(emptyStats);
// Reset achievements to initial state (all locked, no timestamps)
const resetAchievements = initialAchievements.map((a) => ({ ...a, achieved: false, timestamp: undefined }));
setAchievements(resetAchievements);
setClearmodal(false);
toast(variables.getMessage('toasts.stats_reset'));
updateAchievements(); // Call updateAchievements to refresh achievements after reset
};
const downloadStats = () => {

View File

@@ -3,7 +3,7 @@
"id": "tentabs",
"condition": {
"type": "tabsOpened",
"amount": 3
"amount": 10
}
},
{