private async Task PopulateCacheAsync(IEnumerable <NsfwImageApi>?nsfwImagesApi, NsfwImageApiProvider provider) { if (nsfwImagesApi is null) { return; } var imagesApi = nsfwImagesApi.Select(x => new NsfwImage { Url = x.FileUrl, Tags = (string.IsNullOrEmpty(x.Tags) ? x.TagString ! : x.Tags) .Split(" ", StringSplitOptions.RemoveEmptyEntries) .Where(y => !_blacklistTags.Contains(y)), Provider = provider }).ToList();
public async Task <NsfwImage?> GetNsfwImageAsync(NsfwImageApiProvider provider, string?tags = null) { var random = new Random(); if (provider == NsfwImageApiProvider.Random) { provider = (NsfwImageApiProvider)random.Next(4); } var nsfwImages = _cache.Get <HashSet <NsfwImage> >(provider); List <NsfwImage> nsfwImagesList; if (string.IsNullOrEmpty(tags)) { nsfwImagesList = nsfwImages.ToList(); return(nsfwImagesList[random.Next(nsfwImagesList.Count)]); } var tagsList = tags.Split(",", StringSplitOptions.RemoveEmptyEntries) .Select(x => x.Trim().ToLower().Replace(" ", "_")) .Where(y => !_blacklistTags.Contains(y)) .ToList(); if (tagsList.Count == 0 || tagsList.Count > 3) { return(null); } foreach (var tag in tagsList.Where(tag => !_downloadedTags.Contains($"{provider.ToString()}_{tag}"))) { await PopulateCacheTagAsync(provider, tag); } nsfwImagesList = nsfwImages.Where(x => tagsList.All(tag1 => x.Tags.Any(tag2 => string.Equals(tag1, tag2)))).ToList(); if (nsfwImagesList.Count == 0) { return(null); } return(nsfwImagesList[random.Next(nsfwImagesList.Count)]); }