You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
48 lines
1.2 KiB
48 lines
1.2 KiB
import { useVideoPlayerState } from "../VideoContext"; |
|
|
|
function durationExceedsHour(secs: number): boolean { |
|
return secs > 60 * 60; |
|
} |
|
|
|
function formatSeconds(secs: number, showHours = false): string { |
|
if (Number.isNaN(secs)) { |
|
if (showHours) return "0:00:00"; |
|
return "0:00"; |
|
} |
|
|
|
let time = secs; |
|
const seconds = time % 60; |
|
|
|
time /= 60; |
|
const minutes = time % 60; |
|
|
|
time /= 60; |
|
const hours = minutes % 60; |
|
|
|
if (!showHours) |
|
return `${Math.round(minutes).toString()}:${Math.round(seconds) |
|
.toString() |
|
.padStart(2, "0")}`; |
|
return `${Math.round(hours).toString()}:${Math.round(minutes) |
|
.toString() |
|
.padStart(2, "0")}:${Math.round(seconds).toString().padStart(2, "0")}`; |
|
} |
|
|
|
interface Props { |
|
className?: string; |
|
} |
|
|
|
export function TimeControl(props: Props) { |
|
const { videoState } = useVideoPlayerState(); |
|
const hasHours = durationExceedsHour(videoState.duration); |
|
const time = formatSeconds(videoState.time, hasHours); |
|
const duration = formatSeconds(videoState.duration, hasHours); |
|
|
|
return ( |
|
<div className={props.className}> |
|
<p className="select-none text-white"> |
|
{time} / {duration} |
|
</p> |
|
</div> |
|
); |
|
}
|
|
|