diff options
| author | Luke Pulverenti <luke.pulverenti@gmail.com> | 2013-11-10 21:38:32 -0500 |
|---|---|---|
| committer | Luke Pulverenti <luke.pulverenti@gmail.com> | 2013-11-10 21:38:32 -0500 |
| commit | 9c4e8f338157adef8677537b6887b0c91eae90a7 (patch) | |
| tree | e7fcb0cd222e4bc5f421088859d0c7940fda754e | |
| parent | 2c0d8ca2eac90ee9365aa30d2ddbf5372e0978dd (diff) | |
updated mbt api
| -rw-r--r-- | MediaBrowser.Api/DefaultTheme/DefaultThemeService.cs | 96 |
1 files changed, 61 insertions, 35 deletions
diff --git a/MediaBrowser.Api/DefaultTheme/DefaultThemeService.cs b/MediaBrowser.Api/DefaultTheme/DefaultThemeService.cs index df69f68f8..7339e90ad 100644 --- a/MediaBrowser.Api/DefaultTheme/DefaultThemeService.cs +++ b/MediaBrowser.Api/DefaultTheme/DefaultThemeService.cs @@ -119,12 +119,13 @@ namespace MediaBrowser.Api.DefaultTheme var fields = new List<ItemFields>(); - view.BackdropItems = FilterItemsForBackdropDisplay(itemsWithBackdrops.OrderBy(i => Guid.NewGuid())) + view.BackdropItems = FilterItemsForBackdropDisplay(itemsWithBackdrops) + .Randomize("backdrop") .Take(10) .Select(i => _dtoService.GetBaseItemDto(i, fields, user)) .ToList(); - var spotlightItems = itemsWithBackdrops.OrderBy(i => Guid.NewGuid()) + var spotlightItems = itemsWithBackdrops.Randomize("spotlight") .Take(10) .ToList(); @@ -133,59 +134,59 @@ namespace MediaBrowser.Api.DefaultTheme .ToList(); fields.Add(ItemFields.PrimaryImageAspectRatio); - + view.Albums = itemsWithImages .OfType<MusicAlbum>() - .OrderBy(i => Guid.NewGuid()) + .Randomize() .Take(4) .Select(i => _dtoService.GetBaseItemDto(i, fields, user)) .ToList(); view.Books = itemsWithImages .OfType<Book>() - .OrderBy(i => Guid.NewGuid()) + .Randomize() .Take(6) .Select(i => _dtoService.GetBaseItemDto(i, fields, user)) .ToList(); view.Episodes = itemsWithImages .OfType<Episode>() - .OrderBy(i => Guid.NewGuid()) + .Randomize() .Take(6) .Select(i => _dtoService.GetBaseItemDto(i, fields, user)) .ToList(); view.Games = itemsWithImages .OfType<Game>() - .OrderBy(i => Guid.NewGuid()) + .Randomize() .Take(6) .Select(i => _dtoService.GetBaseItemDto(i, fields, user)) .ToList(); view.Movies = itemsWithImages .OfType<Movie>() - .OrderBy(i => Guid.NewGuid()) + .Randomize() .Take(6) .Select(i => _dtoService.GetBaseItemDto(i, fields, user)) .ToList(); view.Series = itemsWithImages .OfType<Series>() - .OrderBy(i => Guid.NewGuid()) + .Randomize() .Take(6) .Select(i => _dtoService.GetBaseItemDto(i, fields, user)) .ToList(); view.Songs = itemsWithImages .OfType<Audio>() - .OrderBy(i => Guid.NewGuid()) + .Randomize() .Take(4) .Select(i => _dtoService.GetBaseItemDto(i, fields, user)) .ToList(); view.MiniSpotlights = itemsWithBackdrops .Except(spotlightItems) - .OrderBy(i => Guid.NewGuid()) + .Randomize() .Take(5) .Select(i => _dtoService.GetBaseItemDto(i, fields, user)) .ToList(); @@ -204,7 +205,7 @@ namespace MediaBrowser.Api.DefaultTheme return list; }) .Distinct(StringComparer.OrdinalIgnoreCase) - .OrderBy(i => Guid.NewGuid()) + .Randomize() .Select(i => { try @@ -245,27 +246,27 @@ namespace MediaBrowser.Api.DefaultTheme var fields = new List<ItemFields>(); view.BackdropItems = gamesWithBackdrops - .OrderBy(i => Guid.NewGuid()) + .Randomize("backdrop") .Take(10) .Select(i => _dtoService.GetBaseItemDto(i, fields, user)) .ToList(); view.SpotlightItems = gamesWithBackdrops - .OrderBy(i => Guid.NewGuid()) + .Randomize("spotlight") .Take(10) .Select(i => _dtoService.GetBaseItemDto(i, fields, user)) .ToList(); view.MultiPlayerItems = gamesWithImages .Where(i => i.PlayersSupported.HasValue && i.PlayersSupported.Value > 1) - .OrderBy(i => Guid.NewGuid()) + .Randomize() .Select(i => GetItemStub(i, ImageType.Primary)) .Where(i => i != null) .Take(1) .ToList(); view.MiniSpotlights = gamesWithBackdrops - .OrderBy(i => Guid.NewGuid()) + .Randomize("minispotlight") .Take(5) .Select(i => _dtoService.GetBaseItemDto(i, fields, user)) .ToList(); @@ -293,7 +294,7 @@ namespace MediaBrowser.Api.DefaultTheme var seriesWithBestBackdrops = FilterItemsForBackdropDisplay(seriesWithBackdrops).ToList(); view.BackdropItems = seriesWithBestBackdrops - .OrderBy(i => Guid.NewGuid()) + .Randomize("backdrop") .Take(10) .AsParallel() .Select(i => _dtoService.GetBaseItemDto(i, fields, user)) @@ -301,7 +302,7 @@ namespace MediaBrowser.Api.DefaultTheme view.ShowsItems = series .Where(i => i.BackdropImagePaths.Count > 0) - .OrderBy(i => Guid.NewGuid()) + .Randomize("all") .Select(i => GetItemStub(i, ImageType.Backdrop)) .Where(i => i != null) .Take(1) @@ -309,7 +310,7 @@ namespace MediaBrowser.Api.DefaultTheme view.RomanceItems = seriesWithBackdrops .Where(i => i.Genres.Any(romanceGenres.ContainsKey)) - .OrderBy(i => Guid.NewGuid()) + .Randomize("romance") .Select(i => GetItemStub(i, ImageType.Backdrop)) .Where(i => i != null) .Take(1) @@ -317,7 +318,7 @@ namespace MediaBrowser.Api.DefaultTheme view.ComedyItems = seriesWithBackdrops .Where(i => i.Genres.Any(comedyGenres.ContainsKey)) - .OrderBy(i => Guid.NewGuid()) + .Randomize("comedy") .Select(i => GetItemStub(i, ImageType.Backdrop)) .Where(i => i != null) .Take(1) @@ -335,7 +336,7 @@ namespace MediaBrowser.Api.DefaultTheme } spotlightSeries = spotlightSeries - .OrderBy(i => Guid.NewGuid()) + .Randomize("spotlight") .Take(10) .ToList(); @@ -355,7 +356,7 @@ namespace MediaBrowser.Api.DefaultTheme } view.MiniSpotlights = miniSpotlightItems - .OrderBy(i => Guid.NewGuid()) + .Randomize("minispotlight") .Take(5) .Select(i => _dtoService.GetBaseItemDto(i, fields, user)) .ToList(); @@ -416,7 +417,7 @@ namespace MediaBrowser.Api.DefaultTheme var trailers = items.OfType<Trailer>() .ToList(); - + var hdMovies = movies.Where(i => i.IsHD).ToList(); var familyGenres = request.FamilyGenre.Split(',').ToDictionary(i => i, StringComparer.OrdinalIgnoreCase); @@ -438,14 +439,14 @@ namespace MediaBrowser.Api.DefaultTheme var itemsWithTopBackdrops = FilterItemsForBackdropDisplay(itemsWithBackdrops).ToList(); view.BackdropItems = itemsWithTopBackdrops - .OrderBy(i => Guid.NewGuid()) + .Randomize("backdrop") .Take(10) .AsParallel() .Select(i => _dtoService.GetBaseItemDto(i, fields, user)) .ToList(); view.MovieItems = moviesWithBackdrops - .OrderBy(i => Guid.NewGuid()) + .Randomize("all") .Select(i => GetItemStub(i, ImageType.Backdrop)) .Where(i => i != null) .Take(1) @@ -453,7 +454,7 @@ namespace MediaBrowser.Api.DefaultTheme view.TrailerItems = trailers .Where(i => !string.IsNullOrEmpty(i.PrimaryImagePath)) - .OrderBy(i => Guid.NewGuid()) + .Randomize() .Select(i => GetItemStub(i, ImageType.Primary)) .Where(i => i != null) .Take(1) @@ -462,7 +463,7 @@ namespace MediaBrowser.Api.DefaultTheme view.BoxSetItems = items .OfType<BoxSet>() .Where(i => i.BackdropImagePaths.Count > 0) - .OrderBy(i => Guid.NewGuid()) + .Randomize() .Select(i => GetItemStub(i, ImageType.Backdrop)) .Where(i => i != null) .Take(1) @@ -470,7 +471,7 @@ namespace MediaBrowser.Api.DefaultTheme view.ThreeDItems = moviesWithBackdrops .Where(i => i.Is3D) - .OrderBy(i => Guid.NewGuid()) + .Randomize("3d") .Select(i => GetItemStub(i, ImageType.Backdrop)) .Where(i => i != null) .Take(1) @@ -481,7 +482,7 @@ namespace MediaBrowser.Api.DefaultTheme view.RomanceItems = moviesWithBackdrops .Where(i => i.Genres.Any(romanceGenres.ContainsKey)) - .OrderBy(i => Guid.NewGuid()) + .Randomize("romance") .Select(i => GetItemStub(i, ImageType.Backdrop)) .Where(i => i != null) .Take(1) @@ -489,7 +490,7 @@ namespace MediaBrowser.Api.DefaultTheme view.ComedyItems = moviesWithBackdrops .Where(i => i.Genres.Any(comedyGenres.ContainsKey)) - .OrderBy(i => Guid.NewGuid()) + .Randomize("comedy") .Select(i => GetItemStub(i, ImageType.Backdrop)) .Where(i => i != null) .Take(1) @@ -497,7 +498,7 @@ namespace MediaBrowser.Api.DefaultTheme view.HDItems = hdMovies .Where(i => i.BackdropImagePaths.Count > 0) - .OrderBy(i => Guid.NewGuid()) + .Randomize("hd") .Select(i => GetItemStub(i, ImageType.Backdrop)) .Where(i => i != null) .Take(1) @@ -505,7 +506,7 @@ namespace MediaBrowser.Api.DefaultTheme view.FamilyMovies = familyMovies .Where(i => i.BackdropImagePaths.Count > 0) - .OrderBy(i => Guid.NewGuid()) + .Randomize("family") .Select(i => GetItemStub(i, ImageType.Backdrop)) .Where(i => i != null) .Take(1) @@ -523,7 +524,7 @@ namespace MediaBrowser.Api.DefaultTheme } spotlightItems = spotlightItems - .OrderBy(i => Guid.NewGuid()) + .Randomize("spotlight") .Take(10) .ToList(); @@ -543,7 +544,7 @@ namespace MediaBrowser.Api.DefaultTheme } miniSpotlightItems = miniSpotlightItems - .OrderBy(i => Guid.NewGuid()) + .Randomize("minispotlight") .ToList(); // Avoid implicitly captured closure @@ -615,7 +616,7 @@ namespace MediaBrowser.Api.DefaultTheme var actors = mediaItems.SelectMany(i => i.People) .Select(i => i.Name) .Distinct(StringComparer.OrdinalIgnoreCase) - .OrderBy(i => Guid.NewGuid()) + .Randomize() .ToList(); var result = actors.Select(actor => @@ -697,4 +698,29 @@ namespace MediaBrowser.Api.DefaultTheme return stub; } } + + static class RandomExtension + { + public static IEnumerable<T> Randomize<T>(this IEnumerable<T> sequence, string type = "none") + where T : BaseItem + { + var hour = DateTime.Now.Hour + 2; + + var typeCode = type.GetHashCode(); + + return sequence.OrderBy(i => + { + var val = i.Id.GetHashCode() + i.Genres.Count + i.People.Count + (i.ProductionYear ?? 0) + i.DateCreated.Minute + i.DateModified.Minute + typeCode; + + return val % hour; + }); + } + + public static IEnumerable<string> Randomize(this IEnumerable<string> sequence) + { + var hour = DateTime.Now.Hour + 2; + + return sequence.OrderBy(i => i.GetHashCode() % hour); + } + } } |
