mirror of
https://github.com/mue/mue.git
synced 2026-07-26 02:01:19 +02:00
fix: stat timestamps, resetting achievements
This commit is contained in:
@@ -1,31 +1,41 @@
|
|||||||
import { achievements } from './index';
|
import { achievements } from './index';
|
||||||
|
|
||||||
export function checkAchievements(stats) {
|
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) {
|
switch (achievement.condition.type) {
|
||||||
case 'tabsOpened':
|
case 'tabsOpened':
|
||||||
if (stats['tabs-opened'] >= achievement.condition.amount) {
|
if (stats['tabs-opened'] >= achievement.condition.amount) {
|
||||||
achievement.achieved = true;
|
achieved = true;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 'addonInstall':
|
case 'addonInstall':
|
||||||
if (stats.marketplace) {
|
if (stats.marketplace) {
|
||||||
if (stats.marketplace['install'] >= achievement.condition.amount) {
|
if (stats.marketplace['install'] >= achievement.condition.amount) {
|
||||||
achievement.achieved = true;
|
achieved = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
});
|
|
||||||
|
|
||||||
return achievements;
|
return {
|
||||||
|
...achievement,
|
||||||
|
achieved,
|
||||||
|
timestamp: achievementTimestamps[achievement.id],
|
||||||
|
};
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
export function newAchievements(stats) {
|
export function newAchievements(stats) {
|
||||||
// calculate new achievements
|
// calculate new achievements
|
||||||
const oldAchievements = JSON.parse(localStorage.getItem('achievements')) || [];
|
const oldAchievements = JSON.parse(localStorage.getItem('achievements')) || [];
|
||||||
|
const achievementTimestamps = JSON.parse(localStorage.getItem('achievementTimestamps')) || {};
|
||||||
const checkedAchievements = checkAchievements(stats);
|
const checkedAchievements = checkAchievements(stats);
|
||||||
const newAchievements = [];
|
const newAchievements = [];
|
||||||
|
|
||||||
@@ -36,15 +46,18 @@ export function newAchievements(stats) {
|
|||||||
});
|
});
|
||||||
|
|
||||||
// add timestamp to new achievements
|
// add timestamp to new achievements
|
||||||
|
const now = Date.now();
|
||||||
newAchievements.forEach((achievement) => {
|
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(
|
localStorage.setItem(
|
||||||
'achievements',
|
'achievements',
|
||||||
JSON.stringify([...oldAchievements, ...newAchievements.map((achievement) => achievement.id)]),
|
JSON.stringify([...oldAchievements, ...newAchievements.map((achievement) => achievement.id)]),
|
||||||
);
|
);
|
||||||
|
localStorage.setItem('achievementTimestamps', JSON.stringify(achievementTimestamps));
|
||||||
|
|
||||||
return newAchievements;
|
return newAchievements;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -30,8 +30,7 @@ const Stats = () => {
|
|||||||
const [clearmodal, setClearmodal] = useState(false);
|
const [clearmodal, setClearmodal] = useState(false);
|
||||||
|
|
||||||
const updateAchievements = useCallback(() => {
|
const updateAchievements = useCallback(() => {
|
||||||
const achieved = checkAchievements(stats);
|
setAchievements(checkAchievements(stats));
|
||||||
setAchievements(achieved);
|
|
||||||
}, [stats]);
|
}, [stats]);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
@@ -45,11 +44,14 @@ const Stats = () => {
|
|||||||
const resetStats = () => {
|
const resetStats = () => {
|
||||||
const emptyStats = {};
|
const emptyStats = {};
|
||||||
localStorage.setItem('statsData', JSON.stringify(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);
|
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);
|
setClearmodal(false);
|
||||||
toast(variables.getMessage('toasts.stats_reset'));
|
toast(variables.getMessage('toasts.stats_reset'));
|
||||||
updateAchievements(); // Call updateAchievements to refresh achievements after reset
|
|
||||||
};
|
};
|
||||||
|
|
||||||
const downloadStats = () => {
|
const downloadStats = () => {
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
"id": "tentabs",
|
"id": "tentabs",
|
||||||
"condition": {
|
"condition": {
|
||||||
"type": "tabsOpened",
|
"type": "tabsOpened",
|
||||||
"amount": 3
|
"amount": 10
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user