From 78e6304ac03f79f1cb104bda1bac3b2e917173a4 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Mon, 11 Nov 2013 14:36:48 -0500 Subject: [PATCH] updated live tv api --- MediaBrowser.Api/LiveTv/LiveTvService.cs | 48 +++++++++++++------ .../LiveTv/ILiveTvService.cs | 17 +++++-- 2 files changed, 47 insertions(+), 18 deletions(-) diff --git a/MediaBrowser.Api/LiveTv/LiveTvService.cs b/MediaBrowser.Api/LiveTv/LiveTvService.cs index 6a914a35f8..71da403485 100644 --- a/MediaBrowser.Api/LiveTv/LiveTvService.cs +++ b/MediaBrowser.Api/LiveTv/LiveTvService.cs @@ -12,27 +12,35 @@ namespace MediaBrowser.Api.LiveTv [Api(Description = "Gets available live tv services.")] public class GetServices : IReturn> { + [ApiMember(Name = "ServiceName", Description = "Optional filter by service.", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "GET")] + public string ServiceName { get; set; } } [Route("/LiveTv/Channels", "GET")] [Api(Description = "Gets available live tv channels.")] public class GetChannels : IReturn> { - // Add filter by service if needed, and/or other filters + [ApiMember(Name = "ServiceName", Description = "Optional filter by service.", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "GET")] + public string ServiceName { get; set; } } [Route("/LiveTv/Recordings", "GET")] [Api(Description = "Gets available live tv recordings.")] public class GetRecordings : IReturn> { - // Add filter by service if needed, and/or other filters + [ApiMember(Name = "ServiceName", Description = "Optional filter by service.", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "GET")] + public string ServiceName { get; set; } } [Route("/LiveTv/EPG", "GET")] [Api(Description = "Gets available live tv epgs..")] - public class GetEpg : IReturn> + public class GetEpg : IReturn { - // Add filter by service if needed, and/or other filters + [ApiMember(Name = "ServiceName", Description = "The live tv service name", IsRequired = true, DataType = "string", ParameterType = "query", Verb = "GET")] + public string ServiceName { get; set; } + + [ApiMember(Name = "ChannelId", Description = "The channel id", IsRequired = true, DataType = "string", ParameterType = "query", Verb = "GET")] + public string ChannelId { get; set; } } public class LiveTvService : BaseApiService @@ -44,14 +52,25 @@ namespace MediaBrowser.Api.LiveTv _liveTvManager = liveTvManager; } + private IEnumerable GetServices(string serviceName) + { + IEnumerable services = _liveTvManager.Services; + + if (!string.IsNullOrEmpty(serviceName)) + { + services = services.Where(i => string.Equals(i.Name, serviceName, System.StringComparison.OrdinalIgnoreCase)); + } + + return services; + } + public object Get(GetServices request) { - var services = _liveTvManager.Services; - - var result = services.Select(GetServiceInfo) + var services = GetServices(request.ServiceName) + .Select(GetServiceInfo) .ToList(); - return ToOptimizedResult(result); + return ToOptimizedResult(services); } private LiveTvServiceInfo GetServiceInfo(ILiveTvService service) @@ -71,7 +90,7 @@ namespace MediaBrowser.Api.LiveTv private async Task> GetChannelsAsync(GetChannels request) { - var services = _liveTvManager.Services; + var services = GetServices(request.ServiceName); var tasks = services.Select(i => i.GetChannelsAsync(CancellationToken.None)); @@ -91,7 +110,7 @@ namespace MediaBrowser.Api.LiveTv private async Task> GetRecordingsAsync(GetRecordings request) { - var services = _liveTvManager.Services; + var services = GetServices(request.ServiceName); var tasks = services.Select(i => i.GetRecordingsAsync(CancellationToken.None)); @@ -109,13 +128,12 @@ namespace MediaBrowser.Api.LiveTv private async Task> GetEpgAsync(GetEpg request) { - var services = _liveTvManager.Services; + var service = GetServices(request.ServiceName) + .First(); - var tasks = services.Select(i => i.GetEpgAsync(CancellationToken.None)); + var epg = await service.GetEpgAsync(request.ChannelId, CancellationToken.None).ConfigureAwait(false); - var epg = await Task.WhenAll(tasks).ConfigureAwait(false); - - return epg.SelectMany(i => i); + return epg; } } } \ No newline at end of file diff --git a/MediaBrowser.Controller/LiveTv/ILiveTvService.cs b/MediaBrowser.Controller/LiveTv/ILiveTvService.cs index 86058696d3..f7181a99b2 100644 --- a/MediaBrowser.Controller/LiveTv/ILiveTvService.cs +++ b/MediaBrowser.Controller/LiveTv/ILiveTvService.cs @@ -1,7 +1,7 @@ -using System.Collections.Generic; +using MediaBrowser.Model.LiveTv; +using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; -using MediaBrowser.Model.LiveTv; namespace MediaBrowser.Controller.LiveTv { @@ -23,8 +23,19 @@ namespace MediaBrowser.Controller.LiveTv /// Task{IEnumerable{ChannelInfo}}. Task> GetChannelsAsync(CancellationToken cancellationToken); + /// + /// Gets the recordings asynchronous. + /// + /// The cancellation token. + /// Task{IEnumerable{RecordingInfo}}. Task> GetRecordingsAsync(CancellationToken cancellationToken); - Task> GetEpgAsync(CancellationToken cancellationToken); + /// + /// Gets the epg asynchronous. + /// + /// The channel identifier. + /// The cancellation token. + /// Task{IEnumerable{EpgFullInfo}}. + Task> GetEpgAsync(string channelId, CancellationToken cancellationToken); } }