using System; using System.Collections.Generic; using System.Globalization; using System.Linq; using System.Threading; using System.Threading.Tasks; using ErsatzTV.Core.Interfaces.Repositories; using ErsatzTV.Infrastructure.Data; using ErsatzTV.Infrastructure.Extensions; using LanguageExt; using MediatR; using Microsoft.EntityFrameworkCore; namespace ErsatzTV.Application.MediaItems.Queries { public class GetAllLanguageCodesHandler : IRequestHandler> { private readonly IDbContextFactory _dbContextFactory; private readonly IMediaItemRepository _mediaItemRepository; public GetAllLanguageCodesHandler( IDbContextFactory dbContextFactory, IMediaItemRepository mediaItemRepository) { _dbContextFactory = dbContextFactory; _mediaItemRepository = mediaItemRepository; } public async Task> Handle(GetAllLanguageCodes request, CancellationToken cancellationToken) { await using TvContext dbContext = _dbContextFactory.CreateDbContext(); var result = new System.Collections.Generic.HashSet(); CultureInfo[] allCultures = CultureInfo.GetCultures(CultureTypes.NeutralCultures); List mediaCodes = await _mediaItemRepository.GetAllLanguageCodes(); foreach (string mediaCode in mediaCodes) { foreach (string code in await dbContext.LanguageCodes.GetAllLanguageCodes(mediaCode)) { Option maybeCulture = allCultures.Find( c => string.Equals(code, c.ThreeLetterISOLanguageName, StringComparison.OrdinalIgnoreCase)); foreach (CultureInfo culture in maybeCulture) { result.Add(culture); } } } return result.ToList(); } } }