From 44a607d7bf6c30d05698dfa9d4be47c5b8356c21 Mon Sep 17 00:00:00 2001
From: mehekj <mehek.jethani@gmail.com>
Date: Mon, 29 Nov 2021 15:02:02 -0500
Subject: fixed playback loop to beginning and added click to go to currently
 playing

---
 src/client/views/nodes/VideoBox.tsx | 28 ++++++++++++++++++----------
 1 file changed, 18 insertions(+), 10 deletions(-)

(limited to 'src/client/views/nodes/VideoBox.tsx')

diff --git a/src/client/views/nodes/VideoBox.tsx b/src/client/views/nodes/VideoBox.tsx
index ec6519abd..fbefa02bc 100644
--- a/src/client/views/nodes/VideoBox.tsx
+++ b/src/client/views/nodes/VideoBox.tsx
@@ -76,6 +76,7 @@ export class VideoBox extends ViewBoxAnnotatableComponent<ViewBoxAnnotatableProp
     @observable _playTimer?: NodeJS.Timeout = undefined;
     @observable _fullScreen = false;
     @observable _playing = false;
+    @observable _finished: boolean = false;
 
     @computed get links() { return DocListCast(this.dataDoc.links); }
     @computed get heightPercent() { return NumCast(this.layoutDoc._timelineHeightPercent, 100); }
@@ -120,15 +121,21 @@ export class VideoBox extends ViewBoxAnnotatableComponent<ViewBoxAnnotatableProp
     @action public Play = (update: boolean = true) => {
         this._playing = true;
         const eleTime = this.player?.currentTime || 0;
-        const start = eleTime >= (this.timeline?.trimEnd || 0) ? this.timeline?.trimStart || 0 : eleTime;
-        try {
-            this._audioPlayer && this.player && (this._audioPlayer.currentTime = this.player?.currentTime);
-            update && this.player && this.playFrom(start, undefined, true);
-            update && this._audioPlayer?.play();
-            update && this._youtubePlayer?.playVideo();
-            this._youtubePlayer && !this._playTimer && (this._playTimer = setInterval(this.updateTimecode, 5));
-        } catch (e) {
-            console.log("Video Play Exception:", e);
+        if (this.timeline) {
+            let start = eleTime >= this.timeline.trimEnd || eleTime <= this.timeline.trimStart ? this.timeline.trimStart : eleTime;
+            if (this._finished) {
+                this._finished = false;
+                start = this.timeline.trimStart;
+            }
+            try {
+                this._audioPlayer && this.player && (this._audioPlayer.currentTime = this.player?.currentTime);
+                update && this.player && this.playFrom(start, undefined, true);
+                update && this._audioPlayer?.play();
+                update && this._youtubePlayer?.playVideo();
+                this._youtubePlayer && !this._playTimer && (this._playTimer = setInterval(this.updateTimecode, 5));
+            } catch (e) {
+                console.log("Video Play Exception:", e);
+            }
         }
         this.updateTimecode();
     }
@@ -157,6 +164,7 @@ export class VideoBox extends ViewBoxAnnotatableComponent<ViewBoxAnnotatableProp
         this._youtubePlayer && SelectionManager.DeselectAll(); // if we don't deselect the player, then we get an annoying YouTube spinner I guess telling us we're paused.
         this._playTimer = undefined;
         this.updateTimecode();
+        if (!this._finished) clearTimeout(this._playRegionTimer);;
     }
 
     @action public FullScreen = () => {
@@ -407,7 +415,7 @@ export class VideoBox extends ViewBoxAnnotatableComponent<ViewBoxAnnotatableProp
                 this._playing = true;
                 this._playRegionTimer = setTimeout(
                     () => {
-                        if (fullPlay) this.setPlayheadTime(this.timeline?.trimStart || 0);
+                        if (fullPlay) this._finished = true;
                         this.Pause();
                     }, this._playRegionDuration * 1000);
             } else {
-- 
cgit v1.2.3-70-g09d2

