@php $room = $recording->session->room; $sessionNoun = $room->isConference() ? 'conference' : 'meeting'; $roomDetailsRoute = match (true) { $room->isConference() => route('meet.conferences.show', $room), $room->isWebinar() => route('meet.webinars.show', $room), $room->isSpace() => route('meet.spaces.show', $room), default => route('meet.rooms.show', $room), }; $statusLabel = config('meet.recording_statuses')[$recording->status] ?? ucfirst($recording->status); $statusClass = match ($recording->status) { 'ready' => 'bg-emerald-50 text-emerald-700', 'processing' => 'bg-amber-50 text-amber-700', 'recording' => 'bg-red-50 text-red-700', 'failed' => 'bg-red-50 text-red-700', default => 'bg-slate-100 text-slate-600', }; $summary = $recording->session->aiSummaries->where('status', 'ready')->sortByDesc('created_at')->first(); $fileExtension = $recording->storage_path ? strtoupper(pathinfo($recording->storage_path, PATHINFO_EXTENSION)) : null; $fileSizeLabel = null; if ($recording->file_size) { $bytes = (int) $recording->file_size; if ($bytes >= 1073741824) { $fileSizeLabel = number_format($bytes / 1073741824, 2).' GB'; } elseif ($bytes >= 1048576) { $fileSizeLabel = number_format($bytes / 1048576, 1).' MB'; } elseif ($bytes >= 1024) { $fileSizeLabel = number_format($bytes / 1024, 1).' KB'; } else { $fileSizeLabel = $bytes.' B'; } } @endphp
Recordings

{{ $room->title }}

{{ $recording->started_at?->timezone($room->timezone)->format('l, M j, Y · g:i A') ?? $recording->created_at->format('M j, Y g:i A') }}

{{ $statusLabel }}
@if ($recording->duration_seconds)
Duration
{{ gmdate('H:i:s', $recording->duration_seconds) }}
@endif @if ($fileSizeLabel)
File size
{{ $fileSizeLabel }}@if ($fileExtension) · {{ $fileExtension }}@endif
@endif @if ($recording->ended_at)
Ended
{{ $recording->ended_at->timezone($room->timezone)->format('M j, Y g:i A') }}
@endif
Layout
{{ $recording->layout ?? 'gallery' }}
@if ($recording->hasPlayableFile())

Stored on Ladill as WebM — VLC, Chrome, and QuickTime can play it after download.

@elseif ($recording->status === 'processing')

Processing recording

This usually takes a moment after the {{ $sessionNoun }} ends. Refresh shortly.

@elseif ($recording->status === 'failed')
{{ $recording->failure_reason ?? 'This recording could not be processed.' }}
@endif
@if ($recording->hasPlayableFile()) Download @endif View {{ $sessionNoun }} @if ($summary) AI summary @endif
@if ($canManage)
@endif