VideoStudy/VideoStudy.UI/Components/ProgressIndicator.razor
Ricardo Carneiro c49ec3d5a5 refactor: limpeza geral e troca de Puppeteer por FFmpeg
- Remove projetos mortos: VideoStudy.Native (MAUI), Controllers/LicenseController
- Remove serviços não usados: FFmpegService, HardwareIdService, LicenseManager,
  PdfGeneratorService, ScreenshotService, TranscriptionService do UI
- Remove dependências pesadas do UI: Whisper.net, YoutubeExplode, QuestPDF
- Remove PuppeteerSharp e SkiaSharp do API (150MB Chromium não é mais necessário)
- Screenshots agora usam FFmpeg diretamente (mais simples, mais confiável)
- YouTubeService reescrito para chamar /api/video-info em vez de YoutubeExplode
- Adiciona campo UserContext em AnalysisRequest (contexto livre do usuário)
- UI traduzida para português; aba de arquivo local removida (nunca funcionou)
- YouTubeProcessor simplificado: sem modo Advanced/Whisper
- GetYtDlpPath busca yt-dlp.exe subindo até 7 níveis de diretório
- Cookies do yt-dlp configuráveis via YtDlp:CookiesBrowser no appsettings
- Chave Groq agora lida de env var GROQ_API_KEY (appsettings.json sem segredos)
- VideoStudy.Linux (Photino) adicionado à solução como host multiplataforma
- yt-dlp atualizado de 2025.01.26 para 2026.03.17 (fix do nsig extraction)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-15 14:08:05 -03:00

58 lines
1.9 KiB
Plaintext

<div class="progress-container mb-4">
<div class="d-flex justify-content-between mb-2">
<span class="fw-bold text-primary">@Status</span>
<span class="text-muted">@Percent%</span>
</div>
<div class="progress" style="height: 10px;">
<div class="progress-bar progress-bar-striped progress-bar-animated bg-gradient"
role="progressbar"
style="width: @Percent%"></div>
</div>
<div class="steps d-flex justify-content-between mt-3 px-2">
@foreach (var step in Steps)
{
<div class="step text-center @(step.IsActive ? "active" : "") @(step.IsCompleted ? "completed" : "")">
<div class="step-circle mb-1">
@if (step.IsCompleted) { <span>✓</span> } else { <span>@step.Number</span> }
</div>
<small class="step-label d-none d-sm-block">@step.Label</small>
</div>
}
</div>
</div>
@code {
[Parameter] public string Status { get; set; } = "Ready";
[Parameter] public int Percent { get; set; } = 0;
// Simple step model
public class Step
{
public int Number { get; set; }
public string Label { get; set; } = "";
public bool IsActive { get; set; }
public bool IsCompleted { get; set; }
}
// We can pass current step index from parent
[Parameter] public int CurrentStepIndex { get; set; } = 0;
private List<Step> Steps = new()
{
new Step { Number = 1, Label = "Download" },
new Step { Number = 2, Label = "Transcrição" },
new Step { Number = 3, Label = "Análise IA" },
new Step { Number = 4, Label = "PDF" }
};
protected override void OnParametersSet()
{
for (int i = 0; i < Steps.Count; i++)
{
Steps[i].IsCompleted = i < CurrentStepIndex;
Steps[i].IsActive = i == CurrentStepIndex;
}
}
}