azure-ai/AzureAi.Transcriber/Components/Pages/Home.razor.cs

80 lines
2.2 KiB
C#
Raw Permalink Normal View History

2024-05-08 10:14:30 +00:00
using AzureAi.Transcriber.Services;
using Microsoft.AspNetCore.Components;
namespace AzureAi.Transcriber.Components.Pages;
public class HomeBase: ComponentBase
{
[Inject]
protected ILogger<HomeBase> Logger { get; set; } = null!;
[Inject]
protected IFileService FileService { get; set; } = null!;
[Inject]
protected ITranscribeService TranscribeService { get; set; } = null!;
public List<string> Files { get; set; } = [];
public string? SelectedFile { get; set; }
public bool TranscribeInProgress { get; set; }
public string Transcription { get; set; } = string.Empty;
protected override async Task OnInitializedAsync()
{
Files = await FileService.GetFiles();
}
protected void SelectFile(string path)
{
if (path == SelectedFile)
{
SelectedFile = string.Empty;
InvokeAsync(StateHasChanged);
return;
}
if (TranscribeInProgress)
{
Logger.LogWarning("Transcription in progress, cannot select new file.");
return;
}
Logger.LogInformation("Selected file: {path}", path);
SelectedFile = path;
InvokeAsync(StateHasChanged);
}
2024-05-08 12:29:14 +00:00
protected async void Transcribe(bool full = false)
2024-05-08 10:14:30 +00:00
{
if (string.IsNullOrWhiteSpace(SelectedFile))
{
Logger.LogWarning("No file selected for transcription.");
return;
}
try
{
Logger.LogInformation("Beginning transcription of: {path}", SelectedFile);
TranscribeInProgress = true;
2024-05-08 12:29:14 +00:00
Transcription = string.Empty;
2024-05-08 10:14:30 +00:00
await InvokeAsync(StateHasChanged);
2024-05-08 12:29:14 +00:00
Transcription = full
? await TranscribeService.TranscribeFull(SelectedFile)
: await TranscribeService.TranscribeSnippet(SelectedFile);
2024-05-08 10:14:30 +00:00
Logger.LogInformation("Transcription complete for: {path}", SelectedFile);
}
catch (Exception e)
{
Logger.LogError(e, "Failed to transcribe {path}", SelectedFile);
// Todo: display error
}
TranscribeInProgress = false;
await InvokeAsync(StateHasChanged);
}
}