From c459b893084f98bfcb50e1342a39ffd91ebfbeef Mon Sep 17 00:00:00 2001
From: jojohoch <joachim.hoch@iqb.hu-berlin.de>
Date: Thu, 9 Dec 2021 17:02:03 +0100
Subject: [PATCH] [player] Fix storing/restoring the playback time of audios
 and videos

---
 .../components/control-bar/control-bar.component.ts   | 11 +++++------
 .../element-container/element-container.component.ts  |  8 +++++---
 .../app/components/unit-state/unit-state.component.ts |  3 +++
 3 files changed, 13 insertions(+), 9 deletions(-)

diff --git a/projects/common/components/control-bar/control-bar.component.ts b/projects/common/components/control-bar/control-bar.component.ts
index 696c6a167..c032a3c55 100644
--- a/projects/common/components/control-bar/control-bar.component.ts
+++ b/projects/common/components/control-bar/control-bar.component.ts
@@ -39,6 +39,7 @@ export class ControlBarComponent implements OnInit, OnChanges, OnDestroy {
 
   ngOnInit(): void {
     this.dependencyDissolved = !this.playerProperties.activeAfterID;
+    this.playbackTime = this.playerProperties.playbackTime;
     this.player.ondurationchange = () => this.initTimeValues();
     this.player.ontimeupdate = () => {
       this.currentTime = this.player.currentTime / 60;
@@ -163,12 +164,9 @@ export class ControlBarComponent implements OnInit, OnChanges, OnDestroy {
   }
 
   private toPlaybackTime(): number {
-    let newPlayBackTime: number = 0;
-    if (this.player.duration && this.player.currentTime) {
-      newPlayBackTime = this.runCounter + this.player.currentTime / this.player.duration;
-    }
-    this.playbackTime = newPlayBackTime;
-    return newPlayBackTime;
+    this.playbackTime = this.player.duration ?
+      this.runCounter + this.player.currentTime / this.player.duration : this.playbackTime;
+    return this.playbackTime;
   }
 
   private initTimeValues(): void {
@@ -180,6 +178,7 @@ export class ControlBarComponent implements OnInit, OnChanges, OnDestroy {
         this.player.currentTime = (this.playerProperties.playbackTime - this.runCounter) * this.player.duration;
         this.checkDisabledState(this.runCounter);
         this.checkValidState(this.runCounter);
+        this.sendPlaybackTimeChanged();
       } else {
         this.duration = 0;
         this.runCounter = 0;
diff --git a/projects/player/src/app/components/element-container/element-container.component.ts b/projects/player/src/app/components/element-container/element-container.component.ts
index f1c2fd053..8f7ef3639 100644
--- a/projects/player/src/app/components/element-container/element-container.component.ts
+++ b/projects/player/src/app/components/element-container/element-container.component.ts
@@ -256,7 +256,9 @@ export class ElementContainerComponent implements OnInit {
           break;
         case 'video':
         case 'audio':
-          elementModel.playbackTime = unitStateElementCode.value;
+          if (elementModel && elementModel.playerProps) {
+            elementModel.playerProps.playbackTime = unitStateElementCode.value as number;
+          }
           break;
         default:
           elementModel.value = unitStateElementCode.value;
@@ -272,9 +274,9 @@ export class ElementContainerComponent implements OnInit {
       case 'image':
         return { id: elementModel.id, value: (elementModel as ImageElement).magnifierUsed };
       case 'video':
-        return { id: elementModel.id, value: (elementModel as VideoElement).playbackTime };
+        return { id: elementModel.id, value: (elementModel as VideoElement).playerProps.playbackTime };
       case 'audio':
-        return { id: elementModel.id, value: (elementModel as AudioElement).playbackTime };
+        return { id: elementModel.id, value: (elementModel as AudioElement).playerProps.playbackTime };
       default:
         return { id: elementModel.id, value: (elementModel as InputElement).value };
     }
diff --git a/projects/player/src/app/components/unit-state/unit-state.component.ts b/projects/player/src/app/components/unit-state/unit-state.component.ts
index d9256cb2a..c666df9be 100644
--- a/projects/player/src/app/components/unit-state/unit-state.component.ts
+++ b/projects/player/src/app/components/unit-state/unit-state.component.ts
@@ -165,6 +165,9 @@ export class UnitStateComponent implements OnInit, OnDestroy {
   private sendVopStateChangedNotification(): void {
     // give the form time to change its valid status
     Promise.resolve().then(() => {
+      // eslint-disable-next-line no-console
+      console.log('player: this.unitStateService.unitStateElementCodes',
+        this.unitStateService.unitStateElementCodes);
       const unitState: UnitState = {
         dataParts: {
           elementCodes: JSON.stringify(this.unitStateService.unitStateElementCodes)
-- 
GitLab