From 44110a6246af02d2161da551d1781953cfda857a Mon Sep 17 00:00:00 2001
From: csantosm <4a.santos@gmail.com>
Date: Thu, 2 Jun 2022 10:57:47 +0200
Subject: [PATCH] openvidu-components: Added recording
openvidu-components: Fixed recording directive name
---
.../dialogs/delete-recording.component.ts | 24 ++
.../{material => dialogs}/dialog.component.ts | 0
.../dialogs/recording-dialog.component.ts | 39 ++++
.../activities-panel.component.css | 2 +
.../activities-panel.component.html | 13 +-
.../activities-panel.component.ts | 124 ++++++++++-
.../recording-activity.component.css | 93 +++++++-
.../recording-activity.component.html | 125 +++++++----
.../recording-activity.component.ts | 210 ++++++++++++++----
.../background-effects-panel.component.ts | 6 +
.../components/session/session.component.ts | 12 +-
.../components/stream/stream.component.css | 12 -
.../components/toolbar/toolbar.component.css | 17 +-
.../components/toolbar/toolbar.component.html | 57 +++--
.../components/toolbar/toolbar.component.ts | 140 +++++++++---
.../videoconference.component.css | 2 +-
.../videoconference.component.html | 24 +-
.../videoconference.component.ts | 131 +++++++++--
.../api/activities-panel.directive.ts | 52 +++++
.../directives/api/api.directive.module.ts | 17 +-
.../api/recording-activity.directive.ts | 103 +++++++++
.../lib/directives/api/toolbar.directive.ts | 63 +++++-
.../openvidu-angular/src/lib/lang/cn.json | 10 +-
.../openvidu-angular/src/lib/lang/de.json | 10 +-
.../openvidu-angular/src/lib/lang/en.json | 12 +-
.../openvidu-angular/src/lib/lang/es.json | 21 +-
.../openvidu-angular/src/lib/lang/fr.json | 11 +-
.../openvidu-angular/src/lib/lang/hi.json | 10 +-
.../openvidu-angular/src/lib/lang/it.json | 10 +-
.../openvidu-angular/src/lib/lang/ja.json | 10 +-
.../openvidu-angular/src/lib/lang/nl.json | 12 +-
.../openvidu-angular/src/lib/lang/pt.json | 10 +-
.../src/lib/models/background-effect.model.ts | 6 +
.../src/lib/models/openvidu.model.ts | 8 +
.../src/lib/models/participant.model.ts | 15 ++
.../src/lib/models/recording.model.ts | 21 +-
.../src/lib/models/token.model.ts | 3 -
.../src/lib/openvidu-angular.module.ts | 17 +-
.../src/lib/pipes/recording.pipe.ts | 21 ++
.../src/lib/services/action/action.service.ts | 45 +++-
.../config/openvidu-angular.config.service.ts | 14 ++
.../lib/services/openvidu/openvidu.service.ts | 7 +-
.../src/lib/services/panel/panel.service.ts | 26 ++-
.../participant/participant.service.ts | 4 +
.../services/recording/recording.service.ts | 119 +++++++---
.../services/translate/translate.service.ts | 3 +
.../openvidu-angular/src/public-api.ts | 6 +-
.../openvidu-webcomponent.component.html | 13 ++
.../openvidu-webcomponent.component.scss | 35 +--
.../openvidu-webcomponent.component.ts | 180 ++++++++++++++-
50 files changed, 1612 insertions(+), 313 deletions(-)
create mode 100644 openvidu-components-angular/projects/openvidu-angular/src/lib/components/dialogs/delete-recording.component.ts
rename openvidu-components-angular/projects/openvidu-angular/src/lib/components/{material => dialogs}/dialog.component.ts (100%)
create mode 100644 openvidu-components-angular/projects/openvidu-angular/src/lib/components/dialogs/recording-dialog.component.ts
create mode 100644 openvidu-components-angular/projects/openvidu-angular/src/lib/directives/api/activities-panel.directive.ts
create mode 100644 openvidu-components-angular/projects/openvidu-angular/src/lib/directives/api/recording-activity.directive.ts
create mode 100644 openvidu-components-angular/projects/openvidu-angular/src/lib/models/openvidu.model.ts
create mode 100644 openvidu-components-angular/projects/openvidu-angular/src/lib/pipes/recording.pipe.ts
diff --git a/openvidu-components-angular/projects/openvidu-angular/src/lib/components/dialogs/delete-recording.component.ts b/openvidu-components-angular/projects/openvidu-angular/src/lib/components/dialogs/delete-recording.component.ts
new file mode 100644
index 00000000..897a4893
--- /dev/null
+++ b/openvidu-components-angular/projects/openvidu-angular/src/lib/components/dialogs/delete-recording.component.ts
@@ -0,0 +1,24 @@
+import { Component } from '@angular/core';
+import { MatDialogRef } from '@angular/material/dialog';
+
+/**
+ * @internal
+ */
+@Component({
+ selector: 'app-delete-dialog',
+ template: `
+
{{'PANEL.RECORDING.DELETE_QUESTION' | translate}}
+
+
+
+
+ `,
+ styles: [``]
+})
+export class DeleteDialogComponent {
+ constructor(public dialogRef: MatDialogRef) {}
+
+ close(succsess = false) {
+ this.dialogRef.close(succsess);
+ }
+}
diff --git a/openvidu-components-angular/projects/openvidu-angular/src/lib/components/material/dialog.component.ts b/openvidu-components-angular/projects/openvidu-angular/src/lib/components/dialogs/dialog.component.ts
similarity index 100%
rename from openvidu-components-angular/projects/openvidu-angular/src/lib/components/material/dialog.component.ts
rename to openvidu-components-angular/projects/openvidu-angular/src/lib/components/dialogs/dialog.component.ts
diff --git a/openvidu-components-angular/projects/openvidu-angular/src/lib/components/dialogs/recording-dialog.component.ts b/openvidu-components-angular/projects/openvidu-angular/src/lib/components/dialogs/recording-dialog.component.ts
new file mode 100644
index 00000000..fb211a48
--- /dev/null
+++ b/openvidu-components-angular/projects/openvidu-angular/src/lib/components/dialogs/recording-dialog.component.ts
@@ -0,0 +1,39 @@
+import { Component, Inject } from '@angular/core';
+import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';
+
+/**
+ * @internal
+ */
+@Component({
+ selector: 'app-recording-dialog',
+ template: `
+
+
+
+
+
+
+ `,
+ styles: [
+ `
+ video {
+ max-height: 64vh;
+ max-width: 100%;
+ }
+ `
+ ]
+})
+export class RecordingDialogComponent {
+ src: string;
+ type: string;
+
+ constructor(public dialogRef: MatDialogRef, @Inject(MAT_DIALOG_DATA) public data: any) {
+ this.src = data.src;
+ this.type = data.type;
+ }
+ close() {
+ this.dialogRef.close();
+ }
+}
diff --git a/openvidu-components-angular/projects/openvidu-angular/src/lib/components/panel/activities-panel/activities-panel.component.css b/openvidu-components-angular/projects/openvidu-angular/src/lib/components/panel/activities-panel/activities-panel.component.css
index 001c8736..1a24a64a 100644
--- a/openvidu-components-angular/projects/openvidu-angular/src/lib/components/panel/activities-panel/activities-panel.component.css
+++ b/openvidu-components-angular/projects/openvidu-angular/src/lib/components/panel/activities-panel/activities-panel.component.css
@@ -35,6 +35,7 @@
::ng-deep .mat-expansion-panel-header {
padding: 0px 10px !important;
+ height: 65px !important;
}
::ng-deep .mat-list-base .mat-list-item .mat-list-item-content,
@@ -44,6 +45,7 @@
::ng-deep mat-expansion-panel .mat-expansion-panel-body {
padding: 0px !important;
+ min-height: 400px;
}
::ng-deep .mat-expansion-panel-header-description {
flex-grow: 0 !important;
diff --git a/openvidu-components-angular/projects/openvidu-angular/src/lib/components/panel/activities-panel/activities-panel.component.html b/openvidu-components-angular/projects/openvidu-angular/src/lib/components/panel/activities-panel/activities-panel.component.html
index bbd32233..ee602baa 100644
--- a/openvidu-components-angular/projects/openvidu-angular/src/lib/components/panel/activities-panel/activities-panel.component.html
+++ b/openvidu-components-angular/projects/openvidu-angular/src/lib/components/panel/activities-panel/activities-panel.component.html
@@ -1,14 +1,23 @@
diff --git a/openvidu-components-angular/projects/openvidu-angular/src/lib/components/panel/activities-panel/activities-panel.component.ts b/openvidu-components-angular/projects/openvidu-angular/src/lib/components/panel/activities-panel/activities-panel.component.ts
index 51a56df7..85afdbb7 100644
--- a/openvidu-components-angular/projects/openvidu-angular/src/lib/components/panel/activities-panel/activities-panel.component.ts
+++ b/openvidu-components-angular/projects/openvidu-angular/src/lib/components/panel/activities-panel/activities-panel.component.ts
@@ -1,23 +1,131 @@
-import { Component, OnInit } from '@angular/core';
+import { Component, OnInit, Output, EventEmitter, ChangeDetectionStrategy, ChangeDetectorRef } from '@angular/core';
+import { Subscription } from 'rxjs';
import { PanelType } from '../../../models/panel.model';
+import { OpenViduAngularConfigService } from '../../../services/config/openvidu-angular.config.service';
import { PanelService } from '../../../services/panel/panel.service';
-/**
- * @internal
- */
@Component({
selector: 'ov-activities-panel',
templateUrl: './activities-panel.component.html',
- styleUrls: ['../panel.component.css','./activities-panel.component.css']
+ styleUrls: ['../panel.component.css', './activities-panel.component.css'],
+ changeDetection: ChangeDetectionStrategy.OnPush
})
export class ActivitiesPanelComponent implements OnInit {
- constructor(private panelService: PanelService) {}
+ /**
+ * Provides event notifications that fire when start recording button has been clicked.
+ * The recording should be stated using the OpenVidu REST API.
+ */
+ @Output() onStartRecordingClicked: EventEmitter = new EventEmitter();
- ngOnInit(): void {}
+ /**
+ * Provides event notifications that fire when stop recording button has been clicked.
+ * The recording should be stopped using the OpenVidu REST API.
+ */
+ @Output() onStopRecordingClicked: EventEmitter = new EventEmitter();
- ngOnDestroy() {}
+ /**
+ * Provides event notifications that fire when download recording button has been clicked.
+ * The recording should be downloaded using the OpenVidu REST API.
+ */
+ @Output() onDownloadRecordingClicked: EventEmitter = new EventEmitter();
+ /**
+ * Provides event notifications that fire when delete recording button has been clicked.
+ * The recording should be deleted using the OpenVidu REST API.
+ */
+ @Output() onDeleteRecordingClicked: EventEmitter = new EventEmitter();
+ /**
+ * Provides event notifications that fire when play recording button has been clicked.
+ */
+ @Output() onPlayRecordingClicked: EventEmitter = new EventEmitter();
+ /**
+ * @internal
+ */
+ expandedPanel: string = '';
+ /**
+ * @internal
+ */
+ showRecordingActivity: boolean = true;
+ private panelSubscription: Subscription;
+ private recordingActivitySub: Subscription;
+
+ /**
+ * @internal
+ */
+ constructor(private panelService: PanelService, private libService: OpenViduAngularConfigService, private cd: ChangeDetectorRef) {}
+
+ /**
+ * @internal
+ */
+ ngOnInit(): void {
+ this.subscribeToPanelToggling();
+ this.subscribeToActivitiesPanelDirective();
+ }
+
+ /**
+ * @internal
+ */
+ ngOnDestroy() {
+ if (this.panelSubscription) this.panelSubscription.unsubscribe();
+ if (this.recordingActivitySub) this.recordingActivitySub.unsubscribe();
+ }
+
+ /**
+ * @internal
+ */
close() {
this.panelService.togglePanel(PanelType.ACTIVITIES);
}
+
+ /**
+ * @internal
+ */
+ _onStartRecordingClicked() {
+ this.onStartRecordingClicked.emit();
+ }
+
+ /**
+ * @internal
+ */
+ _onStopRecordingClicked() {
+ this.onStopRecordingClicked.emit();
+ }
+
+ /**
+ * @internal
+ */
+ _onDownloadRecordingClicked(recordingId: string) {
+ this.onDownloadRecordingClicked.emit(recordingId);
+ }
+
+ /**
+ * @internal
+ */
+ _onDeleteRecordingClicked(recordingId: string) {
+ this.onDeleteRecordingClicked.emit(recordingId);
+ }
+
+ /**
+ * @internal
+ */
+ _onPlayRecordingClicked(recordingId: string) {
+ this.onPlayRecordingClicked.emit(recordingId);
+ }
+
+ private subscribeToPanelToggling() {
+ this.panelSubscription = this.panelService.panelOpenedObs.subscribe(
+ (ev: { opened: boolean; type?: PanelType | string; expand?: string }) => {
+ if (ev.type === PanelType.ACTIVITIES) {
+ this.expandedPanel = ev.expand;
+ }
+ }
+ );
+ }
+
+ private subscribeToActivitiesPanelDirective() {
+ this.recordingActivitySub = this.libService.recordingActivity.subscribe((value: boolean) => {
+ this.showRecordingActivity = value;
+ this.cd.markForCheck();
+ });
+ }
}
diff --git a/openvidu-components-angular/projects/openvidu-angular/src/lib/components/panel/activities-panel/recording-activity-panel/recording-activity.component.css b/openvidu-components-angular/projects/openvidu-angular/src/lib/components/panel/activities-panel/recording-activity-panel/recording-activity.component.css
index a74b26bb..25ae5e17 100644
--- a/openvidu-components-angular/projects/openvidu-angular/src/lib/components/panel/activities-panel/recording-activity-panel/recording-activity.component.css
+++ b/openvidu-components-angular/projects/openvidu-angular/src/lib/components/panel/activities-panel/recording-activity-panel/recording-activity.component.css
@@ -1,25 +1,89 @@
#recording-status {
color: var(--ov-text-color);
display: inline;
- padding: 3px;
- font-size: 11px;
+ padding: 5px;
+ font-size: 12px;
border-radius: var(--ov-panel-radius);
}
+
+.time-container {
+ padding: 2px;
+}
+.recording-icon {
+ font-size: 32px !important;
+ height: 32px !important;
+ width: 32px !important;
+}
+
+.recording-duration {
+ background-color: var(--ov-light-color);
+ padding: 4px 8px;
+ border-radius: var(--ov-panel-radius);
+ font-weight: 500;
+}
+
+.recording-duration mat-icon {
+ font-size: 18px;
+ width: 18px;
+ height: 18px;
+}
+
+
.started {
- background-color: #005704;
+ background-color: #3b7430 !important;
+ color: var(--ov-text-color);
+}
+
+.activity-icon.started, .failed {
+ background-color: var(--ov-warn-color) !important;
+ color: var(--ov-text-color);
}
.stopped {
background-color: var(--ov-light-color);
color: var(--ov-panel-text-color) !important;
}
-
-#recording-file-item {
- padding: 0px 16px;
+.pending {
+ background-color: #ffd79b !important;
+ color: var(--ov-panel-text-color) !important;
}
-.recording-action-buttons{
- margin: auto;
+.panel-body-container {
+ padding: 10px;
+}
+
+.panel-body-container > .content {
+ align-items: stretch;
+ justify-content: center;
+ display: flex;
+ flex-direction: column;
+ box-flex: 1;
+ flex-grow: 1;
+ text-align: center;
+}
+
+.recording-error {
+ color: var(--ov-warn-color);
+ font-weight: 600;
+}
+.recording-name {
+ font-size: 16px;
+ font-weight: bold;
+}
+
+.recording-date {
+ font-size: 12px !important;
+ font-style: italic;
+}
+
+.not-allowed-message {
+ margin-top: 10px;
+ font-weight: bold;
+}
+
+.recording-action-buttons {
+ margin-top: 20px;
+ margin-bottom: 20px;
}
#start-recording-btn {
@@ -32,6 +96,17 @@
color: var(--ov-text-color);
}
+.delete-recording-btn {
+ color: var(--ov-warn-color);
+}
+
mat-expansion-panel {
- margin: 0pc 0px 15px 0px;
+ margin: 0px 0px 15px 0px;
+}
+
+.blink {
+ animation: blinker 1.5s linear infinite !important;
+}
+@keyframes blinker {
+ 50% { opacity: 0.4; }
}
\ No newline at end of file
diff --git a/openvidu-components-angular/projects/openvidu-angular/src/lib/components/panel/activities-panel/recording-activity-panel/recording-activity.component.html b/openvidu-components-angular/projects/openvidu-angular/src/lib/components/panel/activities-panel/recording-activity-panel/recording-activity.component.html
index 59de51df..67f559c2 100644
--- a/openvidu-components-angular/projects/openvidu-angular/src/lib/components/panel/activities-panel/recording-activity-panel/recording-activity.component.html
+++ b/openvidu-components-angular/projects/openvidu-angular/src/lib/components/panel/activities-panel/recording-activity-panel/recording-activity.component.html
@@ -1,62 +1,111 @@
-
+
-
-
video_camera_front
-
+
+
+ video_camera_front
+
+ error
+ radio_button_checked
-
Recording
-
Record your meeting for posterity
+
{{ 'PANEL.RECORDING.TITLE' | translate }}
+
{{ 'PANEL.RECORDING.SUBTITLE' | translate }}
-
-
-
- video_file
- {{ recording.name }}
-
- {{ recording.id }}
-
+
+
+
+
+

