Merge branch 'main' of github.com:hydralauncher/hydra

This commit is contained in:
Hydra 2024-05-03 19:51:17 +01:00
commit 1eb963679e
No known key found for this signature in database
18 changed files with 185 additions and 340 deletions

View file

@ -1,5 +1,5 @@
import { format } from "date-fns";
import { useCallback, useEffect, useMemo, useState } from "react";
import { useEffect, useMemo, useState } from "react";
import { useTranslation } from "react-i18next";
import { useDownload } from "@renderer/hooks";
@ -22,6 +22,8 @@ export interface HeroPanelProps {
getGame: () => void;
}
const MAX_MINUTES_TO_SHOW_IN_PLAYTIME = 120;
export function HeroPanel({
game,
gameDetails,
@ -30,7 +32,7 @@ export function HeroPanel({
getGame,
isGamePlaying,
}: HeroPanelProps) {
const { t } = useTranslation("game_details");
const { t, i18n } = useTranslation("game_details");
const [showBinaryNotFoundModal, setShowBinaryNotFoundModal] = useState(false);
const [lastTimePlayed, setLastTimePlayed] = useState("");
@ -48,29 +50,36 @@ export function HeroPanel({
} = useDownload();
const isGameDownloading = isDownloading && gameDownloading?.id === game?.id;
const updateLastTimePlayed = useCallback(() => {
setLastTimePlayed(
formatDistance(game.lastTimePlayed, new Date(), {
addSuffix: true,
})
);
}, [game?.lastTimePlayed, formatDistance]);
useEffect(() => {
if (game?.lastTimePlayed) {
updateLastTimePlayed();
setLastTimePlayed(
formatDistance(game.lastTimePlayed, new Date(), {
addSuffix: true,
})
);
}
}, [game?.lastTimePlayed, formatDistance]);
const interval = setInterval(() => {
updateLastTimePlayed();
}, 1000);
const numberFormatter = useMemo(() => {
return new Intl.NumberFormat(i18n.language, {
maximumFractionDigits: 1,
});
}, [i18n]);
return () => {
clearInterval(interval);
};
const formatPlayTime = () => {
const milliseconds = game?.playTimeInMilliseconds || 0;
const seconds = milliseconds / 1000;
const minutes = seconds / 60;
if (minutes < MAX_MINUTES_TO_SHOW_IN_PLAYTIME) {
return t("amount_minutes", {
amount: minutes.toFixed(0),
});
}
return () => {};
}, [game?.lastTimePlayed, updateLastTimePlayed]);
const hours = minutes / 60;
return t("amount_hours", { amount: numberFormatter.format(hours) });
};
const finalDownloadSize = useMemo(() => {
if (!game) return "N/A";
@ -139,7 +148,7 @@ export function HeroPanel({
<>
<p>
{t("play_time", {
amount: formatDistance(0, game.playTimeInMilliseconds),
amount: formatPlayTime(game.playTimeInMilliseconds),
})}
</p>

View file

@ -11,6 +11,7 @@ export function Settings() {
downloadNotificationsEnabled: false,
repackUpdatesNotificationsEnabled: false,
telemetryEnabled: false,
preferQuitInsteadOfHiding: false,
});
const { t } = useTranslation("settings");
@ -27,6 +28,8 @@ export function Settings() {
repackUpdatesNotificationsEnabled:
userPreferences?.repackUpdatesNotificationsEnabled ?? false,
telemetryEnabled: userPreferences?.telemetryEnabled ?? false,
preferQuitInsteadOfHiding:
userPreferences?.preferQuitInsteadOfHiding ?? false,
});
});
}, []);
@ -107,6 +110,19 @@ export function Settings() {
updateUserPreferences("telemetryEnabled", !form.telemetryEnabled)
}
/>
<h3>{t("behavior")}</h3>
<CheckboxField
label={t("quit_app_instead_hiding")}
checked={form.preferQuitInsteadOfHiding}
onChange={() =>
updateUserPreferences(
"preferQuitInsteadOfHiding",
!form.preferQuitInsteadOfHiding
)
}
/>
</div>
</section>
);