using System.Collections.Generic; using System.Threading.Tasks; using API.Data; using API.DTOs.Theme; using API.Extensions; using API.Services; using API.Services.Tasks; using Kavita.Common; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; namespace API.Controllers; public class ThemeController : BaseApiController { private readonly IUnitOfWork _unitOfWork; private readonly IThemeService _themeService; private readonly ITaskScheduler _taskScheduler; public ThemeController(IUnitOfWork unitOfWork, IThemeService themeService, ITaskScheduler taskScheduler) { _unitOfWork = unitOfWork; _themeService = themeService; _taskScheduler = taskScheduler; } [ResponseCache(CacheProfileName = "10Minute")] [AllowAnonymous] [HttpGet] public async Task>> GetThemes() { return Ok(await _unitOfWork.SiteThemeRepository.GetThemeDtos()); } [Authorize("RequireAdminRole")] [HttpPost("scan")] public ActionResult Scan() { _taskScheduler.ScanSiteThemes(); return Ok(); } [Authorize("RequireAdminRole")] [HttpPost("update-default")] public async Task UpdateDefault(UpdateDefaultThemeDto dto) { await _themeService.UpdateDefault(dto.ThemeId); return Ok(); } /// /// Returns css content to the UI. UI is expected to escape the content /// /// [AllowAnonymous] [HttpGet("download-content")] public async Task> GetThemeContent(int themeId) { try { return Ok(await _themeService.GetContent(themeId)); } catch (KavitaException ex) { return BadRequest(ex.Message); } } }