Fix stats init for new users
This commit is contained in:
parent
a81b1c4a33
commit
921297f1e5
|
@ -16,7 +16,10 @@ const STATS_FILE = 'stats.json';
|
||||||
* @type {Map<string, Object>} The stats object for each user.
|
* @type {Map<string, Object>} The stats object for each user.
|
||||||
*/
|
*/
|
||||||
const STATS = new Map();
|
const STATS = new Map();
|
||||||
let lastSaveTimestamp = 0;
|
/**
|
||||||
|
* @type {Map<string, number>} The timestamps for each user.
|
||||||
|
*/
|
||||||
|
const TIMESTAMPS = new Map();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Convert a timestamp to an integer timestamp.
|
* Convert a timestamp to an integer timestamp.
|
||||||
|
@ -119,7 +122,6 @@ function timestampToMoment(timestamp) {
|
||||||
* @returns {Promise<Object>} The aggregated stats object.
|
* @returns {Promise<Object>} The aggregated stats object.
|
||||||
*/
|
*/
|
||||||
async function collectAndCreateStats(chatsPath, charactersPath) {
|
async function collectAndCreateStats(chatsPath, charactersPath) {
|
||||||
console.log('Collecting and creating stats...');
|
|
||||||
const files = await readdir(charactersPath);
|
const files = await readdir(charactersPath);
|
||||||
|
|
||||||
const pngFiles = files.filter((file) => file.endsWith('.png'));
|
const pngFiles = files.filter((file) => file.endsWith('.png'));
|
||||||
|
@ -145,10 +147,10 @@ async function collectAndCreateStats(chatsPath, charactersPath) {
|
||||||
* @param {string} charactersPath Path to the directory containing the character files.
|
* @param {string} charactersPath Path to the directory containing the character files.
|
||||||
*/
|
*/
|
||||||
async function recreateStats(handle, chatsPath, charactersPath) {
|
async function recreateStats(handle, chatsPath, charactersPath) {
|
||||||
|
console.log('Collecting and creating stats for user:', handle);
|
||||||
const stats = await collectAndCreateStats(chatsPath, charactersPath);
|
const stats = await collectAndCreateStats(chatsPath, charactersPath);
|
||||||
STATS.set(handle, stats);
|
STATS.set(handle, stats);
|
||||||
await saveStatsToFile();
|
await saveStatsToFile();
|
||||||
console.debug('Stats (re)created and saved to file.');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -167,7 +169,7 @@ async function init() {
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
// If the file doesn't exist or is invalid, initialize stats
|
// If the file doesn't exist or is invalid, initialize stats
|
||||||
if (err.code === 'ENOENT' || err instanceof SyntaxError) {
|
if (err.code === 'ENOENT' || err instanceof SyntaxError) {
|
||||||
recreateStats(handle, directories.chats, directories.characters);
|
await recreateStats(handle, directories.chats, directories.characters);
|
||||||
} else {
|
} else {
|
||||||
throw err; // Rethrow the error if it's something we didn't expect
|
throw err; // Rethrow the error if it's something we didn't expect
|
||||||
}
|
}
|
||||||
|
@ -185,13 +187,17 @@ async function init() {
|
||||||
async function saveStatsToFile() {
|
async function saveStatsToFile() {
|
||||||
const userHandles = await getAllUserHandles();
|
const userHandles = await getAllUserHandles();
|
||||||
for (const handle of userHandles) {
|
for (const handle of userHandles) {
|
||||||
const charStats = STATS.get(handle) || {};
|
if (!STATS.has(handle)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
const charStats = STATS.get(handle);
|
||||||
|
const lastSaveTimestamp = TIMESTAMPS.get(handle) || 0;
|
||||||
if (charStats.timestamp > lastSaveTimestamp) {
|
if (charStats.timestamp > lastSaveTimestamp) {
|
||||||
try {
|
try {
|
||||||
const directories = getUserDirectories(handle);
|
const directories = getUserDirectories(handle);
|
||||||
const statsFilePath = path.join(directories.root, STATS_FILE);
|
const statsFilePath = path.join(directories.root, STATS_FILE);
|
||||||
await writeFileAtomic(statsFilePath, JSON.stringify(charStats));
|
await writeFileAtomic(statsFilePath, JSON.stringify(charStats));
|
||||||
lastSaveTimestamp = Date.now();
|
TIMESTAMPS.set(handle, Date.now());
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.log('Failed to save stats to file.', error);
|
console.log('Failed to save stats to file.', error);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue