Auto-queue transcription on upload and clarify pending status.
Batch uploads were only storing files as pending without dispatching Whisper jobs; queue them immediately, add a bulk pending action, and show human-readable status labels.
This commit is contained in:
@@ -71,6 +71,20 @@ class Recording extends Model
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Word count of the stored transcript (0 when empty).
|
||||
*/
|
||||
protected function wordCount(): Attribute
|
||||
{
|
||||
return Attribute::get(function (): int {
|
||||
if (! filled($this->transcript)) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
return count(preg_split('/\s+/u', trim($this->transcript), -1, PREG_SPLIT_NO_EMPTY) ?: []);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Friendly label for the selected transcription engine.
|
||||
*/
|
||||
@@ -92,6 +106,47 @@ class Recording extends Model
|
||||
return in_array($this->transcription_status, ['pending', 'processing'], true);
|
||||
}
|
||||
|
||||
/**
|
||||
* Queue a new local faster-whisper transcription run.
|
||||
*/
|
||||
public function queueLocalTranscription(): void
|
||||
{
|
||||
// Only stop a real in-flight/queued run — bare "pending" uploads have no job yet.
|
||||
if ($this->transcription_status === 'processing' || $this->hasActiveTranscriptionJob()) {
|
||||
$this->cancelTranscription(silent: true);
|
||||
$this->refresh();
|
||||
}
|
||||
|
||||
$this->update([
|
||||
'transcription_driver' => 'local',
|
||||
'ollama_url' => null,
|
||||
'transcription_status' => 'pending',
|
||||
'transcription_progress' => 'Queued — waiting to start…',
|
||||
'transcription_percent' => 5,
|
||||
'transcription_started_at' => now(),
|
||||
'transcription_error' => null,
|
||||
// Keep the previous transcript until a new run succeeds.
|
||||
'transcribed_at' => $this->transcribed_at,
|
||||
]);
|
||||
|
||||
TranscribeRecording::dispatch($this->fresh());
|
||||
}
|
||||
|
||||
/**
|
||||
* Human-readable transcription status for badges.
|
||||
*/
|
||||
public function transcriptionStatusLabel(): string
|
||||
{
|
||||
return match ($this->transcription_status) {
|
||||
'pending' => 'Queued',
|
||||
'processing' => 'Transcribing',
|
||||
'done' => 'Done',
|
||||
'failed' => 'Failed',
|
||||
'cancelled' => 'Cancelled',
|
||||
default => (string) $this->transcription_status,
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Search title, metadata, and stored transcript text.
|
||||
*/
|
||||
@@ -383,6 +438,7 @@ class Recording extends Model
|
||||
return [
|
||||
'id' => $this->id,
|
||||
'status' => $this->transcription_status,
|
||||
'status_label' => $this->transcriptionStatusLabel(),
|
||||
'progress' => $this->transcription_progress,
|
||||
'percent' => $this->transcription_percent,
|
||||
'driver' => $this->transcription_driver,
|
||||
|
||||
Reference in New Issue
Block a user