add runtime

This commit is contained in:
Pas 2025-05-18 12:00:38 -06:00
parent 7b1235e4f9
commit b78077804a
2 changed files with 29 additions and 4 deletions

View file

@ -222,7 +222,8 @@
"episodes": "Episodes", "episodes": "Episodes",
"season": "Season", "season": "Season",
"episode": "Episode", "episode": "Episode",
"airs": "Airs" "airs": "Airs",
"endsAt": "Ends at {{time}}"
}, },
"migration": { "migration": {
"loginRequired": "You must be logged in to migrate your data! Please go back and login to continue.", "loginRequired": "You must be logged in to migrate your data! Please go back and login to continue.",

View file

@ -2,6 +2,7 @@ import classNames from "classnames";
import { t } from "i18next"; import { t } from "i18next";
import { useCallback, useEffect, useMemo, useRef, useState } from "react"; import { useCallback, useEffect, useMemo, useRef, useState } from "react";
import { Helmet } from "react-helmet-async"; import { Helmet } from "react-helmet-async";
import { Trans } from "react-i18next";
import { Link } from "react-router-dom"; import { Link } from "react-router-dom";
import { getMediaBackdrop, getMediaDetails } from "@/backend/metadata/tmdb"; import { getMediaBackdrop, getMediaDetails } from "@/backend/metadata/tmdb";
@ -276,6 +277,17 @@ function DetailsContent({
return hours > 0 ? `${hours}h ${mins}m` : `${mins}m`; return hours > 0 ? `${hours}h ${mins}m` : `${mins}m`;
}; };
const getEndTime = (runtime?: number | null) => {
if (!runtime) return null;
const now = new Date();
const endTime = new Date(now.getTime() + runtime * 60000);
return endTime.toLocaleTimeString("en-US", {
hour: "numeric",
minute: "2-digit",
hour12: true,
});
};
const formatVoteCount = (count?: number) => { const formatVoteCount = (count?: number) => {
if (!count) return "0"; if (!count) return "0";
if (count >= 1000) { if (count >= 1000) {
@ -616,9 +628,21 @@ function DetailsContent({
<div className="md:col-span-1"> <div className="md:col-span-1">
<div className="space-y-3 text-xs"> <div className="space-y-3 text-xs">
{data.runtime && ( {data.runtime && (
<div className="flex items-center gap-1 text-white/80"> <div className="flex flex-wrap items-center gap-2 text-white/80">
<span className="font-medium">{t("details.runtime")}</span>{" "} <div className="flex items-center gap-1">
{formatRuntime(data.runtime)} <span className="font-medium">{t("details.runtime")}</span>{" "}
{formatRuntime(data.runtime)}
</div>
{data.type === "movie" && (
<div className="flex items-center gap-1">
<span className="hidden lg:inline mx-1"></span>
<Trans
i18nKey="details.endsAt"
className="font-medium"
values={{ time: getEndTime(data.runtime) }}
/>
</div>
)}
</div> </div>
)} )}
{data.language && ( {data.language && (