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 @@

Activities

-
- +
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 }}

- {{ recordingStatus }} + {{ recordingStatus | uppercase }}
-
- - - video_file -

{{ recording.name }}

-

- {{ recording.id }} -

+
+
+ +
+ +
-
- + + + + {{ 'PANEL.RECORDING.STARTING' | translate }} + {{ 'PANEL.RECORDING.STOPPING' | translate }} + Message: {{ recordingError | json }} +
+ + +

{{ 'PANEL.RECORDING.NO_MODERATOR' | translate }}

+
+ + + +
+ +
{{ '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 - - - + - + - - + + {{ 'TOOLBAR.START_RECORDING' | translate }} + + + {{ 'TOOLBAR.STOP_RECORDING' | translate }} + +