📄 src/Cli/Program.cs
using System.Linq;
using System.Reflection;
using Jellyfin.Database.Implementations;
using Jellyfin.Database.Implementations.Entities;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using Slopper.Infrastructure.Database;

var builder = Host.CreateApplicationBuilder();

builder.Configuration.AddUserSecrets(Assembly.GetExecutingAssembly());

builder.Services.AddJellyfinDatabase();

using var app = builder.Build();

var dbContext = app.Services.GetRequiredService<JellyfinDbContext>();
var subs = dbContext
    .MediaStreamInfos.AsNoTracking()
    .Include(s => s.Item)
    .Where(s => s.StreamType == MediaStreamTypeEntity.Subtitle && s.Language == "eng")
    .OrderBy(s => s.Item.SortName)
    .Take(4);

var logger = app.Services.GetRequiredService<ILogger<Program>>();
await foreach (var sub in subs.AsAsyncEnumerable())
{
    logger.LogInformation(
        "{Title}: (IsExternal: {IsExternal}; Format: {Format}) {StreamIndex} {Path}",
        string.Join(" ", new[] { sub.Item.SeriesName, sub.Item.SeasonName, sub.Item.Name }.Where(s => s is not null)),
        sub.IsExternal,
        sub.Codec,
        sub.StreamIndex,
        sub.Path
    );
}