"...git@scm.cms.hu-berlin.de:iqb/verona-modules-aspect.git" did not exist on "c88577deb63731f820345e4310141dbc53b6ab8e"
Newer
Older
Directive, EventEmitter, Input, OnDestroy, OnInit, Output
} from '@angular/core';
import { takeUntil } from 'rxjs/operators';
import { AudioElement } from 'common/models/elements/media-elements/audio';
import { VideoElement } from 'common/models/elements/media-elements/video';
import { ValueChangeElement } from 'common/models/elements/element';
import { ElementComponent } from './element-component.directive';
export abstract class MediaPlayerElementComponent extends ElementComponent implements OnInit, OnDestroy {
@Input() savedPlaybackTime!: number;
@Input() actualPlayingId!: Subject<string | null>;
@Input() mediaStatusChanged!: Subject<string>;
@Output() elementValueChanged = new EventEmitter<ValueChangeElement>();
@Output() mediaPlayStatusChanged = new EventEmitter<string | null>();
@Output() mediaValidStatusChanged = new EventEmitter<string>();
abstract elementModel: AudioElement | VideoElement;
active: boolean = true;
isLoaded: Subject<boolean> = new Subject<boolean>();
dependencyDissolved!: boolean;
private ngUnsubscribe = new Subject<void>();
this.dependencyDissolved = !this.elementModel.player.activeAfterID;
if (this.actualPlayingId) {
this.actualPlayingId
.pipe(takeUntil(this.ngUnsubscribe))
.subscribe((actualID: string | null): void => this.setActualPlayingMediaId(actualID));
}
if (this.mediaStatusChanged) {
this.mediaStatusChanged
.pipe(takeUntil(this.ngUnsubscribe))
.subscribe((id: string): void => this.setActivatedAfterID(id));
}
}
private setActualPlayingMediaId(id: string | null): void {
this.active = !id || id === this.elementModel.id;
}
private setActivatedAfterID(id: string): void {
if (!this.dependencyDissolved) {
this.dependencyDissolved = id === (this.elementModel).player.activeAfterID;
ngOnDestroy(): void {
this.ngUnsubscribe.next();
this.ngUnsubscribe.complete();
}