From d347991e0b47fae86b3e9da3eaa1fcea429b1dad Mon Sep 17 00:00:00 2001 From: Zamitto <167933696+zamitto@users.noreply.github.com> Date: Thu, 20 Jun 2024 11:27:09 -0300 Subject: [PATCH] fix: game session duration calculation --- src/main/services/process-watcher.ts | 5 ++++- src/renderer/src/app.tsx | 2 +- src/renderer/src/hooks/use-date.ts | 17 ++++++++++++++++- src/renderer/src/pages/user/user-content.tsx | 11 ++++++----- src/types/index.ts | 4 ++-- 5 files changed, 29 insertions(+), 10 deletions(-) diff --git a/src/main/services/process-watcher.ts b/src/main/services/process-watcher.ts index 4bf02b66..b17a594f 100644 --- a/src/main/services/process-watcher.ts +++ b/src/main/services/process-watcher.ts @@ -94,7 +94,10 @@ export const watchProcesses = async () => { if (WindowManager.mainWindow) { const runningGames = Array.from(gamesPlaytime.entries()).map((entry) => { - return { id: entry[0], sessionStartTimestamp: entry[1].firstTick }; + return { + id: entry[0], + sessionDurationInMillis: entry[1].firstTick - performance.now(), + }; }); WindowManager.mainWindow.webContents.send( diff --git a/src/renderer/src/app.tsx b/src/renderer/src/app.tsx index 2dc1b12c..33e02bf5 100644 --- a/src/renderer/src/app.tsx +++ b/src/renderer/src/app.tsx @@ -108,7 +108,7 @@ export function App() { dispatch( setRunningGame({ ...libraryGame, - sessionStartTimestamp: lastGame.sessionStartTimestamp, + sessionDurationInMillis: lastGame.sessionDurationInMillis, }) ); return; diff --git a/src/renderer/src/hooks/use-date.ts b/src/renderer/src/hooks/use-date.ts index f5e8204e..9b60a4a0 100644 --- a/src/renderer/src/hooks/use-date.ts +++ b/src/renderer/src/hooks/use-date.ts @@ -1,4 +1,4 @@ -import { formatDistance } from "date-fns"; +import { formatDistance, subMilliseconds } from "date-fns"; import type { FormatDistanceOptions } from "date-fns"; import { ptBR, @@ -52,5 +52,20 @@ export function useDate() { return ""; } }, + + formatDistanceInMillis: ( + millis: number, + baseDate: string | number | Date, + options?: FormatDistanceOptions + ) => { + try { + return formatDistance(subMilliseconds(new Date(), millis), baseDate, { + ...options, + locale: getDateLocale(), + }); + } catch (err) { + return ""; + } + }, }; } diff --git a/src/renderer/src/pages/user/user-content.tsx b/src/renderer/src/pages/user/user-content.tsx index 1dd7a203..31e68328 100644 --- a/src/renderer/src/pages/user/user-content.tsx +++ b/src/renderer/src/pages/user/user-content.tsx @@ -42,7 +42,7 @@ export function UserContent({ }); }, [i18n.language]); - const { formatDistance } = useDate(); + const { formatDistance, formatDistanceInMillis } = useDate(); const formatPlayTime = () => { const seconds = userProfile.libraryGames.reduce( @@ -107,7 +107,8 @@ export function UserContent({ {runningGame && isMe && (