Exemplo n.º 1
0
        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();
Exemplo n.º 2
0
        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)]);
        }