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)); }
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)); }