mirror of
https://github.com/rgrgogu/new_starr.git
synced 2026-09-27 00:12:54 +08:00
fix: throttle request issue per video,audio as indicated requirements in units and lessons
Signed-off-by: rgrgogu <obsequio.rus@gmail.com>
This commit is contained in:
@@ -16,6 +16,11 @@ const SPEEDS = [0.5, 0.75, 1, 1.25, 1.5, 2];
|
||||
|
||||
const API_BASE = (import.meta.env.VITE_API_URL ?? "http://localhost:3024").replace(/\/$/, "");
|
||||
|
||||
// How often onWatchProgress may fire while playing (ms) — keeps the watch-progress
|
||||
// endpoint from getting hit on every timeupdate tick. onEnded still always reports
|
||||
// a final 100% immediately regardless of this window, so completion never lags.
|
||||
const WATCH_PROGRESS_THROTTLE_MS = 10000;
|
||||
|
||||
// ─── AudioBlock (Client — secure) ────────────────────────────────────────────
|
||||
//
|
||||
// S3/Garage:
|
||||
@@ -125,7 +130,7 @@ export function AudioBlock({ content, onWatchProgress }) {
|
||||
if (onWatchProgress && el?.duration) {
|
||||
const pct = (el.currentTime / el.duration) * 100;
|
||||
const now = Date.now();
|
||||
if (now - lastReportRef.current > 3000) {
|
||||
if (now - lastReportRef.current > WATCH_PROGRESS_THROTTLE_MS) {
|
||||
lastReportRef.current = now;
|
||||
onWatchProgress(pct);
|
||||
}
|
||||
|
||||
@@ -1,17 +1,17 @@
|
||||
import { VideoBlock } from "./VideoBlock";
|
||||
|
||||
export function TextVideoBlock({ content }) {
|
||||
export function TextVideoBlock({ content, onWatchProgress }) {
|
||||
const vidLeft = content.video_position === "left";
|
||||
return (
|
||||
<div className="flex flex-col gap-6 items-start sm:grid sm:grid-cols-2 sm:gap-6">
|
||||
{vidLeft && <VideoBlock content={content} />}
|
||||
{vidLeft && <VideoBlock content={content} onWatchProgress={onWatchProgress} />}
|
||||
<div
|
||||
className="typeset text-sm w-full"
|
||||
dangerouslySetInnerHTML={{
|
||||
__html: content.body || "<p class='text-muted-foreground italic'>Empty text</p>",
|
||||
}}
|
||||
/>
|
||||
{!vidLeft && <VideoBlock content={content} />}
|
||||
{!vidLeft && <VideoBlock content={content} onWatchProgress={onWatchProgress} />}
|
||||
</div>
|
||||
);
|
||||
}
|
||||
@@ -23,6 +23,11 @@ const PLAYBACK_SPEEDS = ["0.5", "0.75", "Normal", "1.25", "1.5", "2"];
|
||||
|
||||
const API_BASE = (import.meta.env.VITE_API_URL ?? "http://localhost:3024").replace(/\/$/, "");
|
||||
|
||||
// How often onWatchProgress may fire while playing (ms) — keeps the watch-progress
|
||||
// endpoint from getting hit on every timeupdate tick. onEnded still always reports
|
||||
// a final 100% immediately regardless of this window, so completion never lags.
|
||||
const WATCH_PROGRESS_THROTTLE_MS = 10000;
|
||||
|
||||
// ─── Tooltip control button ───────────────────────────────────────────────────
|
||||
|
||||
function CtrlBtn({ label, onClick, children, className = "" }) {
|
||||
@@ -275,7 +280,7 @@ export function VideoBlock({ content, onWatchProgress }) {
|
||||
setProgress(pct);
|
||||
if (onWatchProgress) {
|
||||
const now = Date.now();
|
||||
if (now - lastReportRef.current > 3000) {
|
||||
if (now - lastReportRef.current > WATCH_PROGRESS_THROTTLE_MS) {
|
||||
lastReportRef.current = now;
|
||||
onWatchProgress(pct);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user