mirror of https://github.com/OpenVidu/openvidu.git
ov-components: Implement error handling for recording start failures and enhance UI interactions
parent
5f6b404576
commit
fe3f90d266
|
@ -103,7 +103,7 @@
|
|||
<mat-icon class="error-icon" aria-hidden="true">error_outline</mat-icon>
|
||||
</div>
|
||||
<div class="error-content">
|
||||
<span class="error-title">Error starting recording</span>
|
||||
<span class="error-title">{{ 'PANEL.RECORDING.ERROR_STARTING' | translate }}</span>
|
||||
<span class="error-message">{{ recordingError }}</span>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -11,15 +11,21 @@
|
|||
id="activities-tag"
|
||||
*ngIf="recordingStatus === _recordingStatus.STARTED || broadcastingStatus === _broadcastingStatus.STARTED"
|
||||
>
|
||||
<div *ngIf="recordingStatus === _recordingStatus.STARTED" id="recording-tag" class="recording-tag">
|
||||
<mat-icon class="blink">radio_button_checked</mat-icon>
|
||||
<span class="blink">REC</span>
|
||||
<span *ngIf="recordingTime"> | {{ recordingTime | date: 'H:mm:ss' }}</span>
|
||||
</div>
|
||||
<div *ngIf="broadcastingStatus === _broadcastingStatus.STARTED" id="broadcasting-tag" class="broadcasting-tag">
|
||||
<mat-icon class="blink">sensors</mat-icon>
|
||||
<span class="blink">LIVE</span>
|
||||
</div>
|
||||
@if (recordingStatus === _recordingStatus.STARTED) {
|
||||
<div id="recording-tag" class="recording-tag" (click)="openRecordingActivityPanel()">
|
||||
<mat-icon class="blink">radio_button_checked</mat-icon>
|
||||
<span class="blink">REC</span>
|
||||
<span *ngIf="recordingTime"> | {{ recordingTime | date: 'H:mm:ss' }}</span>
|
||||
</div>
|
||||
}
|
||||
|
||||
@if (broadcastingStatus === _broadcastingStatus.STARTED) {
|
||||
<!-- Broadcasting tag -->
|
||||
<div id="broadcasting-tag" class="broadcasting-tag">
|
||||
<mat-icon class="blink">sensors</mat-icon>
|
||||
<span class="blink">LIVE</span>
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -129,12 +135,17 @@
|
|||
(click)="toggleRecording()"
|
||||
>
|
||||
<mat-icon color="warn">radio_button_checked</mat-icon>
|
||||
<span *ngIf="recordingStatus === _recordingStatus.STOPPED || recordingStatus === _recordingStatus.STOPPING">
|
||||
{{ 'TOOLBAR.START_RECORDING' | translate }}
|
||||
</span>
|
||||
<span *ngIf="recordingStatus === _recordingStatus.STARTED || recordingStatus === _recordingStatus.STARTING">
|
||||
{{ 'TOOLBAR.STOP_RECORDING' | translate }}
|
||||
</span>
|
||||
@if (
|
||||
recordingStatus === _recordingStatus.STOPPED ||
|
||||
recordingStatus === _recordingStatus.STOPPING ||
|
||||
recordingStatus === _recordingStatus.FAILED
|
||||
) {
|
||||
<span class="blink">
|
||||
{{ 'TOOLBAR.START_RECORDING' | translate }}
|
||||
</span>
|
||||
} @else if (recordingStatus === _recordingStatus.STARTED || recordingStatus === _recordingStatus.STARTING) {
|
||||
<span>{{ 'TOOLBAR.RECORDING' | translate }}</span>
|
||||
}
|
||||
</button>
|
||||
|
||||
<!-- View recordings button -->
|
||||
|
|
|
@ -126,6 +126,7 @@ $ov-recording-blinking-color: #eb5144;
|
|||
text-align: center;
|
||||
line-height: 20px;
|
||||
margin: auto;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.recording-tag {
|
||||
|
|
|
@ -563,10 +563,33 @@ export class ToolbarComponent implements OnInit, OnDestroy, AfterViewInit {
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @ignore
|
||||
*/
|
||||
openRecordingActivityPanel() {
|
||||
if (this.showActivitiesPanelButton && !this.isActivitiesOpened) {
|
||||
this.panelService.togglePanel(PanelType.ACTIVITIES, 'recording');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @ignore
|
||||
*/
|
||||
openBroadcastingActivityPanel() {
|
||||
if (this.showActivitiesPanelButton && !this.isActivitiesOpened) {
|
||||
this.panelService.togglePanel(PanelType.ACTIVITIES, 'broadcasting');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @ignore
|
||||
*/
|
||||
toggleRecording() {
|
||||
if (this.recordingStatus === RecordingStatus.FAILED) {
|
||||
this.openRecordingActivityPanel();
|
||||
return;
|
||||
}
|
||||
|
||||
const payload: RecordingStartRequestedEvent = {
|
||||
roomName: this.openviduService.getRoomName()
|
||||
};
|
||||
|
@ -576,9 +599,7 @@ export class ToolbarComponent implements OnInit, OnDestroy, AfterViewInit {
|
|||
this.onRecordingStopRequested.emit(payload);
|
||||
} else if (this.recordingStatus === RecordingStatus.STOPPED) {
|
||||
this.onRecordingStartRequested.emit(payload);
|
||||
if (this.showActivitiesPanelButton && !this.isActivitiesOpened) {
|
||||
this.toggleActivitiesPanel('recording');
|
||||
}
|
||||
this.openRecordingActivityPanel();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -595,9 +616,7 @@ export class ToolbarComponent implements OnInit, OnDestroy, AfterViewInit {
|
|||
this.onBroadcastingStopRequested.emit(payload);
|
||||
this.broadcastingService.setBroadcastingStopped();
|
||||
} else if (this.broadcastingStatus === BroadcastingStatus.STOPPED) {
|
||||
if (this.showActivitiesPanelButton && !this.isActivitiesOpened) {
|
||||
this.toggleActivitiesPanel('broadcasting');
|
||||
}
|
||||
this.openBroadcastingActivityPanel();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -650,7 +669,11 @@ export class ToolbarComponent implements OnInit, OnDestroy, AfterViewInit {
|
|||
this.documentService.toggleFullscreen('session-container');
|
||||
}
|
||||
|
||||
private toggleActivitiesPanel(expandPanel: string) {
|
||||
/**
|
||||
* @internal
|
||||
* @param expandPanel
|
||||
*/
|
||||
toggleActivitiesPanel(expandPanel: string) {
|
||||
this.panelService.togglePanel(PanelType.ACTIVITIES, expandPanel);
|
||||
}
|
||||
|
||||
|
|
|
@ -132,7 +132,8 @@
|
|||
"RECORDINGS": "录制",
|
||||
"NO_MODERATOR": "只有主持人可以开始录音",
|
||||
"NO_TRACKS_PUBLISHED": "请分享音频或视频以开始录制。",
|
||||
"NO_RECORDINGS_AVAILABLE": "目前没有可用的录音"
|
||||
"NO_RECORDINGS_AVAILABLE": "目前没有可用的录音",
|
||||
"ERROR_STARTING": "开始录音时出错"
|
||||
},
|
||||
"STREAMING": {
|
||||
"TITLE": "直播",
|
||||
|
|
|
@ -126,7 +126,8 @@
|
|||
"DOWNLOAD": "Download",
|
||||
"RECORDINGS": "AUFZEICHNUNGEN",
|
||||
"NO_MODERATOR": "Nur der MODERATOR kann die Aufzeichnung starten",
|
||||
"NO_TRACKS_PUBLISHED": "Teile Audio oder Video, um mit der Aufnahme zu beginnen."
|
||||
"NO_TRACKS_PUBLISHED": "Teile Audio oder Video, um mit der Aufnahme zu beginnen.",
|
||||
"ERROR_STARTING": "Fehler beim Starten der Aufnahme"
|
||||
},
|
||||
"STREAMING": {
|
||||
"TITLE": "Streaming",
|
||||
|
|
|
@ -136,7 +136,8 @@
|
|||
"NO_MODERATOR": "Only the MODERATOR can start the recording",
|
||||
"NO_TRACKS_PUBLISHED": "Share audio or video to start recording.",
|
||||
"NO_RECORDINGS_AVAILABLE": "No recordings available at this time",
|
||||
"BROWSE_RECORDINGS": "Browse saved recordings"
|
||||
"BROWSE_RECORDINGS": "Browse saved recordings",
|
||||
"ERROR_STARTING": "Error starting recording"
|
||||
},
|
||||
"STREAMING": {
|
||||
"TITLE": "Streaming",
|
||||
|
|
|
@ -132,7 +132,8 @@
|
|||
"RECORDINGS": "GRABACIONES",
|
||||
"NO_MODERATOR": "Sólo el MODERADOR puede iniciar la grabación",
|
||||
"NO_TRACKS_PUBLISHED": "Comparte audio o video para poder empezar a grabar.",
|
||||
"NO_RECORDINGS_AVAILABLE": "No hay grabaciones disponibles en este momento"
|
||||
"NO_RECORDINGS_AVAILABLE": "No hay grabaciones disponibles en este momento",
|
||||
"ERROR_STARTING": "Error iniciando la grabación"
|
||||
},
|
||||
"STREAMING": {
|
||||
"TITLE": "Streaming",
|
||||
|
|
|
@ -132,7 +132,8 @@
|
|||
"RECORDINGS": "ENREGISTREMENTS",
|
||||
"NO_MODERATOR": "Seul le MODERATEUR peut lancer l'enregistrement",
|
||||
"NO_TRACKS_PUBLISHED": "Partagez de l’audio ou de la vidéo pour commencer l’enregistrement.",
|
||||
"NO_RECORDINGS_AVAILABLE": "Aucun enregistrement disponible pour le moment"
|
||||
"NO_RECORDINGS_AVAILABLE": "Aucun enregistrement disponible pour le moment",
|
||||
"ERROR_STARTING": "Erreur de démarrage"
|
||||
},
|
||||
"STREAMING": {
|
||||
"TITLE": "Streaming",
|
||||
|
|
|
@ -132,7 +132,8 @@
|
|||
"RECORDINGS": "रिकॉर्डिंग",
|
||||
"NO_MODERATOR": "केवल मॉडरेटर ही रिकॉर्डिंग शुरू कर सकता है",
|
||||
"NO_TRACKS_PUBLISHED": "रिकॉर्डिंग शुरू करने के लिए ऑडियो या वीडियो साझा करें।",
|
||||
"NO_RECORDINGS_AVAILABLE": "इस समय कोई रिकॉर्डिंग उपलब्ध नहीं है"
|
||||
"NO_RECORDINGS_AVAILABLE": "इस समय कोई रिकॉर्डिंग उपलब्ध नहीं है",
|
||||
"ERROR_STARTING": "रिकॉर्डिंग शुरू करने में त्रुटि"
|
||||
},
|
||||
"STREAMING": {
|
||||
"TITLE": "स्ट्रीमिंग",
|
||||
|
|
|
@ -132,7 +132,8 @@
|
|||
"RECORDINGS": "REGISTRAZIONI",
|
||||
"NO_MODERATOR": "Solo il MODERATORE può avviare la registrazione",
|
||||
"NO_TRACKS_PUBLISHED": "Condividi audio o video per iniziare la registrazione.",
|
||||
"NO_RECORDINGS_AVAILABLE": "Nessuna registrazione disponibile al momento"
|
||||
"NO_RECORDINGS_AVAILABLE": "Nessuna registrazione disponibile al momento",
|
||||
"ERROR_STARTING": "Errore di avvio"
|
||||
},
|
||||
"STREAMING": {
|
||||
"TITLE": "Streaming",
|
||||
|
|
|
@ -132,7 +132,8 @@
|
|||
"RECORDINGS": "録画",
|
||||
"NO_MODERATOR": "録画を開始できるのは、モデレーターのみです",
|
||||
"NO_TRACKS_PUBLISHED": "録音を開始するには、音声または動画を共有してください。",
|
||||
"NO_RECORDINGS_AVAILABLE": "現在利用可能な録画はありません"
|
||||
"NO_RECORDINGS_AVAILABLE": "現在利用可能な録画はありません",
|
||||
"ERROR_STARTING": "録画開始エラー"
|
||||
},
|
||||
"STREAMING": {
|
||||
"TITLE": "ストリーミング",
|
||||
|
|
|
@ -132,7 +132,8 @@
|
|||
"RECORDINGS": "OPNAME",
|
||||
"NO_MODERATOR": "Alleen de MOEDERATOR kan de opname starten",
|
||||
"NO_TRACKS_PUBLISHED": "Deel audio of video om met opnemen te beginnen.",
|
||||
"NO_RECORDINGS_AVAILABLE": "Momenteel zijn er geen opnames beschikbaar"
|
||||
"NO_RECORDINGS_AVAILABLE": "Momenteel zijn er geen opnames beschikbaar",
|
||||
"ERROR_STARTING": "Fout bij starten opname"
|
||||
},
|
||||
"STREAMING": {
|
||||
"TITLE": "Streaming",
|
||||
|
|
|
@ -132,7 +132,8 @@
|
|||
"RECORDINGS": "GRAVAÇÕES",
|
||||
"NO_MODERATOR": "Só o MODERADOR pode iniciar a gravação",
|
||||
"NO_TRACKS_PUBLISHED": "Compartilhe áudio ou vídeo para começar a gravar.",
|
||||
"NO_RECORDINGS_AVAILABLE": "Nenhuma gravação disponível no momento"
|
||||
"NO_RECORDINGS_AVAILABLE": "Nenhuma gravação disponível no momento",
|
||||
"ERROR_STARTING": "Erro ao iniciar gravação"
|
||||
},
|
||||
"STREAMING": {
|
||||
"TITLE": "Streaming",
|
||||
|
|
Loading…
Reference in New Issue