resetPage(); } public function queuePending(): void { $queued = 0; Auth::user()->recordings() ->whereIn('transcription_status', ['pending', 'failed', 'cancelled']) ->orderBy('id') ->each(function (Recording $recording) use (&$queued): void { if ($recording->hasActiveTranscriptionJob()) { return; } $recording->queueLocalTranscription(); $queued++; }); if ($queued === 0) { Flux::toast(text: 'No recordings need transcription right now.', variant: 'danger'); return; } Flux::toast( text: $queued === 1 ? 'Queued 1 recording for transcription.' : "Queued {$queued} recordings for transcription.", variant: 'success', ); } public function delete(int $recordingId): void { $recording = Auth::user()->recordings()->findOrFail($recordingId); Gate::authorize('delete', $recording); $recording->deleteFile(); $recording->delete(); Flux::toast(text: 'Recording deleted.', variant: 'success'); } public function render(): View { $user = Auth::user(); $user->recordings() ->whereIn('transcription_status', ['pending', 'processing']) ->orderBy('id') ->each(fn (Recording $recording) => $recording->recoverOrphanedTranscription()); $query = $user->recordings()->latest(); $search = trim($this->search); if ($search !== '') { $query->search($search); } $recordings = $query->paginate(20); $pendingCount = $user->recordings() ->whereIn('transcription_status', ['pending', 'failed', 'cancelled']) ->get() ->filter(fn (Recording $recording) => ! $recording->hasActiveTranscriptionJob()) ->count(); return view('livewire.recordings.index', [ 'recordings' => $recordings, 'search' => $search, 'pendingCount' => $pendingCount, ]); } }