+
-
+
0">
+
+
+
0" class="item">
+
+ {{ 'PANEL.RECORDING.RECORDINGS' | translate }}
+
+ video_file
+
+ {{ recording.id }}
+
+
+ {{ recording.duration | duration }}
+ | {{ recording.size / 1024 / 1024 | number: '1.1-2' }} MBs
+
+ {{ recording.createdAt | date: 'HH:mm - dd/MM/yyyy' }}
+
+
+
-
-
-
-
-
-
-
NO RECORDINGS FOUND
+
+
+
diff --git a/openvidu-components-angular/projects/openvidu-angular/src/lib/components/panel/activities-panel/recording-activity-panel/recording-activity.component.ts b/openvidu-components-angular/projects/openvidu-angular/src/lib/components/panel/activities-panel/recording-activity-panel/recording-activity.component.ts
index 041b1d0f..70b926b6 100644
--- a/openvidu-components-angular/projects/openvidu-angular/src/lib/components/panel/activities-panel/recording-activity-panel/recording-activity.component.ts
+++ b/openvidu-components-angular/projects/openvidu-angular/src/lib/components/panel/activities-panel/recording-activity-panel/recording-activity.component.ts
@@ -1,89 +1,203 @@
-import { Component, OnInit, Output, EventEmitter } from '@angular/core';
+import { Component, OnInit, Output, EventEmitter, Input, ChangeDetectionStrategy, ChangeDetectorRef } from '@angular/core';
import { Subscription } from 'rxjs';
-import { RecordingStatus } from '../../../../models/recording.model';
-import { RecordingService, RecordingInfo } from '../../../../services/recording/recording.service';
+import { OpenViduRole } from '../../../../models/participant.model';
+import { RecordingInfo, RecordingStatus } from '../../../../models/recording.model';
+import { ActionService } from '../../../../services/action/action.service';
+import { OpenViduAngularConfigService } from '../../../../services/config/openvidu-angular.config.service';
+import { ParticipantService } from '../../../../services/participant/participant.service';
+import { RecordingService } from '../../../../services/recording/recording.service';
-/**
- * @internal
- */
@Component({
selector: 'ov-recording-activity',
templateUrl: './recording-activity.component.html',
- styleUrls: ['./recording-activity.component.css', '../activities-panel.component.css']
+ styleUrls: ['./recording-activity.component.css', '../activities-panel.component.css'],
+ changeDetection: ChangeDetectionStrategy.OnPush
})
export class RecordingActivityComponent implements OnInit {
+ /**
+ * @internal
+ */
+ @Input() expanded: boolean;
/**
* Provides event notifications that fire when start recording button has been clicked.
+ * The recording should be stopped using the REST API.
*/
- @Output() startRecordingClicked: EventEmitter = new EventEmitter();
+ @Output() onStartRecordingClicked: EventEmitter = new EventEmitter();
/**
* Provides event notifications that fire when stop recording button has been clicked.
+ * The recording should be stopped using the REST API.
*/
- @Output() stopRecordingClicked: EventEmitter = new EventEmitter();
- recordingStatus: RecordingStatus = RecordingStatus.STOPPED;
- recStatusEnum = RecordingStatus;
- isSessionCreator = true;
- recording: RecordingInfo;
- recordingSubscription: Subscription;
+ @Output() onStopRecordingClicked: EventEmitter = new EventEmitter();
+ /**
+ * Provides event notifications that fire when download recording button has been clicked.
+ * The recording should be downloaded using the REST API.
+ */
+ @Output() onDownloadRecordingClicked: EventEmitter = new EventEmitter();
+
+ /**
+ * Provides event notifications that fire when delete recording button has been clicked.
+ * The recording should be deleted using the REST API.
+ */
+ @Output() onDeleteRecordingClicked: EventEmitter = new EventEmitter();
+
+ /**
+ * Provides event notifications that fire when play recording button has been clicked.
+ */
+ @Output() onPlayRecordingClicked: EventEmitter = new EventEmitter();
+ /**
+ * @internal
+ */
+ recordingStatus: RecordingStatus = RecordingStatus.STOPPED;
+ /**
+ * @internal
+ */
opened: boolean = false;
- constructor(private recordingService: RecordingService) {}
+ /**
+ * @internal
+ */
+ recStatusEnum = RecordingStatus;
+ /**
+ * @internal
+ */
+ isSessionCreator = false;
+
+ /**
+ * @internal
+ */
+ liveRecording: RecordingInfo;
+ /**
+ * @internal
+ */
+ recordingsList: RecordingInfo[] = [];
+
+ /**
+ * @internal
+ */
+ recordingError: any;
+
+ private recordingStatusSubscription: Subscription;
+ private recordingListSubscription: Subscription;
+ private recordingErrorSub: Subscription;
+
+ /**
+ * @internal
+ */
+ constructor(
+ private recordingService: RecordingService,
+ private participantService: ParticipantService,
+ private libService: OpenViduAngularConfigService,
+ private actionService: ActionService,
+ private cd: ChangeDetectorRef
+ ) {}
+
+ /**
+ * @internal
+ */
ngOnInit(): void {
this.subscribeToRecordingStatus();
+ this.subscribeToRecordingActivityDirective();
+ this.isSessionCreator = this.participantService.getMyRole() === OpenViduRole.MODERATOR;
}
+ /**
+ * @internal
+ */
ngOnDestroy() {
- if (this.recordingSubscription) this.recordingSubscription.unsubscribe();
+ if (this.recordingStatusSubscription) this.recordingStatusSubscription.unsubscribe();
+ if (this.recordingListSubscription) this.recordingListSubscription.unsubscribe();
+ if (this.recordingErrorSub) this.recordingErrorSub.unsubscribe();
}
+ /**
+ * @internal
+ */
panelOpened() {
- //TODO EMITIR EVENTO
+ //TODO emit event
this.opened = true;
}
+ /**
+ * @internal
+ */
panelClosed() {
- //TODO EMITIR EVENTO
+ //TODO emit event
this.opened = false;
}
+ /**
+ * @internal
+ */
startRecording() {
- console.log('START RECORDING');
- this.startRecordingClicked.emit();
- //TODO: REMOVE
- const info: RecordingInfo = {
- status: RecordingStatus.STARTED,
- id: '1',
- name: 'akajo',
- reason: null
- };
- this.recordingService.startRecording(info);
- }
- stopRecording() {
- console.log('STOP RECORDING');
- this.stopRecordingClicked.emit();
- //TODO: REMOVE
- const info: RecordingInfo = {
- status: RecordingStatus.STOPPED,
- id: '1',
- name: 'akajo',
- reason: 'lalal'
- };
- this.recordingService.stopRecording(info);
+ this.onStartRecordingClicked.emit();
+ this.recordingService.updateStatus(RecordingStatus.STARTING);
}
- subscribeToRecordingStatus() {
- this.recordingSubscription = this.recordingService.recordingStatusObs.subscribe((info: RecordingInfo) => {
- if (info) {
- this.recordingStatus = info.status;
- if (info.status === RecordingStatus.STARTED) {
- this.recording = info;
- } else {
- this.recording = null;
+ /**
+ * @internal
+ */
+ stopRecording() {
+ this.onStopRecordingClicked.emit();
+ this.recordingService.updateStatus(RecordingStatus.STOPPING);
+ }
+
+ /**
+ * @internal
+ */
+
+ deleteRecording(id: string) {
+ const succsessCallback = () => {
+ this.onDeleteRecordingClicked.emit(id);
+ };
+ this.actionService.openDeleteRecordingDialog(succsessCallback);
+ }
+
+ /**
+ * @internal
+ */
+ download(recordingId: string) {
+ this.onDownloadRecordingClicked.emit(recordingId);
+ }
+
+ /**
+ * @internal
+ */
+ play(recordingId: string) {
+ this.onPlayRecordingClicked.emit(recordingId);
+ }
+
+ private subscribeToRecordingStatus() {
+ this.recordingStatusSubscription = this.recordingService.recordingStatusObs.subscribe(
+ (ev: { info: RecordingInfo; time?: Date }) => {
+ if (ev?.info) {
+ this.recordingStatus = ev.info.status;
+ if (ev.info.status === RecordingStatus.STARTED) {
+ this.liveRecording = ev.info;
+ } else {
+ this.liveRecording = null;
+ }
}
+ this.cd.markForCheck();
+ }
+ );
+ }
+
+ private subscribeToRecordingActivityDirective() {
+ this.recordingListSubscription = this.libService.recordingsListObs.subscribe((recordingList: RecordingInfo[]) => {
+ this.recordingsList = recordingList;
+ this.cd.markForCheck();
+ });
+
+ this.recordingErrorSub = this.libService.recordingErrorObs.subscribe((error: any) => {
+ console.log(error);
+ if (error) {
+ this.recordingService.updateStatus(RecordingStatus.FAILED);
+ this.recordingError = error.error?.message || error.message || error;
+ console.log('REC ERROR', this.recordingError)
}
});
}
diff --git a/openvidu-components-angular/projects/openvidu-angular/src/lib/components/panel/background-effects-panel/background-effects-panel.component.ts b/openvidu-components-angular/projects/openvidu-angular/src/lib/components/panel/background-effects-panel/background-effects-panel.component.ts
index 9d0533f8..2aadf895 100644
--- a/openvidu-components-angular/projects/openvidu-angular/src/lib/components/panel/background-effects-panel/background-effects-panel.component.ts
+++ b/openvidu-components-angular/projects/openvidu-angular/src/lib/components/panel/background-effects-panel/background-effects-panel.component.ts
@@ -20,6 +20,12 @@ export class BackgroundEffectsPanelComponent implements OnInit {
private backgrounds: BackgroundEffect[];
private backgroundSubs: Subscription;
+ /**
+ * @internal
+ * @param panelService
+ * @param backgroundService
+ * @param cd
+ */
constructor(private panelService: PanelService, private backgroundService: VirtualBackgroundService, private cd: ChangeDetectorRef) { }
ngOnInit(): void {
diff --git a/openvidu-components-angular/projects/openvidu-angular/src/lib/components/session/session.component.ts b/openvidu-components-angular/projects/openvidu-angular/src/lib/components/session/session.component.ts
index 45b3f1ac..cc021bf6 100644
--- a/openvidu-components-angular/projects/openvidu-angular/src/lib/components/session/session.component.ts
+++ b/openvidu-components-angular/projects/openvidu-angular/src/lib/components/session/session.component.ts
@@ -176,11 +176,13 @@ export class SessionComponent implements OnInit {
this.updateLayoutInterval = setInterval(() => this.layoutService.update(), 50);
});
- this.menuSubscription = this.panelService.panelOpenedObs.pipe(skip(1)).subscribe((ev: { opened: boolean; type?: PanelType }) => {
- if (this.sideMenu) {
- ev.opened ? this.sideMenu.open() : this.sideMenu.close();
- }
- });
+ this.menuSubscription = this.panelService.panelOpenedObs
+ .pipe(skip(1))
+ .subscribe((ev: { opened: boolean; type?: PanelType | string }) => {
+ if (this.sideMenu) {
+ ev.opened ? this.sideMenu.open() : this.sideMenu.close();
+ }
+ });
}
protected subscribeToLayoutWidth() {
diff --git a/openvidu-components-angular/projects/openvidu-angular/src/lib/components/stream/stream.component.css b/openvidu-components-angular/projects/openvidu-angular/src/lib/components/stream/stream.component.css
index 4ac05e71..e724d090 100644
--- a/openvidu-components-angular/projects/openvidu-angular/src/lib/components/stream/stream.component.css
+++ b/openvidu-components-angular/projects/openvidu-angular/src/lib/components/stream/stream.component.css
@@ -113,16 +113,4 @@
input {
caret-color: #ffffff !important;
- }
-
- .poster_img {
- position: absolute;
- z-index: 888;
- max-width: 70%;
- max-height: 70%;
- bottom: 0;
- top: 0;
- margin: auto;
- right: 0;
- left: 0;
}
\ No newline at end of file
diff --git a/openvidu-components-angular/projects/openvidu-angular/src/lib/components/toolbar/toolbar.component.css b/openvidu-components-angular/projects/openvidu-angular/src/lib/components/toolbar/toolbar.component.css
index 505e7298..ee0da00c 100644
--- a/openvidu-components-angular/projects/openvidu-angular/src/lib/components/toolbar/toolbar.component.css
+++ b/openvidu-components-angular/projects/openvidu-angular/src/lib/components/toolbar/toolbar.component.css
@@ -70,8 +70,8 @@
flex-direction: column;
}
-#recording-tag {
- padding: 0 15px;
+.recording-tag {
+ padding: 0 10px;
background-color: var(--ov-warn-color);
border-radius: var(--ov-panel-radius);
width: fit-content;
@@ -79,17 +79,18 @@
text-align: center;
line-height: 20px;
margin: auto;
- animation: blinker 1.5s linear infinite;
-
-
}
-#recording-tag mat-icon {
+.recording-tag mat-icon {
font-size: 16px;
display: inline;
vertical-align: sub;
margin-right: 5px;
}
+.blink {
+ animation: blinker 1.5s linear infinite;
+}
+
#point {
width: 10px;
height: 10px;
@@ -140,5 +141,5 @@
}
@keyframes blinker {
- 50% { opacity: 0.2; }
- }
\ No newline at end of file
+ 50% { opacity: 0.3; }
+}
\ No newline at end of file
diff --git a/openvidu-components-angular/projects/openvidu-angular/src/lib/components/toolbar/toolbar.component.html b/openvidu-components-angular/projects/openvidu-angular/src/lib/components/toolbar/toolbar.component.html
index c780a51c..8c09a057 100644
--- a/openvidu-components-angular/projects/openvidu-angular/src/lib/components/toolbar/toolbar.component.html
+++ b/openvidu-components-angular/projects/openvidu-angular/src/lib/components/toolbar/toolbar.component.html
@@ -2,11 +2,12 @@

-
+
{{ session.sessionId }}
-
-
radio_button_checked
-
REC
+
+ radio_button_checked
+ REC
+ | {{ recordingTime | date: 'H:mm:ss' }}
@@ -33,7 +34,9 @@
[class.warn-btn]="!isWebcamVideoActive"
>
videocam
-
videocam_off
+
videocam_off
@@ -49,31 +52,19 @@
screen_share
-
-
-
+
-
+