mirror of
https://github.com/mue/mue.git
synced 2026-07-15 13:03:55 +02:00
fix: stat timestamps, resetting achievements
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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 = () => {
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
"id": "tentabs",
|
||||
"condition": {
|
||||
"type": "tabsOpened",
|
||||
"amount": 3
|
||||
"amount": 10
|
||||
}
|
||||
},
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user