diff --git a/MediaBrowser.Controller/LiveTv/ILiveTvManager.cs b/MediaBrowser.Controller/LiveTv/ILiveTvManager.cs
index 2b121eeeb5..1458c1bc2e 100644
--- a/MediaBrowser.Controller/LiveTv/ILiveTvManager.cs
+++ b/MediaBrowser.Controller/LiveTv/ILiveTvManager.cs
@@ -372,5 +372,14 @@ namespace MediaBrowser.Controller.LiveTv
/// The feature.
/// Task<MBRegistrationRecord>.
Task GetRegistrationInfo(string channelId, string programId, string feature);
+
+ ///
+ /// Adds the channel information.
+ ///
+ /// The dto.
+ /// The channel.
+ /// The options.
+ /// The user.
+ void AddChannelInfo(BaseItemDto dto, LiveTvChannel channel, DtoOptions options, User user);
}
}
diff --git a/MediaBrowser.Model/Dto/BaseItemDto.cs b/MediaBrowser.Model/Dto/BaseItemDto.cs
index ac8fa3370b..a1c0755634 100644
--- a/MediaBrowser.Model/Dto/BaseItemDto.cs
+++ b/MediaBrowser.Model/Dto/BaseItemDto.cs
@@ -1195,6 +1195,10 @@ namespace MediaBrowser.Model.Dto
///
/// The timer identifier.
public string TimerId { get; set; }
-
+ ///
+ /// Gets or sets the current program.
+ ///
+ /// The current program.
+ public BaseItemDto CurrentProgram { get; set; }
}
}
diff --git a/MediaBrowser.Server.Implementations/Dto/DtoService.cs b/MediaBrowser.Server.Implementations/Dto/DtoService.cs
index aa6ab1d65e..edfef38fd0 100644
--- a/MediaBrowser.Server.Implementations/Dto/DtoService.cs
+++ b/MediaBrowser.Server.Implementations/Dto/DtoService.cs
@@ -98,7 +98,7 @@ namespace MediaBrowser.Server.Implementations.Dto
var byName = item as IItemByName;
- if (byName != null && !(item is LiveTvChannel))
+ if (byName != null)
{
if (options.Fields.Contains(ItemFields.ItemCounts))
{
@@ -140,7 +140,7 @@ namespace MediaBrowser.Server.Implementations.Dto
var byName = item as IItemByName;
- if (byName != null && !(item is LiveTvChannel))
+ if (byName != null)
{
if (options.Fields.Contains(ItemFields.ItemCounts))
{
@@ -351,6 +351,12 @@ namespace MediaBrowser.Server.Implementations.Dto
AttachBasicFields(dto, item, owner, options);
+ var tvChannel = item as LiveTvChannel;
+ if (tvChannel != null)
+ {
+ _livetvManager().AddChannelInfo(dto, tvChannel, options, user);
+ }
+
var collectionFolder = item as ICollectionFolder;
if (collectionFolder != null)
{
@@ -1520,12 +1526,6 @@ namespace MediaBrowser.Server.Implementations.Dto
SetPhotoProperties(dto, photo);
}
- var tvChannel = item as LiveTvChannel;
- if (tvChannel != null)
- {
- dto.MediaSources = _mediaSourceManager().GetStaticMediaSources(tvChannel, true).ToList();
- }
-
dto.ChannelId = item.ChannelId;
var channelItem = item as IChannelItem;
diff --git a/MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs b/MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs
index 9cd4a2334e..ff7700124c 100644
--- a/MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs
+++ b/MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs
@@ -1040,6 +1040,8 @@ namespace MediaBrowser.Server.Implementations.LiveTv
{
cancellationToken.ThrowIfCancellationRequested();
+ _logger.Debug("Refreshing guide from {0}", service.Name);
+
try
{
var innerProgress = new ActionableProgress();
@@ -1721,6 +1723,32 @@ namespace MediaBrowser.Server.Implementations.LiveTv
return dto;
}
+ public void AddChannelInfo(BaseItemDto dto, LiveTvChannel channel, DtoOptions options, User user)
+ {
+ dto.MediaSources = channel.GetMediaSources(true).ToList();
+
+ var now = DateTime.UtcNow;
+
+ var programs = _libraryManager.GetItems(new InternalItemsQuery
+ {
+ IncludeItemTypes = new[] { typeof(LiveTvProgram).Name },
+ ChannelIds = new[] { channel.Id.ToString("N") },
+ MaxStartDate = now,
+ MinEndDate = now,
+ Limit = 1
+
+ }).Items.Cast();
+
+ var currentProgram = programs
+ .OrderBy(i => i.StartDate)
+ .FirstOrDefault();
+
+ if (currentProgram != null)
+ {
+ dto.CurrentProgram = _dtoService.GetBaseItemDto(currentProgram, options, user);
+ }
+ }
+
private async Task> GetNewTimerDefaultsInternal(CancellationToken cancellationToken, LiveTvProgram program = null)
{
var service = program != null && !string.IsNullOrWhiteSpace(program.ServiceName) ?