public object Get(GetFavoritesView request)
        {
            var user = _userManager.GetUserById(request.UserId);

            var allItems = user.RootFolder.GetRecursiveChildren(user)
                           .ToList();

            var allFavoriteItems = allItems.Where(i => _userDataManager.GetUserData(user.Id, i.GetUserDataKey()).IsFavorite)
                                   .ToList();

            var itemsWithImages = allFavoriteItems.Where(i => !string.IsNullOrEmpty(i.PrimaryImagePath))
                                  .ToList();

            var itemsWithBackdrops = allFavoriteItems.Where(i => i.BackdropImagePaths.Count > 0)
                                     .ToList();

            var view = new FavoritesView();

            var fields = new List <ItemFields>();

            view.BackdropItems = FilterItemsForBackdropDisplay(itemsWithBackdrops.OrderBy(i => Guid.NewGuid()))
                                 .Take(10)
                                 .Select(i => _dtoService.GetBaseItemDto(i, fields, user))
                                 .ToList();

            var spotlightItems = itemsWithBackdrops.OrderBy(i => Guid.NewGuid())
                                 .Take(10)
                                 .ToList();

            view.SpotlightItems = spotlightItems
                                  .Select(i => _dtoService.GetBaseItemDto(i, fields, user))
                                  .ToList();

            fields.Add(ItemFields.PrimaryImageAspectRatio);

            view.Albums = itemsWithImages
                          .OfType <MusicAlbum>()
                          .OrderBy(i => Guid.NewGuid())
                          .Take(4)
                          .Select(i => _dtoService.GetBaseItemDto(i, fields, user))
                          .ToList();

            view.Books = itemsWithImages
                         .OfType <Book>()
                         .OrderBy(i => Guid.NewGuid())
                         .Take(6)
                         .Select(i => _dtoService.GetBaseItemDto(i, fields, user))
                         .ToList();

            view.Episodes = itemsWithImages
                            .OfType <Episode>()
                            .OrderBy(i => Guid.NewGuid())
                            .Take(6)
                            .Select(i => _dtoService.GetBaseItemDto(i, fields, user))
                            .ToList();

            view.Games = itemsWithImages
                         .OfType <Game>()
                         .OrderBy(i => Guid.NewGuid())
                         .Take(6)
                         .Select(i => _dtoService.GetBaseItemDto(i, fields, user))
                         .ToList();

            view.Movies = itemsWithImages
                          .OfType <Movie>()
                          .OrderBy(i => Guid.NewGuid())
                          .Take(6)
                          .Select(i => _dtoService.GetBaseItemDto(i, fields, user))
                          .ToList();

            view.Series = itemsWithImages
                          .OfType <Series>()
                          .OrderBy(i => Guid.NewGuid())
                          .Take(6)
                          .Select(i => _dtoService.GetBaseItemDto(i, fields, user))
                          .ToList();

            view.Songs = itemsWithImages
                         .OfType <Audio>()
                         .OrderBy(i => Guid.NewGuid())
                         .Take(4)
                         .Select(i => _dtoService.GetBaseItemDto(i, fields, user))
                         .ToList();

            view.MiniSpotlights = itemsWithBackdrops
                                  .Except(spotlightItems)
                                  .OrderBy(i => Guid.NewGuid())
                                  .Take(5)
                                  .Select(i => _dtoService.GetBaseItemDto(i, fields, user))
                                  .ToList();

            var artists = allItems.OfType <Audio>()
                          .SelectMany(i =>
            {
                var list = new List <string>();

                if (!string.IsNullOrEmpty(i.AlbumArtist))
                {
                    list.Add(i.AlbumArtist);
                }
                list.AddRange(i.Artists);

                return(list);
            })
                          .Distinct(StringComparer.OrdinalIgnoreCase)
                          .OrderBy(i => Guid.NewGuid())
                          .Select(i =>
            {
                try
                {
                    return(_libraryManager.GetArtist(i));
                }
                catch
                {
                    return(null);
                }
            })
                          .Where(i => i != null && _userDataManager.GetUserData(user.Id, i.GetUserDataKey()).IsFavorite)
                          .Take(4)
                          .ToList();

            view.Artists = artists
                           .Select(i => _dtoService.GetBaseItemDto(i, fields, user))
                           .ToList();

            return(ToOptimizedResult(view));
        }
