aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--MediaBrowser.Api/Images/ImageService.cs4
-rw-r--r--MediaBrowser.Api/LiveTv/LiveTvService.cs29
-rw-r--r--MediaBrowser.Controller/LiveTv/ILiveTvManager.cs7
-rw-r--r--MediaBrowser.Controller/LiveTv/ILiveTvService.cs8
-rw-r--r--MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj6
-rw-r--r--MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj6
-rw-r--r--MediaBrowser.Model/LiveTv/ChannelGuide.cs23
-rw-r--r--MediaBrowser.Model/LiveTv/ProgramInfo.cs18
-rw-r--r--MediaBrowser.Model/LiveTv/ProgramQuery.cs25
-rw-r--r--MediaBrowser.Model/MediaBrowser.Model.csproj2
-rw-r--r--MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs47
-rw-r--r--Nuget/MediaBrowser.Common.Internal.nuspec4
-rw-r--r--Nuget/MediaBrowser.Common.nuspec2
-rw-r--r--Nuget/MediaBrowser.Server.Core.nuspec4
14 files changed, 124 insertions, 61 deletions
diff --git a/MediaBrowser.Api/Images/ImageService.cs b/MediaBrowser.Api/Images/ImageService.cs
index e5603967b..9112518b8 100644
--- a/MediaBrowser.Api/Images/ImageService.cs
+++ b/MediaBrowser.Api/Images/ImageService.cs
@@ -80,8 +80,8 @@ namespace MediaBrowser.Api.Images
public string Id { get; set; }
}
- [Route("/LiveTV/Channels/{Id}/Images/{Type}", "GET")]
- [Route("/LiveTV/Channels/{Id}/Images/{Type}/{Index}", "GET")]
+ [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
{
diff --git a/MediaBrowser.Api/LiveTv/LiveTvService.cs b/MediaBrowser.Api/LiveTv/LiveTvService.cs
index 68cfc9c44..b10d8d481 100644
--- a/MediaBrowser.Api/LiveTv/LiveTvService.cs
+++ b/MediaBrowser.Api/LiveTv/LiveTvService.cs
@@ -1,4 +1,5 @@
-using MediaBrowser.Controller.LiveTv;
+using System;
+using MediaBrowser.Controller.LiveTv;
using MediaBrowser.Model.LiveTv;
using ServiceStack.ServiceHost;
using System.Collections.Generic;
@@ -41,7 +42,7 @@ namespace MediaBrowser.Api.LiveTv
[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>>
@@ -50,9 +51,9 @@ namespace MediaBrowser.Api.LiveTv
public string ServiceName { get; set; }
}
- [Route("/LiveTv/Guide", "GET")]
+ [Route("/LiveTv/Programs", "GET")]
[Api(Description = "Gets available live tv epgs..")]
- public class GetGuide : IReturn<List<ChannelGuide>>
+ public class GetPrograms : IReturn<List<ProgramInfo>>
{
[ApiMember(Name = "ServiceName", Description = "Live tv service name", IsRequired = true, DataType = "string", ParameterType = "query", Verb = "GET")]
public string ServiceName { get; set; }
@@ -143,21 +144,15 @@ namespace MediaBrowser.Api.LiveTv
return recordings.SelectMany(i => i);
}
- public object Get(GetGuide request)
- {
- var result = GetGuideAsync(request).Result;
-
- return ToOptimizedResult(result);
- }
-
- private async Task<IEnumerable<ChannelGuide>> GetGuideAsync(GetGuide request)
+ public object Get(GetPrograms request)
{
- var service = GetServices(request.ServiceName)
- .First();
-
- var channels = request.ChannelIds.Split(',');
+ var result = _liveTvManager.GetPrograms(new ProgramQuery
+ {
+ ServiceName = request.ServiceName,
+ ChannelIdList = (request.ChannelIds ?? string.Empty).Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries).ToArray()
+ });
- return await service.GetChannelGuidesAsync(channels, CancellationToken.None).ConfigureAwait(false);
+ return ToOptimizedResult(result.ToList());
}
}
} \ No newline at end of file
diff --git a/MediaBrowser.Controller/LiveTv/ILiveTvManager.cs b/MediaBrowser.Controller/LiveTv/ILiveTvManager.cs
index 5ec2f2c4a..339367c17 100644
--- a/MediaBrowser.Controller/LiveTv/ILiveTvManager.cs
+++ b/MediaBrowser.Controller/LiveTv/ILiveTvManager.cs
@@ -40,5 +40,12 @@ namespace MediaBrowser.Controller.LiveTv
/// <param name="id">The identifier.</param>
/// <returns>Channel.</returns>
Channel GetChannel(string id);
+
+ /// <summary>
+ /// Gets the programs.
+ /// </summary>
+ /// <param name="query">The query.</param>
+ /// <returns>IEnumerable{ProgramInfo}.</returns>
+ IEnumerable<ProgramInfo> GetPrograms(ProgramQuery query);
}
}
diff --git a/MediaBrowser.Controller/LiveTv/ILiveTvService.cs b/MediaBrowser.Controller/LiveTv/ILiveTvService.cs
index 56d98d518..53cb514b5 100644
--- a/MediaBrowser.Controller/LiveTv/ILiveTvService.cs
+++ b/MediaBrowser.Controller/LiveTv/ILiveTvService.cs
@@ -61,11 +61,11 @@ namespace MediaBrowser.Controller.LiveTv
Task<IEnumerable<RecordingInfo>> GetRecordingsAsync(RecordingQuery query, CancellationToken cancellationToken);
/// <summary>
- /// Gets the channel guides.
+ /// Gets the channel guide.
/// </summary>
- /// <param name="channelIdList">The channel identifier list.</param>
+ /// <param name="channelId">The channel identifier.</param>
/// <param name="cancellationToken">The cancellation token.</param>
- /// <returns>Task{IEnumerable{ChannelGuide}}.</returns>
- Task<IEnumerable<ChannelGuide>> GetChannelGuidesAsync(IEnumerable<string> channelIdList, CancellationToken cancellationToken);
+ /// <returns>Task{IEnumerable{ProgramInfo}}.</returns>
+ Task<IEnumerable<ProgramInfo>> GetChannelGuideAsync(string channelId, CancellationToken cancellationToken);
}
}
diff --git a/MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj b/MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj
index 6f72dc09b..2850d09ed 100644
--- a/MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj
+++ b/MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj
@@ -224,9 +224,6 @@
<Compile Include="..\MediaBrowser.Model\IO\IZipClient.cs">
<Link>IO\IZipClient.cs</Link>
</Compile>
- <Compile Include="..\MediaBrowser.Model\LiveTv\ChannelGuide.cs">
- <Link>LiveTv\ChannelGuide.cs</Link>
- </Compile>
<Compile Include="..\MediaBrowser.Model\LiveTv\ChannelInfoDto.cs">
<Link>LiveTv\ChannelInfoDto.cs</Link>
</Compile>
@@ -242,6 +239,9 @@
<Compile Include="..\MediaBrowser.Model\LiveTv\ProgramInfo.cs">
<Link>LiveTv\ProgramInfo.cs</Link>
</Compile>
+ <Compile Include="..\MediaBrowser.Model\LiveTv\ProgramQuery.cs">
+ <Link>LiveTv\ProgramQuery.cs</Link>
+ </Compile>
<Compile Include="..\MediaBrowser.Model\LiveTv\RecordingInfo.cs">
<Link>LiveTv\RecordingInfo.cs</Link>
</Compile>
diff --git a/MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj b/MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj
index e49d0fb08..be6268184 100644
--- a/MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj
+++ b/MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj
@@ -211,9 +211,6 @@
<Compile Include="..\MediaBrowser.Model\IO\IZipClient.cs">
<Link>IO\IZipClient.cs</Link>
</Compile>
- <Compile Include="..\MediaBrowser.Model\LiveTv\ChannelGuide.cs">
- <Link>LiveTv\ChannelGuide.cs</Link>
- </Compile>
<Compile Include="..\MediaBrowser.Model\LiveTv\ChannelInfoDto.cs">
<Link>LiveTv\ChannelInfoDto.cs</Link>
</Compile>
@@ -229,6 +226,9 @@
<Compile Include="..\MediaBrowser.Model\LiveTv\ProgramInfo.cs">
<Link>LiveTv\ProgramInfo.cs</Link>
</Compile>
+ <Compile Include="..\MediaBrowser.Model\LiveTv\ProgramQuery.cs">
+ <Link>LiveTv\ProgramQuery.cs</Link>
+ </Compile>
<Compile Include="..\MediaBrowser.Model\LiveTv\RecordingInfo.cs">
<Link>LiveTv\RecordingInfo.cs</Link>
</Compile>
diff --git a/MediaBrowser.Model/LiveTv/ChannelGuide.cs b/MediaBrowser.Model/LiveTv/ChannelGuide.cs
deleted file mode 100644
index d2bebac18..000000000
--- a/MediaBrowser.Model/LiveTv/ChannelGuide.cs
+++ /dev/null
@@ -1,23 +0,0 @@
-using System.Collections.Generic;
-
-namespace MediaBrowser.Model.LiveTv
-{
- public class ChannelGuide
- {
- /// <summary>
- /// Gets or sets the name of the service.
- /// </summary>
- /// <value>The name of the service.</value>
- public string ServiceName { get; set; }
-
- /// <summary>
- /// ChannelId for the EPG.
- /// </summary>
- public string ChannelId { get; set; }
-
- /// <summary>
- /// List of all the programs for a specific channel
- /// </summary>
- public List<ProgramInfo> Programs { get; set; }
- }
-}
diff --git a/MediaBrowser.Model/LiveTv/ProgramInfo.cs b/MediaBrowser.Model/LiveTv/ProgramInfo.cs
index 6bf0e383f..75ec5df70 100644
--- a/MediaBrowser.Model/LiveTv/ProgramInfo.cs
+++ b/MediaBrowser.Model/LiveTv/ProgramInfo.cs
@@ -10,6 +10,24 @@ 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 name of the service.
+ /// </summary>
+ /// <value>The name of the service.</value>
+ public string ServiceName { get; set; }
+
+ /// <summary>
+ /// Gets or sets the external channel identifier.
+ /// </summary>
+ /// <value>The external channel identifier.</value>
+ public string ExternalChannelId { get; set; }
+
+ /// <summary>
/// Name of the program
/// </summary>
public string Name { get; set; }
diff --git a/MediaBrowser.Model/LiveTv/ProgramQuery.cs b/MediaBrowser.Model/LiveTv/ProgramQuery.cs
new file mode 100644
index 000000000..1276ddb9e
--- /dev/null
+++ b/MediaBrowser.Model/LiveTv/ProgramQuery.cs
@@ -0,0 +1,25 @@
+namespace MediaBrowser.Model.LiveTv
+{
+ /// <summary>
+ /// Class ProgramQuery.
+ /// </summary>
+ public class ProgramQuery
+ {
+ /// <summary>
+ /// Gets or sets the name of the service.
+ /// </summary>
+ /// <value>The name of the service.</value>
+ public string ServiceName { get; set; }
+
+ /// <summary>
+ /// Gets or sets the channel identifier.
+ /// </summary>
+ /// <value>The channel identifier.</value>
+ public string[] ChannelIdList { get; set; }
+
+ public ProgramQuery()
+ {
+ ChannelIdList = new string[] { };
+ }
+ }
+}
diff --git a/MediaBrowser.Model/MediaBrowser.Model.csproj b/MediaBrowser.Model/MediaBrowser.Model.csproj
index dc0571b3e..05b4e9b7a 100644
--- a/MediaBrowser.Model/MediaBrowser.Model.csproj
+++ b/MediaBrowser.Model/MediaBrowser.Model.csproj
@@ -60,10 +60,10 @@
<Compile Include="Dto\ItemCounts.cs" />
<Compile Include="Dto\ItemIndex.cs" />
<Compile Include="Entities\PackageReviewInfo.cs" />
- <Compile Include="LiveTv\ChannelGuide.cs" />
<Compile Include="LiveTv\ChannelInfoDto.cs" />
<Compile Include="LiveTv\ChannelQuery.cs" />
<Compile Include="LiveTv\ProgramInfo.cs" />
+ <Compile Include="LiveTv\ProgramQuery.cs" />
<Compile Include="LiveTv\RecordingQuery.cs" />
<Compile Include="Providers\ImageProviderInfo.cs" />
<Compile Include="Providers\RemoteImageInfo.cs" />
diff --git a/MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs b/MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs
index 973fa5409..825c7d8ef 100644
--- a/MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs
+++ b/MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs
@@ -29,6 +29,8 @@ namespace MediaBrowser.Server.Implementations.LiveTv
private List<Channel> _channels = new List<Channel>();
+ private Dictionary<Guid, List<ProgramInfo>> _guide = new Dictionary<Guid, List<ProgramInfo>>();
+
private readonly List<ILiveTvService> _services = new List<ILiveTvService>();
public LiveTvManager(IServerApplicationPaths appPaths, IFileSystem fileSystem, ILogger logger, IItemRepository itemRepo, IImageProcessor imageProcessor)
@@ -79,6 +81,11 @@ namespace MediaBrowser.Server.Implementations.LiveTv
};
}
+ private ILiveTvService GetService(ChannelInfo channel)
+ {
+ return _services.FirstOrDefault(i => string.Equals(channel.ServiceName, i.Name, StringComparison.OrdinalIgnoreCase));
+ }
+
private Guid? GetLogoImageTag(Channel info)
{
var path = info.PrimaryImagePath;
@@ -137,16 +144,30 @@ namespace MediaBrowser.Server.Implementations.LiveTv
var allChannels = results.SelectMany(i => i).ToList();
var list = new List<Channel>();
+ var guide = new Dictionary<Guid, List<ProgramInfo>>();
var numComplete = 0;
- foreach (var channel in allChannels)
+ foreach (var channelInfo in allChannels)
{
try
{
- var item = await GetChannel(channel, cancellationToken).ConfigureAwait(false);
+ var item = await GetChannel(channelInfo, cancellationToken).ConfigureAwait(false);
+
+ var service = GetService(channelInfo);
+
+ var programs = await service.GetChannelGuideAsync(channelInfo.Id, cancellationToken).ConfigureAwait(false);
+ var programList = programs.ToList();
+
+ foreach (var program in programList)
+ {
+ program.ExternalChannelId = channelInfo.Id;
+ program.ChannelId = item.Id.ToString("N");
+ program.ServiceName = service.Name;
+ }
list.Add(item);
+ guide[item.Id] = programList;
}
catch (OperationCanceledException)
{
@@ -154,7 +175,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv
}
catch (Exception ex)
{
- _logger.ErrorException("Error getting channel information for {0}", ex, channel.Name);
+ _logger.ErrorException("Error getting channel information for {0}", ex, channelInfo.Name);
}
numComplete++;
@@ -164,6 +185,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv
progress.Report(90 * percent + 10);
}
+ _guide = guide;
_channels = list;
}
@@ -218,5 +240,24 @@ namespace MediaBrowser.Server.Implementations.LiveTv
return item;
}
+
+ public IEnumerable<ProgramInfo> GetPrograms(ProgramQuery query)
+ {
+ var programs = _guide.Values.SelectMany(i => i);
+
+ if (!string.IsNullOrEmpty(query.ServiceName))
+ {
+ programs = programs.Where(i => string.Equals(i.ServiceName, query.ServiceName, StringComparison.OrdinalIgnoreCase));
+ }
+
+ if (query.ChannelIdList.Length > 0)
+ {
+ var guids = query.ChannelIdList.Select(i => new Guid(i)).ToList();
+
+ programs = programs.Where(i => guids.Contains(new Guid(i.ChannelId)));
+ }
+
+ return programs;
+ }
}
}
diff --git a/Nuget/MediaBrowser.Common.Internal.nuspec b/Nuget/MediaBrowser.Common.Internal.nuspec
index 75b56d1e3..ea21fc39b 100644
--- a/Nuget/MediaBrowser.Common.Internal.nuspec
+++ b/Nuget/MediaBrowser.Common.Internal.nuspec
@@ -2,7 +2,7 @@
<package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
<metadata>
<id>MediaBrowser.Common.Internal</id>
- <version>3.0.246</version>
+ <version>3.0.247</version>
<title>MediaBrowser.Common.Internal</title>
<authors>Luke</authors>
<owners>ebr,Luke,scottisafool</owners>
@@ -12,7 +12,7 @@
<description>Contains common components shared by Media Browser Theater and Media Browser Server. Not intended for plugin developer consumption.</description>
<copyright>Copyright © Media Browser 2013</copyright>
<dependencies>
- <dependency id="MediaBrowser.Common" version="3.0.246" />
+ <dependency id="MediaBrowser.Common" version="3.0.247" />
<dependency id="NLog" version="2.1.0" />
<dependency id="ServiceStack.Text" version="3.9.58" />
<dependency id="SimpleInjector" version="2.3.6" />
diff --git a/Nuget/MediaBrowser.Common.nuspec b/Nuget/MediaBrowser.Common.nuspec
index c24fe9dd6..1f2d32b5f 100644
--- a/Nuget/MediaBrowser.Common.nuspec
+++ b/Nuget/MediaBrowser.Common.nuspec
@@ -2,7 +2,7 @@
<package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
<metadata>
<id>MediaBrowser.Common</id>
- <version>3.0.246</version>
+ <version>3.0.247</version>
<title>MediaBrowser.Common</title>
<authors>Media Browser Team</authors>
<owners>ebr,Luke,scottisafool</owners>
diff --git a/Nuget/MediaBrowser.Server.Core.nuspec b/Nuget/MediaBrowser.Server.Core.nuspec
index 5bbed1f65..809cad71a 100644
--- a/Nuget/MediaBrowser.Server.Core.nuspec
+++ b/Nuget/MediaBrowser.Server.Core.nuspec
@@ -2,7 +2,7 @@
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
<metadata>
<id>MediaBrowser.Server.Core</id>
- <version>3.0.246</version>
+ <version>3.0.247</version>
<title>Media Browser.Server.Core</title>
<authors>Media Browser Team</authors>
<owners>ebr,Luke,scottisafool</owners>
@@ -12,7 +12,7 @@
<description>Contains core components required to build plugins for Media Browser Server.</description>
<copyright>Copyright © Media Browser 2013</copyright>
<dependencies>
- <dependency id="MediaBrowser.Common" version="3.0.246" />
+ <dependency id="MediaBrowser.Common" version="3.0.247" />
</dependencies>
</metadata>
<files>