diff options
| author | Luke Pulverenti <luke.pulverenti@gmail.com> | 2013-11-24 16:30:38 -0500 |
|---|---|---|
| committer | Luke Pulverenti <luke.pulverenti@gmail.com> | 2013-11-24 16:30:38 -0500 |
| commit | 01a9c07dd8bef8bb5d3abef4113d0449601b9ce5 (patch) | |
| tree | b3ba4a8bdbaa9d14c8cbb0b545d6b491a25920e3 | |
| parent | 7b6819846d464c9e67335cfb6ab230702eb6ba1d (diff) | |
support display of channel images
7 files changed, 96 insertions, 35 deletions
diff --git a/MediaBrowser.Api/Images/ImageService.cs b/MediaBrowser.Api/Images/ImageService.cs index 4fd8fbfd1..5234dda18 100644 --- a/MediaBrowser.Api/Images/ImageService.cs +++ b/MediaBrowser.Api/Images/ImageService.cs @@ -5,6 +5,7 @@ using MediaBrowser.Controller.Drawing; using MediaBrowser.Controller.Dto; using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Library; +using MediaBrowser.Controller.LiveTv; using MediaBrowser.Controller.Persistence; using MediaBrowser.Controller.Providers; using MediaBrowser.Model.Drawing; @@ -67,6 +68,19 @@ namespace MediaBrowser.Api.Images public string Id { get; set; } } + [Route("/LiveTV/Channels/{Id}/Images/{Type}", "GET")] + [Route("/LiveTV/Channels/{Id}/Images/{Type}/{Index}", "GET")] + [Api(Description = "Gets an item image")] + public class GetChannelImage : ImageRequest + { + /// <summary> + /// Gets or sets the id. + /// </summary> + /// <value>The id.</value> + [ApiMember(Name = "Id", Description = "Channel Id", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "GET")] + public string Id { get; set; } + } + /// <summary> /// Class UpdateItemImageIndex /// </summary> @@ -341,10 +355,12 @@ namespace MediaBrowser.Api.Images private readonly IDtoService _dtoService; private readonly IImageProcessor _imageProcessor; + private readonly ILiveTvManager _liveTv; + /// <summary> /// Initializes a new instance of the <see cref="ImageService" /> class. /// </summary> - public ImageService(IUserManager userManager, ILibraryManager libraryManager, IApplicationPaths appPaths, IProviderManager providerManager, IItemRepository itemRepo, IDtoService dtoService, IImageProcessor imageProcessor) + public ImageService(IUserManager userManager, ILibraryManager libraryManager, IApplicationPaths appPaths, IProviderManager providerManager, IItemRepository itemRepo, IDtoService dtoService, IImageProcessor imageProcessor, ILiveTvManager liveTv) { _userManager = userManager; _libraryManager = libraryManager; @@ -353,6 +369,7 @@ namespace MediaBrowser.Api.Images _itemRepo = itemRepo; _dtoService = dtoService; _imageProcessor = imageProcessor; + _liveTv = liveTv; } /// <summary> @@ -492,6 +509,13 @@ namespace MediaBrowser.Api.Images } } + public object Get(GetChannelImage request) + { + var item = _liveTv.GetChannel(request.Id); + + return GetImage(request, item); + } + /// <summary> /// Gets the specified request. /// </summary> diff --git a/MediaBrowser.Api/LiveTv/LiveTvService.cs b/MediaBrowser.Api/LiveTv/LiveTvService.cs index d2574063b..68cfc9c44 100644 --- a/MediaBrowser.Api/LiveTv/LiveTvService.cs +++ b/MediaBrowser.Api/LiveTv/LiveTvService.cs @@ -30,6 +30,18 @@ namespace MediaBrowser.Api.LiveTv public string UserId { get; set; } } + [Route("/LiveTv/Channels/{Id}", "GET")] + [Api(Description = "Gets a live tv channel")] + public class GetChannel : IReturn<ChannelInfoDto> + { + /// <summary> + /// Gets or sets the id. + /// </summary> + /// <value>The id.</value> + [ApiMember(Name = "Id", Description = "Channel Id", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "GET")] + public string Id { get; set; } + } + [Route("/LiveTv/Recordings", "GET")] [Api(Description = "Gets available live tv recordings.")] public class GetRecordings : IReturn<List<RecordingInfo>> @@ -101,6 +113,13 @@ namespace MediaBrowser.Api.LiveTv return ToOptimizedResult(result.ToList()); } + public object Get(GetChannel request) + { + var result = _liveTvManager.GetChannel(request.Id); + + return ToOptimizedResult(_liveTvManager.GetChannelInfoDto(result)); + } + public object Get(GetRecordings request) { var result = GetRecordingsAsync(request).Result; diff --git a/MediaBrowser.Api/Playback/Progressive/BaseProgressiveStreamingService.cs b/MediaBrowser.Api/Playback/Progressive/BaseProgressiveStreamingService.cs index a31b6af0e..0b7b48f47 100644 --- a/MediaBrowser.Api/Playback/Progressive/BaseProgressiveStreamingService.cs +++ b/MediaBrowser.Api/Playback/Progressive/BaseProgressiveStreamingService.cs @@ -307,7 +307,7 @@ namespace MediaBrowser.Api.Playback.Progressive } } - return new ImageService(UserManager, LibraryManager, ApplicationPaths, null, ItemRepository, DtoService, ImageProcessor) + return new ImageService(UserManager, LibraryManager, ApplicationPaths, null, ItemRepository, DtoService, ImageProcessor, null) { Logger = Logger, RequestContext = RequestContext, diff --git a/MediaBrowser.Controller/LiveTv/ILiveTvManager.cs b/MediaBrowser.Controller/LiveTv/ILiveTvManager.cs index 8535ac996..5ec2f2c4a 100644 --- a/MediaBrowser.Controller/LiveTv/ILiveTvManager.cs +++ b/MediaBrowser.Controller/LiveTv/ILiveTvManager.cs @@ -37,9 +37,8 @@ namespace MediaBrowser.Controller.LiveTv /// <summary> /// Gets the channel. /// </summary> - /// <param name="serviceName">Name of the service.</param> - /// <param name="channelId">The channel identifier.</param> + /// <param name="id">The identifier.</param> /// <returns>Channel.</returns> - Channel GetChannel(string serviceName, string channelId); + Channel GetChannel(string id); } } diff --git a/MediaBrowser.Model/LiveTv/ChannelInfoDto.cs b/MediaBrowser.Model/LiveTv/ChannelInfoDto.cs index b6691eca3..8e4c95870 100644 --- a/MediaBrowser.Model/LiveTv/ChannelInfoDto.cs +++ b/MediaBrowser.Model/LiveTv/ChannelInfoDto.cs @@ -20,6 +20,12 @@ namespace MediaBrowser.Model.LiveTv public string Id { get; set; } /// <summary> + /// Gets or sets the channel identifier. + /// </summary> + /// <value>The channel identifier.</value> + public string ChannelId { get; set; } + + /// <summary> /// Gets or sets the logo image tag. /// </summary> /// <value>The logo image tag.</value> @@ -42,5 +48,11 @@ namespace MediaBrowser.Model.LiveTv /// </summary> /// <value>The type of the channel.</value> public ChannelType ChannelType { get; set; } + + /// <summary> + /// Gets or sets the type. + /// </summary> + /// <value>The type.</value> + public string Type { get; set; } } } diff --git a/MediaBrowser.Server.Implementations/LiveTv/ChannelImageProvider.cs b/MediaBrowser.Server.Implementations/LiveTv/ChannelImageProvider.cs index 4ab6e55c8..e1a918fd2 100644 --- a/MediaBrowser.Server.Implementations/LiveTv/ChannelImageProvider.cs +++ b/MediaBrowser.Server.Implementations/LiveTv/ChannelImageProvider.cs @@ -33,12 +33,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv protected override bool NeedsRefreshInternal(BaseItem item, BaseProviderInfo providerInfo) { - if (item.HasImage(ImageType.Primary)) - { - return false; - } - - return base.NeedsRefreshInternal(item, providerInfo); + return !item.HasImage(ImageType.Primary); } public override async Task<bool> FetchAsync(BaseItem item, bool force, CancellationToken cancellationToken) diff --git a/MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs b/MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs index 9e1c6c4ac..8ea4ff1d3 100644 --- a/MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs +++ b/MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs @@ -70,9 +70,11 @@ namespace MediaBrowser.Server.Implementations.LiveTv Name = info.Name, ServiceName = info.ServiceName, ChannelType = info.ChannelType, - Id = info.ChannelId, + ChannelId = info.ChannelId, Number = info.ChannelNumber, - PrimaryImageTag = GetLogoImageTag(info) + PrimaryImageTag = GetLogoImageTag(info), + Type = info.GetType().Name, + Id = info.Id.ToString("N") }; } @@ -113,9 +115,11 @@ namespace MediaBrowser.Server.Implementations.LiveTv }).ThenBy(i => i.Name); } - public Channel GetChannel(string serviceName, string channelId) + public Channel GetChannel(string id) { - return _channels.FirstOrDefault(i => string.Equals(i.ServiceName, serviceName, StringComparison.OrdinalIgnoreCase) && string.Equals(i.ChannelId, channelId, StringComparison.OrdinalIgnoreCase)); + var guid = new Guid(id); + + return _channels.FirstOrDefault(i => i.Id == guid); } internal async Task RefreshChannels(IProgress<double> progress, CancellationToken cancellationToken) @@ -125,36 +129,44 @@ namespace MediaBrowser.Server.Implementations.LiveTv var tasks = _services.Select(i => i.GetChannelsAsync(currentCancellationToken)); - var results = await Task.WhenAll(tasks).ConfigureAwait(false); + progress.Report(10); - var allChannels = results.SelectMany(i => i); + var results = await Task.WhenAll(tasks).ConfigureAwait(false); - var channnelTasks = allChannels.Select(i => GetChannel(i, cancellationToken)); + var allChannels = results.SelectMany(i => i).ToList(); - var channelEntities = await Task.WhenAll(channnelTasks).ConfigureAwait(false); + var list = new List<Channel>(); - _channels = channelEntities.ToList(); - } + var numComplete = 0; - private async Task<Channel> GetChannel(ChannelInfo channelInfo, CancellationToken cancellationToken) - { - try - { - return await GetChannelInternal(channelInfo, cancellationToken).ConfigureAwait(false); - } - catch (OperationCanceledException) - { - throw; - } - catch (Exception ex) + foreach (var channel in allChannels) { - _logger.ErrorException("Error getting channel information for {0}", ex, channelInfo.Name); + try + { + var item = await GetChannel(channel, cancellationToken).ConfigureAwait(false); - return null; + list.Add(item); + } + catch (OperationCanceledException) + { + throw; + } + catch (Exception ex) + { + _logger.ErrorException("Error getting channel information for {0}", ex, channel.Name); + } + + numComplete++; + double percent = numComplete; + percent /= allChannels.Count; + + progress.Report(90 * percent + 10); } + + _channels = list; } - private async Task<Channel> GetChannelInternal(ChannelInfo channelInfo, CancellationToken cancellationToken) + private async Task<Channel> GetChannel(ChannelInfo channelInfo, CancellationToken cancellationToken) { var path = Path.Combine(_appPaths.ItemsByNamePath, "channels", _fileSystem.GetValidFilename(channelInfo.ServiceName), _fileSystem.GetValidFilename(channelInfo.Name)); |
