feat: Implement conversion service with job management and logging

- Added `ConversionService` class to handle job queuing, processing, and cancellation.
- Introduced `Job`, `JobLog`, and `JobResult` data classes to manage job details and results.
- Implemented job status tracking with enums for better state management.
- Created a web interface with HTML templates for job submission and monitoring.
- Developed CSS styles for a modern UI layout and responsive design.
- Added functionality for voice profile management in the voice mixer.
- Implemented a Docker Compose configuration for GPU support.
- Wrote unit tests for the conversion service to ensure job processing works as expected.
This commit is contained in:
JB
2025-10-05 15:53:33 -07:00
parent 033c809b95
commit 338ff104e8
18 changed files with 2353 additions and 436 deletions
+37
View File
@@ -0,0 +1,37 @@
<div class="card__title">Queue</div>
{% if jobs %}
<table class="jobs-table">
<thead>
<tr>
<th>Job</th>
<th>Status</th>
<th>Progress</th>
<th>Created</th>
<th></th>
</tr>
</thead>
<tbody>
{% for job in jobs %}
<tr>
<td>
<strong>{{ job.original_filename }}</strong>
<div class="tag">
{% if job.voice_profile %}Profile: {{ job.voice_profile }}{% else %}Voice: {{ job.voice }}{% endif %} · {{ job.language }}
</div>
</td>
<td>
<span class="badge badge--{{ job.status.value }}">{{ job.status.value|title }}</span>
</td>
<td>
<progress value="{{ job.processed_characters or 0 }}" max="{{ job.total_characters or 1 }}" class="progress"></progress>
<small>{{ job.processed_characters }} / {{ job.total_characters or '—' }}</small>
</td>
<td><small>{{ job.created_at|datetimeformat }}</small></td>
<td><a class="btn" href="{{ url_for('web.job_detail', job_id=job.id) }}">Inspect</a></td>
</tr>
{% endfor %}
</tbody>
</table>
{% else %}
<p>No jobs yet. Drop a file or paste text to get started.</p>
{% endif %}