VideoStudy/VideoStudy.Linux/Program.cs
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

66 lines
2.0 KiB
C#

using Microsoft.Extensions.DependencyInjection;
using Photino.Blazor;
using VideoStudy.UI;
using VideoStudy.Shared;
namespace VideoStudy.Linux;
class Program
{
[STAThread]
static void Main(string[] args)
{
var ComponentsApp = typeof(VideoStudy.UI.App);
var builder = PhotinoBlazorAppBuilder.CreateDefault(args);
// Registro de serviços da UI Unificada
builder.Services.AddVideoStudyUI();
// Configurar HttpClient para a API
builder.Services.AddScoped(sp => new HttpClient
{
BaseAddress = new Uri("http://localhost:5000"),
Timeout = TimeSpan.FromMinutes(10)
});
// Registrar um IPdfSaver dummy ou específico para Linux se necessário
// No Linux, o Photino pode usar o explorador de arquivos nativo ou salvar direto na pasta Downloads
builder.Services.AddSingleton<IPdfSaver, LinuxPdfSaver>();
builder.RootComponents.Add(ComponentsApp, "#app");
var app = builder.Build();
app.MainWindow
.SetTitle("VideoStudy - Study Smarter with AI")
.SetSize(1200, 800)
.SetIconFile("wwwroot/favicon.ico") // Se houver
.Center();
app.Run();
}
}
// Implementação básica de salvamento para Linux
public class LinuxPdfSaver : IPdfSaver
{
public async Task<string?> SavePdfAsync(byte[] pdfData, string suggestedFileName)
{
// No Linux, por simplicidade inicial, vamos salvar na pasta Downloads do usuário
var downloadsPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile), "Downloads");
var filePath = Path.Combine(downloadsPath, suggestedFileName);
await File.WriteAllBytesAsync(filePath, pdfData);
// No Linux, podemos tentar abrir o arquivo usando 'xdg-open'
try
{
System.Diagnostics.Process.Start("xdg-open", filePath);
}
catch { }
return filePath;
}
}