Example #1
0
        public async Task <IReadOnlyDictionary <Guid, MediaThumbnail> > GetThumbnailsByMediaIdsAsync(
            IEnumerable <Guid> mediaIds,
            ThumbnailSizeName size,
            CancellationToken cancellationToken)
        {
            FilterDefinition <Media> filter = Builders <Media> .Filter
                                              .In(x => x.Id, mediaIds.ToList());

            filter = filter & Builders <Media> .Filter.ElemMatch(x =>
                                                                 x.Thumbnails,
                                                                 Builders <MediaThumbnail> .Filter.Eq(t => t.Size, size));

            List <Media> medias = await _mediaStoreContext.Medias.Find(filter)
                                  .ToListAsync(cancellationToken);

            var result = new Dictionary <Guid, MediaThumbnail>();

            foreach (Media media in medias)
            {
                MediaThumbnail?thumb = media !.Thumbnails !.Where(x =>
                                                                  x.Size == size &&
                                                                  x.Format == "webp")
                                       .FirstOrDefault();

                if (thumb != null)
                {
                    thumb.Data = await Thumbnails.GetAsync(thumb.Id, cancellationToken);

                    result.Add(media.Id, thumb);
                }
            }

            return(result);
        }