diff options
Diffstat (limited to 'MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs')
| -rw-r--r-- | MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs | 133 |
1 files changed, 131 insertions, 2 deletions
diff --git a/MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs b/MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs index 1d12e2d45..04aad469a 100644 --- a/MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs +++ b/MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs @@ -448,15 +448,31 @@ namespace MediaBrowser.Server.Implementations.LiveTv if (!string.IsNullOrEmpty(query.ChannelId)) { + var guid = new Guid(query.ChannelId); + + var currentServiceName = service.Name; + list = list - .Where(i => _tvDtoService.GetInternalChannelId(service.Name, i.ChannelId) == new Guid(query.ChannelId)) + .Where(i => _tvDtoService.GetInternalChannelId(currentServiceName, i.ChannelId) == guid) .ToList(); } if (!string.IsNullOrEmpty(query.Id)) { + var guid = new Guid(query.Id); + + var currentServiceName = service.Name; + list = list - .Where(i => _tvDtoService.GetInternalRecordingId(service.Name, i.Id) == new Guid(query.Id)) + .Where(i => _tvDtoService.GetInternalRecordingId(currentServiceName, i.Id) == guid) + .ToList(); + } + + if (!string.IsNullOrEmpty(query.GroupId)) + { + var guid = new Guid(query.GroupId); + + list = list.Where(i => GetRecordingGroupIds(i).Contains(guid)) .ToList(); } @@ -734,5 +750,118 @@ namespace MediaBrowser.Server.Implementations.LiveTv await service.UpdateSeriesTimerAsync(info, cancellationToken).ConfigureAwait(false); } + + private List<string> GetRecordingGroupNames(RecordingInfo recording) + { + var list = new List<string>(); + + if (recording.IsSeries) + { + list.Add(recording.Name); + } + + if (recording.IsKids) + { + list.Add("Kids"); + } + + if (recording.IsMovie) + { + list.Add("Movies"); + } + + if (recording.IsNews) + { + list.Add("News"); + } + + if (recording.IsPremiere) + { + list.Add("Sports"); + } + + if (!recording.IsSports && !recording.IsNews && !recording.IsMovie && !recording.IsKids && !recording.IsSeries) + { + list.Add("Others"); + } + + return list; + } + + private List<Guid> GetRecordingGroupIds(RecordingInfo recording) + { + return GetRecordingGroupNames(recording).Select(i => i.ToLower() + .GetMD5()) + .ToList(); + } + + public async Task<QueryResult<RecordingGroupDto>> GetRecordingGroups(RecordingGroupQuery query, CancellationToken cancellationToken) + { + var recordingResult = await GetRecordings(new RecordingQuery + { + UserId = query.UserId + + }, cancellationToken).ConfigureAwait(false); + + var recordings = recordingResult.Items; + + var groups = new List<RecordingGroupDto>(); + + var series = recordings + .Where(i => i.IsSeries) + .ToLookup(i => i.Name, StringComparer.OrdinalIgnoreCase) + .ToList(); + + groups.AddRange(series.OrderBy(i => i.Key).Select(i => new RecordingGroupDto + { + Name = i.Key, + RecordingCount = i.Count() + })); + + groups.Add(new RecordingGroupDto + { + Name = "Kids", + RecordingCount = recordings.Count(i => i.IsKids) + }); + + groups.Add(new RecordingGroupDto + { + Name = "Movies", + RecordingCount = recordings.Count(i => i.IsMovie) + }); + + groups.Add(new RecordingGroupDto + { + Name = "News", + RecordingCount = recordings.Count(i => i.IsNews) + }); + + groups.Add(new RecordingGroupDto + { + Name = "Sports", + RecordingCount = recordings.Count(i => i.IsSports) + }); + + groups.Add(new RecordingGroupDto + { + Name = "Others", + RecordingCount = recordings.Count(i => !i.IsSports && !i.IsNews && !i.IsMovie && !i.IsKids && !i.IsSeries) + }); + + groups = groups + .Where(i => i.RecordingCount > 0) + .ToList(); + + foreach (var group in groups) + { + group.Id = group.Name.ToLower().GetMD5().ToString("N"); + } + + return new QueryResult<RecordingGroupDto> + { + Items = groups.ToArray(), + TotalRecordCount = groups.Count + }; + } } } |
