- 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>
66 lines
2.0 KiB
C#
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;
|
|
}
|
|
}
|