50 lines
1.4 KiB
C#
50 lines
1.4 KiB
C#
using Microsoft.EntityFrameworkCore;
|
|
using Microsoft.Extensions.Caching.Memory;
|
|
using Microsoft.Extensions.Options;
|
|
using Moonlight.Api.Configuration;
|
|
using Moonlight.Api.Database;
|
|
using Moonlight.Api.Database.Entities;
|
|
using Moonlight.Api.Models;
|
|
|
|
namespace Moonlight.Api.Services;
|
|
|
|
public class FrontendService
|
|
{
|
|
private readonly IMemoryCache Cache;
|
|
private readonly DatabaseRepository<Theme> ThemeRepository;
|
|
private readonly IOptions<FrontendOptions> Options;
|
|
|
|
private const string CacheKey = $"Moonlight.{nameof(FrontendService)}.{nameof(GetConfigurationAsync)}";
|
|
|
|
public FrontendService(IMemoryCache cache, DatabaseRepository<Theme> themeRepository, IOptions<FrontendOptions> options)
|
|
{
|
|
Cache = cache;
|
|
ThemeRepository = themeRepository;
|
|
Options = options;
|
|
}
|
|
|
|
public async Task<FrontendConfiguration> GetConfigurationAsync()
|
|
{
|
|
if (Cache.TryGetValue(CacheKey, out FrontendConfiguration? value))
|
|
{
|
|
if (value != null)
|
|
return value;
|
|
}
|
|
|
|
var theme = await ThemeRepository
|
|
.Query()
|
|
.FirstOrDefaultAsync(x => x.IsEnabled);
|
|
|
|
var config = new FrontendConfiguration("Moonlight", theme?.CssContent);
|
|
|
|
Cache.Set(CacheKey, config, TimeSpan.FromMinutes(Options.Value.CacheMinutes));
|
|
|
|
return config;
|
|
}
|
|
|
|
public Task ResetCacheAsync()
|
|
{
|
|
Cache.Remove(CacheKey);
|
|
return Task.CompletedTask;
|
|
}
|
|
} |