updated mbt api

This commit is contained in:
Luke Pulverenti 2013-11-10 21:38:32 -05:00
parent 2c0d8ca2ea
commit 9c4e8f3381

View File

@ -119,12 +119,13 @@ namespace MediaBrowser.Api.DefaultTheme
var fields = new List<ItemFields>(); var fields = new List<ItemFields>();
view.BackdropItems = FilterItemsForBackdropDisplay(itemsWithBackdrops.OrderBy(i => Guid.NewGuid())) view.BackdropItems = FilterItemsForBackdropDisplay(itemsWithBackdrops)
.Randomize("backdrop")
.Take(10) .Take(10)
.Select(i => _dtoService.GetBaseItemDto(i, fields, user)) .Select(i => _dtoService.GetBaseItemDto(i, fields, user))
.ToList(); .ToList();
var spotlightItems = itemsWithBackdrops.OrderBy(i => Guid.NewGuid()) var spotlightItems = itemsWithBackdrops.Randomize("spotlight")
.Take(10) .Take(10)
.ToList(); .ToList();
@ -136,56 +137,56 @@ namespace MediaBrowser.Api.DefaultTheme
view.Albums = itemsWithImages view.Albums = itemsWithImages
.OfType<MusicAlbum>() .OfType<MusicAlbum>()
.OrderBy(i => Guid.NewGuid()) .Randomize()
.Take(4) .Take(4)
.Select(i => _dtoService.GetBaseItemDto(i, fields, user)) .Select(i => _dtoService.GetBaseItemDto(i, fields, user))
.ToList(); .ToList();
view.Books = itemsWithImages view.Books = itemsWithImages
.OfType<Book>() .OfType<Book>()
.OrderBy(i => Guid.NewGuid()) .Randomize()
.Take(6) .Take(6)
.Select(i => _dtoService.GetBaseItemDto(i, fields, user)) .Select(i => _dtoService.GetBaseItemDto(i, fields, user))
.ToList(); .ToList();
view.Episodes = itemsWithImages view.Episodes = itemsWithImages
.OfType<Episode>() .OfType<Episode>()
.OrderBy(i => Guid.NewGuid()) .Randomize()
.Take(6) .Take(6)
.Select(i => _dtoService.GetBaseItemDto(i, fields, user)) .Select(i => _dtoService.GetBaseItemDto(i, fields, user))
.ToList(); .ToList();
view.Games = itemsWithImages view.Games = itemsWithImages
.OfType<Game>() .OfType<Game>()
.OrderBy(i => Guid.NewGuid()) .Randomize()
.Take(6) .Take(6)
.Select(i => _dtoService.GetBaseItemDto(i, fields, user)) .Select(i => _dtoService.GetBaseItemDto(i, fields, user))
.ToList(); .ToList();
view.Movies = itemsWithImages view.Movies = itemsWithImages
.OfType<Movie>() .OfType<Movie>()
.OrderBy(i => Guid.NewGuid()) .Randomize()
.Take(6) .Take(6)
.Select(i => _dtoService.GetBaseItemDto(i, fields, user)) .Select(i => _dtoService.GetBaseItemDto(i, fields, user))
.ToList(); .ToList();
view.Series = itemsWithImages view.Series = itemsWithImages
.OfType<Series>() .OfType<Series>()
.OrderBy(i => Guid.NewGuid()) .Randomize()
.Take(6) .Take(6)
.Select(i => _dtoService.GetBaseItemDto(i, fields, user)) .Select(i => _dtoService.GetBaseItemDto(i, fields, user))
.ToList(); .ToList();
view.Songs = itemsWithImages view.Songs = itemsWithImages
.OfType<Audio>() .OfType<Audio>()
.OrderBy(i => Guid.NewGuid()) .Randomize()
.Take(4) .Take(4)
.Select(i => _dtoService.GetBaseItemDto(i, fields, user)) .Select(i => _dtoService.GetBaseItemDto(i, fields, user))
.ToList(); .ToList();
view.MiniSpotlights = itemsWithBackdrops view.MiniSpotlights = itemsWithBackdrops
.Except(spotlightItems) .Except(spotlightItems)
.OrderBy(i => Guid.NewGuid()) .Randomize()
.Take(5) .Take(5)
.Select(i => _dtoService.GetBaseItemDto(i, fields, user)) .Select(i => _dtoService.GetBaseItemDto(i, fields, user))
.ToList(); .ToList();
@ -204,7 +205,7 @@ namespace MediaBrowser.Api.DefaultTheme
return list; return list;
}) })
.Distinct(StringComparer.OrdinalIgnoreCase) .Distinct(StringComparer.OrdinalIgnoreCase)
.OrderBy(i => Guid.NewGuid()) .Randomize()
.Select(i => .Select(i =>
{ {
try try
@ -245,27 +246,27 @@ namespace MediaBrowser.Api.DefaultTheme
var fields = new List<ItemFields>(); var fields = new List<ItemFields>();
view.BackdropItems = gamesWithBackdrops view.BackdropItems = gamesWithBackdrops
.OrderBy(i => Guid.NewGuid()) .Randomize("backdrop")
.Take(10) .Take(10)
.Select(i => _dtoService.GetBaseItemDto(i, fields, user)) .Select(i => _dtoService.GetBaseItemDto(i, fields, user))
.ToList(); .ToList();
view.SpotlightItems = gamesWithBackdrops view.SpotlightItems = gamesWithBackdrops
.OrderBy(i => Guid.NewGuid()) .Randomize("spotlight")
.Take(10) .Take(10)
.Select(i => _dtoService.GetBaseItemDto(i, fields, user)) .Select(i => _dtoService.GetBaseItemDto(i, fields, user))
.ToList(); .ToList();
view.MultiPlayerItems = gamesWithImages view.MultiPlayerItems = gamesWithImages
.Where(i => i.PlayersSupported.HasValue && i.PlayersSupported.Value > 1) .Where(i => i.PlayersSupported.HasValue && i.PlayersSupported.Value > 1)
.OrderBy(i => Guid.NewGuid()) .Randomize()
.Select(i => GetItemStub(i, ImageType.Primary)) .Select(i => GetItemStub(i, ImageType.Primary))
.Where(i => i != null) .Where(i => i != null)
.Take(1) .Take(1)
.ToList(); .ToList();
view.MiniSpotlights = gamesWithBackdrops view.MiniSpotlights = gamesWithBackdrops
.OrderBy(i => Guid.NewGuid()) .Randomize("minispotlight")
.Take(5) .Take(5)
.Select(i => _dtoService.GetBaseItemDto(i, fields, user)) .Select(i => _dtoService.GetBaseItemDto(i, fields, user))
.ToList(); .ToList();
@ -293,7 +294,7 @@ namespace MediaBrowser.Api.DefaultTheme
var seriesWithBestBackdrops = FilterItemsForBackdropDisplay(seriesWithBackdrops).ToList(); var seriesWithBestBackdrops = FilterItemsForBackdropDisplay(seriesWithBackdrops).ToList();
view.BackdropItems = seriesWithBestBackdrops view.BackdropItems = seriesWithBestBackdrops
.OrderBy(i => Guid.NewGuid()) .Randomize("backdrop")
.Take(10) .Take(10)
.AsParallel() .AsParallel()
.Select(i => _dtoService.GetBaseItemDto(i, fields, user)) .Select(i => _dtoService.GetBaseItemDto(i, fields, user))
@ -301,7 +302,7 @@ namespace MediaBrowser.Api.DefaultTheme
view.ShowsItems = series view.ShowsItems = series
.Where(i => i.BackdropImagePaths.Count > 0) .Where(i => i.BackdropImagePaths.Count > 0)
.OrderBy(i => Guid.NewGuid()) .Randomize("all")
.Select(i => GetItemStub(i, ImageType.Backdrop)) .Select(i => GetItemStub(i, ImageType.Backdrop))
.Where(i => i != null) .Where(i => i != null)
.Take(1) .Take(1)
@ -309,7 +310,7 @@ namespace MediaBrowser.Api.DefaultTheme
view.RomanceItems = seriesWithBackdrops view.RomanceItems = seriesWithBackdrops
.Where(i => i.Genres.Any(romanceGenres.ContainsKey)) .Where(i => i.Genres.Any(romanceGenres.ContainsKey))
.OrderBy(i => Guid.NewGuid()) .Randomize("romance")
.Select(i => GetItemStub(i, ImageType.Backdrop)) .Select(i => GetItemStub(i, ImageType.Backdrop))
.Where(i => i != null) .Where(i => i != null)
.Take(1) .Take(1)
@ -317,7 +318,7 @@ namespace MediaBrowser.Api.DefaultTheme
view.ComedyItems = seriesWithBackdrops view.ComedyItems = seriesWithBackdrops
.Where(i => i.Genres.Any(comedyGenres.ContainsKey)) .Where(i => i.Genres.Any(comedyGenres.ContainsKey))
.OrderBy(i => Guid.NewGuid()) .Randomize("comedy")
.Select(i => GetItemStub(i, ImageType.Backdrop)) .Select(i => GetItemStub(i, ImageType.Backdrop))
.Where(i => i != null) .Where(i => i != null)
.Take(1) .Take(1)
@ -335,7 +336,7 @@ namespace MediaBrowser.Api.DefaultTheme
} }
spotlightSeries = spotlightSeries spotlightSeries = spotlightSeries
.OrderBy(i => Guid.NewGuid()) .Randomize("spotlight")
.Take(10) .Take(10)
.ToList(); .ToList();
@ -355,7 +356,7 @@ namespace MediaBrowser.Api.DefaultTheme
} }
view.MiniSpotlights = miniSpotlightItems view.MiniSpotlights = miniSpotlightItems
.OrderBy(i => Guid.NewGuid()) .Randomize("minispotlight")
.Take(5) .Take(5)
.Select(i => _dtoService.GetBaseItemDto(i, fields, user)) .Select(i => _dtoService.GetBaseItemDto(i, fields, user))
.ToList(); .ToList();
@ -438,14 +439,14 @@ namespace MediaBrowser.Api.DefaultTheme
var itemsWithTopBackdrops = FilterItemsForBackdropDisplay(itemsWithBackdrops).ToList(); var itemsWithTopBackdrops = FilterItemsForBackdropDisplay(itemsWithBackdrops).ToList();
view.BackdropItems = itemsWithTopBackdrops view.BackdropItems = itemsWithTopBackdrops
.OrderBy(i => Guid.NewGuid()) .Randomize("backdrop")
.Take(10) .Take(10)
.AsParallel() .AsParallel()
.Select(i => _dtoService.GetBaseItemDto(i, fields, user)) .Select(i => _dtoService.GetBaseItemDto(i, fields, user))
.ToList(); .ToList();
view.MovieItems = moviesWithBackdrops view.MovieItems = moviesWithBackdrops
.OrderBy(i => Guid.NewGuid()) .Randomize("all")
.Select(i => GetItemStub(i, ImageType.Backdrop)) .Select(i => GetItemStub(i, ImageType.Backdrop))
.Where(i => i != null) .Where(i => i != null)
.Take(1) .Take(1)
@ -453,7 +454,7 @@ namespace MediaBrowser.Api.DefaultTheme
view.TrailerItems = trailers view.TrailerItems = trailers
.Where(i => !string.IsNullOrEmpty(i.PrimaryImagePath)) .Where(i => !string.IsNullOrEmpty(i.PrimaryImagePath))
.OrderBy(i => Guid.NewGuid()) .Randomize()
.Select(i => GetItemStub(i, ImageType.Primary)) .Select(i => GetItemStub(i, ImageType.Primary))
.Where(i => i != null) .Where(i => i != null)
.Take(1) .Take(1)
@ -462,7 +463,7 @@ namespace MediaBrowser.Api.DefaultTheme
view.BoxSetItems = items view.BoxSetItems = items
.OfType<BoxSet>() .OfType<BoxSet>()
.Where(i => i.BackdropImagePaths.Count > 0) .Where(i => i.BackdropImagePaths.Count > 0)
.OrderBy(i => Guid.NewGuid()) .Randomize()
.Select(i => GetItemStub(i, ImageType.Backdrop)) .Select(i => GetItemStub(i, ImageType.Backdrop))
.Where(i => i != null) .Where(i => i != null)
.Take(1) .Take(1)
@ -470,7 +471,7 @@ namespace MediaBrowser.Api.DefaultTheme
view.ThreeDItems = moviesWithBackdrops view.ThreeDItems = moviesWithBackdrops
.Where(i => i.Is3D) .Where(i => i.Is3D)
.OrderBy(i => Guid.NewGuid()) .Randomize("3d")
.Select(i => GetItemStub(i, ImageType.Backdrop)) .Select(i => GetItemStub(i, ImageType.Backdrop))
.Where(i => i != null) .Where(i => i != null)
.Take(1) .Take(1)
@ -481,7 +482,7 @@ namespace MediaBrowser.Api.DefaultTheme
view.RomanceItems = moviesWithBackdrops view.RomanceItems = moviesWithBackdrops
.Where(i => i.Genres.Any(romanceGenres.ContainsKey)) .Where(i => i.Genres.Any(romanceGenres.ContainsKey))
.OrderBy(i => Guid.NewGuid()) .Randomize("romance")
.Select(i => GetItemStub(i, ImageType.Backdrop)) .Select(i => GetItemStub(i, ImageType.Backdrop))
.Where(i => i != null) .Where(i => i != null)
.Take(1) .Take(1)
@ -489,7 +490,7 @@ namespace MediaBrowser.Api.DefaultTheme
view.ComedyItems = moviesWithBackdrops view.ComedyItems = moviesWithBackdrops
.Where(i => i.Genres.Any(comedyGenres.ContainsKey)) .Where(i => i.Genres.Any(comedyGenres.ContainsKey))
.OrderBy(i => Guid.NewGuid()) .Randomize("comedy")
.Select(i => GetItemStub(i, ImageType.Backdrop)) .Select(i => GetItemStub(i, ImageType.Backdrop))
.Where(i => i != null) .Where(i => i != null)
.Take(1) .Take(1)
@ -497,7 +498,7 @@ namespace MediaBrowser.Api.DefaultTheme
view.HDItems = hdMovies view.HDItems = hdMovies
.Where(i => i.BackdropImagePaths.Count > 0) .Where(i => i.BackdropImagePaths.Count > 0)
.OrderBy(i => Guid.NewGuid()) .Randomize("hd")
.Select(i => GetItemStub(i, ImageType.Backdrop)) .Select(i => GetItemStub(i, ImageType.Backdrop))
.Where(i => i != null) .Where(i => i != null)
.Take(1) .Take(1)
@ -505,7 +506,7 @@ namespace MediaBrowser.Api.DefaultTheme
view.FamilyMovies = familyMovies view.FamilyMovies = familyMovies
.Where(i => i.BackdropImagePaths.Count > 0) .Where(i => i.BackdropImagePaths.Count > 0)
.OrderBy(i => Guid.NewGuid()) .Randomize("family")
.Select(i => GetItemStub(i, ImageType.Backdrop)) .Select(i => GetItemStub(i, ImageType.Backdrop))
.Where(i => i != null) .Where(i => i != null)
.Take(1) .Take(1)
@ -523,7 +524,7 @@ namespace MediaBrowser.Api.DefaultTheme
} }
spotlightItems = spotlightItems spotlightItems = spotlightItems
.OrderBy(i => Guid.NewGuid()) .Randomize("spotlight")
.Take(10) .Take(10)
.ToList(); .ToList();
@ -543,7 +544,7 @@ namespace MediaBrowser.Api.DefaultTheme
} }
miniSpotlightItems = miniSpotlightItems miniSpotlightItems = miniSpotlightItems
.OrderBy(i => Guid.NewGuid()) .Randomize("minispotlight")
.ToList(); .ToList();
// Avoid implicitly captured closure // Avoid implicitly captured closure
@ -615,7 +616,7 @@ namespace MediaBrowser.Api.DefaultTheme
var actors = mediaItems.SelectMany(i => i.People) var actors = mediaItems.SelectMany(i => i.People)
.Select(i => i.Name) .Select(i => i.Name)
.Distinct(StringComparer.OrdinalIgnoreCase) .Distinct(StringComparer.OrdinalIgnoreCase)
.OrderBy(i => Guid.NewGuid()) .Randomize()
.ToList(); .ToList();
var result = actors.Select(actor => var result = actors.Select(actor =>
@ -697,4 +698,29 @@ namespace MediaBrowser.Api.DefaultTheme
return stub; 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);
}
}
} }