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) { if (WindowManager.mainWindow) {
const runningGames = Array.from(gamesPlaytime.entries()).map((entry) => { 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( WindowManager.mainWindow.webContents.send(

View file

@ -108,7 +108,7 @@ export function App() {
dispatch( dispatch(
setRunningGame({ setRunningGame({
...libraryGame, ...libraryGame,
sessionStartTimestamp: lastGame.sessionStartTimestamp, sessionDurationInMillis: lastGame.sessionDurationInMillis,
}) })
); );
return; 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 type { FormatDistanceOptions } from "date-fns";
import { import {
ptBR, ptBR,
@ -52,5 +52,20 @@ export function useDate() {
return ""; 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]); }, [i18n.language]);
const { formatDistance } = useDate(); const { formatDistance, formatDistanceInMillis } = useDate();
const formatPlayTime = () => { const formatPlayTime = () => {
const seconds = userProfile.libraryGames.reduce( const seconds = userProfile.libraryGames.reduce(
@ -107,7 +107,8 @@ export function UserContent({
{runningGame && isMe && ( {runningGame && isMe && (
<div <div
style={{ style={{
background: `url(${steamUrlBuilder.libraryHero(runningGame.objectID)})`, backgroundImage: `url(${steamUrlBuilder.libraryHero(runningGame.objectID)})`,
backgroundPosition: "top",
position: "absolute", position: "absolute",
inset: 0, inset: 0,
backgroundSize: "cover", backgroundSize: "cover",
@ -159,9 +160,9 @@ export function UserContent({
</div> </div>
<small> <small>
{t("playing_for", { {t("playing_for", {
amount: formatDistance( amount: formatDistanceInMillis(
runningGame.sessionStartTimestamp, runningGame.sessionDurationInMillis,
performance.now() new Date().getTime()
), ),
})} })}
</small> </small>

View file

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