VideoStudy/VideoStudy.UI/Pages/Library.razor

150 lines
4.7 KiB
Plaintext

@page "/library"
@inject VideoStudy.Shared.Services.PersistenceService PersistenceService
@using VideoStudy.Shared
@using System.Diagnostics
<div class="container-fluid py-4">
<div class="d-flex justify-content-between align-items-center mb-4">
<h2 class="fw-bold text-dark">📚 Minha Biblioteca</h2>
@if (!string.IsNullOrEmpty(currentFolder))
{
<button class="btn btn-outline-secondary" @onclick="GoBack">
⬅️ Voltar
</button>
}
</div>
@if (string.IsNullOrEmpty(currentFolder))
{
<!-- MODO PASTAS -->
<div class="row g-3">
<!-- Pasta Geral (Padrão) -->
<div class="col-md-3">
<div class="card h-100 shadow-sm folder-card" @onclick='() => OpenFolder("Geral")'>
<div class="card-body text-center p-4">
<div class="display-1 mb-2">📁</div>
<h5 class="fw-bold">Geral</h5>
<small class="text-muted">@GetCount("Geral") arquivos</small>
</div>
</div>
</div>
<!-- Outras Pastas do Disco -->
@foreach (var folder in folders)
{
if (folder == "Geral") continue;
<div class="col-md-3">
<div class="card h-100 shadow-sm folder-card" @onclick='() => OpenFolder(folder)'>
<div class="card-body text-center p-4">
<div class="display-1 mb-2">📁</div>
<h5 class="fw-bold">@folder</h5>
<small class="text-muted">@GetCount(folder) arquivos</small>
</div>
</div>
</div>
}
</div>
}
else
{
<!-- MODO ARQUIVOS (DENTRO DA PASTA) -->
<h5 class="mb-3 text-muted">Pasta: <strong>@currentFolder</strong></h5>
<div class="list-group shadow-sm">
@foreach (var session in currentSessions)
{
<div class="list-group-item list-group-item-action d-flex align-items-center p-3">
<div class="me-3 fs-1">📄</div>
<div class="flex-grow-1">
<h6 class="mb-1 fw-bold">@session.Title</h6>
<small class="text-muted">
📅 @session.CreatedAt.ToString("g") •
<span class="text-truncate d-inline-block" style="max-width: 300px;">@session.FilePath</span>
</small>
</div>
<button class="btn btn-primary btn-sm px-4 fw-bold" @onclick="() => OpenPdf(session.FilePath)">
Abrir PDF ↗️
</button>
</div>
}
@if (!currentSessions.Any())
{
<div class="text-center p-5 text-muted">
<h5>Esta pasta está vazia 🕸️</h5>
</div>
}
</div>
}
</div>
<style>
.folder-card {
cursor: pointer;
transition: transform 0.2s, box-shadow 0.2s;
border: none;
background: #f8f9fa;
}
.folder-card:hover {
transform: translateY(-5px);
box-shadow: 0 10px 20px rgba(0,0,0,0.1) !important;
background: #fff;
border: 1px solid #dee2e6;
}
</style>
@code {
private List<string> folders = new();
private List<VideoStudySession> allSessions = new();
private List<VideoStudySession> currentSessions = new();
private string? currentFolder = null;
protected override void OnInitialized()
{
LoadData();
}
private void LoadData()
{
// Ler estrutura física e banco
folders = PersistenceService.GetFolders();
if (!folders.Contains("Geral")) folders.Insert(0, "Geral"); // Garantir Geral
allSessions = PersistenceService.GetAllSessions();
}
private int GetCount(string folder)
{
return allSessions.Count(s => s.FolderName == folder);
}
private void OpenFolder(string folderName)
{
currentFolder = folderName;
currentSessions = allSessions.Where(s => s.FolderName == folderName).ToList();
}
private void GoBack()
{
currentFolder = null;
}
private void OpenPdf(string path)
{
try
{
if (File.Exists(path))
{
new Process
{
StartInfo = new ProcessStartInfo(path) { UseShellExecute = true }
}.Start();
}
}
catch
{
// Tratamento simples, idealmente mostraria um toast
}
}
}