Simplify listeners

This commit is contained in:
Nicolas Mowen 2024-03-07 15:15:17 -07:00
parent 4a1d573a75
commit 581f292f35

View File

@ -115,9 +115,7 @@ export default function DynamicVideoPlayer({
if (previewOnly) { if (previewOnly) {
playerRef.autoplay(false); playerRef.autoplay(false);
controller.removePlayerListeners();
} else { } else {
controller.setPlayerListeners();
controller.seekToTimestamp(playerRef.currentTime() || 0, true); controller.seekToTimestamp(playerRef.currentTime() || 0, true);
} }
@ -345,8 +343,6 @@ export class DynamicVideoController {
// playback // playback
private recordings: Recording[] = []; private recordings: Recording[] = [];
private onPlaybackTimestamp: ((time: number) => void) | undefined = undefined;
private onClipChange: ((dir: "forward") => void) | undefined = undefined;
private annotationOffset: number; private annotationOffset: number;
private timeToStart: number | undefined = undefined; private timeToStart: number | undefined = undefined;
@ -356,10 +352,8 @@ export class DynamicVideoController {
private seeking = false; private seeking = false;
// listeners // listeners
private playerProgressListener = () => { private playerProgressListener: (() => void) | null = null;
this.updateProgress(this.playerRef.currentTime() || 0); private playerEndedListener: (() => void) | null = null;
};
private playerEndedListener = () => this.fireClipChangeEvent("forward");
private canPlayListener: (() => void) | null = null; private canPlayListener: (() => void) | null = null;
constructor( constructor(
@ -440,16 +434,6 @@ export class DynamicVideoController {
} }
} }
setPlayerListeners() {
this.playerRef.on("timeupdate", this.playerProgressListener);
this.playerRef.on("ended", this.playerEndedListener);
}
removePlayerListeners() {
this.playerRef.off("timeupdate", this.playerProgressListener);
this.playerRef.off("ended", this.playerEndedListener);
}
onCanPlay(listener: (() => void) | null) { onCanPlay(listener: (() => void) | null) {
if (listener) { if (listener) {
this.canPlayListener = listener; this.canPlayListener = listener;
@ -468,37 +452,44 @@ export class DynamicVideoController {
this.setFocusedItem(timeline); this.setFocusedItem(timeline);
} }
updateProgress(playerTime: number) { getProgress(playerTime: number): number {
if (this.onPlaybackTimestamp) { // take a player time in seconds and convert to timestamp in timeline
// take a player time in seconds and convert to timestamp in timeline let timestamp = 0;
let timestamp = 0; let totalTime = 0;
let totalTime = 0; (this.recordings || []).every((segment) => {
(this.recordings || []).every((segment) => { if (totalTime + segment.duration > playerTime) {
if (totalTime + segment.duration > playerTime) { // segment is here
// segment is here timestamp = segment.start_time + (playerTime - totalTime);
timestamp = segment.start_time + (playerTime - totalTime); return false;
return false; } else {
} else { totalTime += segment.duration;
totalTime += segment.duration; return true;
return true; }
} });
});
this.onPlaybackTimestamp(timestamp); return timestamp;
}
} }
onPlayerTimeUpdate(listener: ((timestamp: number) => void) | undefined) { onPlayerTimeUpdate(listener: ((timestamp: number) => void) | undefined) {
this.onPlaybackTimestamp = listener; if (listener) {
this.playerProgressListener = () =>
listener(this.getProgress(this.playerRef.currentTime() || 0));
this.playerRef.on("timeupdate", this.playerProgressListener);
} else {
if (this.playerProgressListener) {
this.playerRef.off("timeupdate", this.playerProgressListener);
}
}
} }
onClipChangedEvent(listener: (dir: "forward" | number) => void) { onClipChangedEvent(listener: (dir: "forward") => void) {
this.onClipChange = listener; if (listener) {
} this.playerEndedListener = () => listener("forward");
this.playerRef.on("ended", this.playerEndedListener);
fireClipChangeEvent(dir: "forward") { } else {
if (this.onClipChange) { if (this.playerEndedListener) {
this.onClipChange(dir); this.playerRef.off("ended", this.playerEndedListener);
}
} }
} }