fix: game session duration calculation

This commit is contained in:
Zamitto 2024-06-20 11:27:09 -03:00
parent b3ca63c62a
commit d347991e0b
5 changed files with 29 additions and 10 deletions

View file

@ -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(

View file

@ -108,7 +108,7 @@ export function App() {
dispatch(
setRunningGame({
...libraryGame,
sessionStartTimestamp: lastGame.sessionStartTimestamp,
sessionDurationInMillis: lastGame.sessionDurationInMillis,
})
);
return;

View file

@ -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 "";
}
},
};
}

View file

@ -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 && (
<div
style={{
background: `url(${steamUrlBuilder.libraryHero(runningGame.objectID)})`,
backgroundImage: `url(${steamUrlBuilder.libraryHero(runningGame.objectID)})`,
backgroundPosition: "top",
position: "absolute",
inset: 0,
backgroundSize: "cover",
@ -159,9 +160,9 @@ export function UserContent({
</div>
<small>
{t("playing_for", {
amount: formatDistance(
runningGame.sessionStartTimestamp,
performance.now()
amount: formatDistanceInMillis(
runningGame.sessionDurationInMillis,
new Date().getTime()
),
})}
</small>

View file

@ -129,7 +129,7 @@ export type LibraryGame = Omit<Game, "repacks">;
export type RunningGameEvent = {
id: number;
sessionStartTimestamp: number;
sessionDurationInMillis: number;
}[];
export interface RunningGame {
@ -138,7 +138,7 @@ export interface RunningGame {
iconUrl: string;
objectID: string;
shop: GameShop;
sessionStartTimestamp: number;
sessionDurationInMillis: number;
}
export interface DownloadProgress {