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