using AzureAi.Transcriber.Services; using Microsoft.AspNetCore.Components; namespace AzureAi.Transcriber.Components.Pages; public class HomeBase: ComponentBase { [Inject] protected ILogger Logger { get; set; } = null!; [Inject] protected IFileService FileService { get; set; } = null!; [Inject] protected ITranscribeService TranscribeService { get; set; } = null!; public List 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); } protected async void Transcribe() { if (string.IsNullOrWhiteSpace(SelectedFile)) { Logger.LogWarning("No file selected for transcription."); return; } try { Logger.LogInformation("Beginning transcription of: {path}", SelectedFile); TranscribeInProgress = true; await InvokeAsync(StateHasChanged); var result = await TranscribeService.Transcribe(SelectedFile); Transcription = result.Text; 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); } }