Example #2
0
        public object Get(GetFavoritesView request)
        {
            var user = _userManager.GetUserById(request.UserId);

            var allItems = user.RootFolder.GetRecursiveChildren(user)
                           .ToList();

            var allFavoriteItems = allItems.Where(i => _userDataManager.GetUserData(user.Id, i.GetUserDataKey()).IsFavorite)
                                   .ToList();

            var itemsWithImages = allFavoriteItems.Where(i => !string.IsNullOrEmpty(i.PrimaryImagePath))
                                  .ToList();

            var itemsWithBackdrops = allFavoriteItems.Where(i => i.GetImages(ImageType.Backdrop).Any())
                                     .ToList();

            var view = new FavoritesView();

            var fields = new List <ItemFields>();

            view.BackdropItems = FilterItemsForBackdropDisplay(itemsWithBackdrops)
                                 .Randomize("backdrop")
                                 .Take(10)
                                 .Select(i => _dtoService.GetBaseItemDto(i, fields, user))
                                 .ToList();

            var spotlightItems = itemsWithBackdrops.Randomize("spotlight")
                                 .Take(10)
                                 .ToList();

            view.SpotlightItems = spotlightItems
                                  .Select(i => _dtoService.GetBaseItemDto(i, fields, user))
                                  .ToList();

            fields.Add(ItemFields.PrimaryImageAspectRatio);

            view.Albums = itemsWithImages
                          .OfType <MusicAlbum>()
                          .Randomize()
                          .Take(4)
                          .Select(i => _dtoService.GetBaseItemDto(i, fields, user))
                          .ToList();

            view.Books = itemsWithImages
                         .OfType <Book>()
                         .Randomize()
                         .Take(6)
                         .Select(i => _dtoService.GetBaseItemDto(i, fields, user))
                         .ToList();

            view.Episodes = itemsWithImages
                            .OfType <Episode>()
                            .Randomize()
                            .Take(6)
                            .Select(i => _dtoService.GetBaseItemDto(i, fields, user))
                            .ToList();

            view.Games = itemsWithImages
                         .OfType <Game>()
                         .Randomize()
                         .Take(6)
                         .Select(i => _dtoService.GetBaseItemDto(i, fields, user))
                         .ToList();

            view.Movies = itemsWithImages
                          .OfType <Movie>()
                          .Randomize()
                          .Take(6)
                          .Select(i => _dtoService.GetBaseItemDto(i, fields, user))
                          .ToList();

            view.Series = itemsWithImages
                          .OfType <Series>()
                          .Randomize()
                          .Take(6)
                          .Select(i => _dtoService.GetBaseItemDto(i, fields, user))
                          .ToList();

            view.Songs = itemsWithImages
                         .OfType <Audio>()
                         .Randomize()
                         .Take(4)
                         .Select(i => _dtoService.GetBaseItemDto(i, fields, user))
                         .ToList();

            view.MiniSpotlights = itemsWithBackdrops
                                  .Except(spotlightItems)
                                  .Randomize()
                                  .Take(5)
                                  .Select(i => _dtoService.GetBaseItemDto(i, fields, user))
                                  .ToList();

            var artists = _libraryManager.GetAllArtists(allItems)
                          .Randomize()
                          .Select(i =>
            {
                try
                {
                    return(_libraryManager.GetArtist(i));
                }
                catch
                {
                    return(null);
                }
            })
                          .Where(i => i != null && _userDataManager.GetUserData(user.Id, i.GetUserDataKey()).IsFavorite)
                          .Take(4)
                          .ToList();

            view.Artists = artists
                           .Select(i => _dtoService.GetBaseItemDto(i, fields, user))
                           .ToList();

            return(ToOptimizedSerializedResultUsingCache(view));
        }