update live tv suggestions

This commit is contained in:
Luke Pulverenti 2016-05-24 03:40:45 -04:00
parent abb3c8a1d3
commit accdbfaab2

View File

@ -939,9 +939,15 @@ namespace MediaBrowser.Server.Implementations.LiveTv
IsMovie = query.IsMovie,
IsSports = query.IsSports,
IsKids = query.IsKids,
EnableTotalRecordCount = query.EnableTotalRecordCount
EnableTotalRecordCount = query.EnableTotalRecordCount,
SortBy = new[] { ItemSortBy.StartDate }
};
if (query.Limit.HasValue)
{
internalQuery.Limit = Math.Max(query.Limit.Value * 5, 500);
}
if (query.HasAired.HasValue)
{
if (query.HasAired.Value)
@ -958,15 +964,10 @@ namespace MediaBrowser.Server.Implementations.LiveTv
var programList = programs.ToList();
var genres = programList.SelectMany(i => i.Genres)
.Where(i => !string.IsNullOrWhiteSpace(i))
.DistinctNames()
.Select(i => _libraryManager.GetGenre(i))
.DistinctBy(i => i.Id)
.ToDictionary(i => i.Name, StringComparer.OrdinalIgnoreCase);
var factorChannelWatchCount = (query.IsAiring ?? false) || (query.IsKids ?? false) || (query.IsSports ?? false) || (query.IsMovie ?? false);
programs = programList.OrderBy(i => i.HasImage(ImageType.Primary) ? 0 : 1)
.ThenByDescending(i => GetRecommendationScore(i, user.Id, genres))
.ThenByDescending(i => GetRecommendationScore(i, user.Id, factorChannelWatchCount))
.ThenBy(i => i.StartDate);
if (query.Limit.HasValue)
@ -1004,7 +1005,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv
return result;
}
private int GetRecommendationScore(LiveTvProgram program, Guid userId, Dictionary<string, Genre> genres)
private int GetRecommendationScore(LiveTvProgram program, Guid userId, bool factorChannelWatchCount)
{
var score = 0;
@ -1036,43 +1037,14 @@ namespace MediaBrowser.Server.Implementations.LiveTv
score += 3;
}
score += GetGenreScore(program.Genres, userId, genres);
if (factorChannelWatchCount)
{
score += channelUserdata.PlayCount;
}
return score;
}
private int GetGenreScore(IEnumerable<string> programGenres, Guid userId, Dictionary<string, Genre> genres)
{
return programGenres.Select(i =>
{
var score = 0;
Genre genre;
if (genres.TryGetValue(i, out genre))
{
var genreUserdata = _userDataManager.GetUserData(userId, genre);
if (genreUserdata.Likes ?? false)
{
score++;
}
else if (!(genreUserdata.Likes ?? true))
{
score--;
}
if (genreUserdata.IsFavorite)
{
score += 2;
}
}
return score;
}).Sum();
}
private async Task AddRecordingInfo(IEnumerable<Tuple<BaseItemDto, string, string>> programs, CancellationToken cancellationToken)
{
var timers = new Dictionary<string, List<TimerInfo>>();