mirror of
https://github.com/blakeblackshear/frigate.git
synced 2026-02-09 04:35:25 +03:00
Simplify listeners
This commit is contained in:
parent
4a1d573a75
commit
581f292f35
@ -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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user