added recording status enum

This commit is contained in:
Luke Pulverenti 2013-11-25 21:53:48 -05:00
parent 3b4c355838
commit 6a9ed5f87f
14 changed files with 216 additions and 21 deletions

View File

@ -26,7 +26,7 @@ namespace MediaBrowser.Api.LiveTv
[ApiMember(Name = "Type", Description = "Optional filter by channel type.", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "GET")] [ApiMember(Name = "Type", Description = "Optional filter by channel type.", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "GET")]
public ChannelType? Type { get; set; } public ChannelType? Type { get; set; }
[ApiMember(Name = "UserId", Description = "Optional filter by channel user id.", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "GET")] [ApiMember(Name = "UserId", Description = "Optional filter by user id.", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "GET")]
public string UserId { get; set; } public string UserId { get; set; }
} }
@ -40,8 +40,17 @@ namespace MediaBrowser.Api.LiveTv
/// <value>The id.</value> /// <value>The id.</value>
[ApiMember(Name = "Id", Description = "Channel Id", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "GET")] [ApiMember(Name = "Id", Description = "Channel Id", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "GET")]
public string Id { get; set; } public string Id { get; set; }
[ApiMember(Name = "UserId", Description = "Optional user id.", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "GET")]
public string UserId { get; set; }
} }
[Route("/LiveTv/Recordings", "GET")]
[Api(Description = "Gets live tv recordings")]
public class GetRecordings : IReturn<QueryResult<RecordingInfoDto>>
{
}
[Route("/LiveTv/Programs", "GET")] [Route("/LiveTv/Programs", "GET")]
[Api(Description = "Gets available live tv epgs..")] [Api(Description = "Gets available live tv epgs..")]
public class GetPrograms : IReturn<QueryResult<ProgramInfoDto>> public class GetPrograms : IReturn<QueryResult<ProgramInfoDto>>
@ -51,6 +60,9 @@ namespace MediaBrowser.Api.LiveTv
[ApiMember(Name = "ChannelIds", Description = "The channels to return guide information for.", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "GET")] [ApiMember(Name = "ChannelIds", Description = "The channels to return guide information for.", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "GET")]
public string ChannelIds { get; set; } public string ChannelIds { get; set; }
[ApiMember(Name = "UserId", Description = "Optional filter by user id.", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "GET")]
public string UserId { get; set; }
} }
public class LiveTvService : BaseApiService public class LiveTvService : BaseApiService
@ -106,9 +118,9 @@ namespace MediaBrowser.Api.LiveTv
public object Get(GetChannel request) public object Get(GetChannel request)
{ {
var result = _liveTvManager.GetChannel(request.Id); var result = _liveTvManager.GetChannelInfoDto(request.Id, request.UserId);
return ToOptimizedResult(_liveTvManager.GetChannelInfoDto(result)); return ToOptimizedResult(result);
} }
public object Get(GetPrograms request) public object Get(GetPrograms request)
@ -116,10 +128,18 @@ namespace MediaBrowser.Api.LiveTv
var result = _liveTvManager.GetPrograms(new ProgramQuery var result = _liveTvManager.GetPrograms(new ProgramQuery
{ {
ServiceName = request.ServiceName, ServiceName = request.ServiceName,
ChannelIdList = (request.ChannelIds ?? string.Empty).Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries).ToArray() ChannelIdList = (request.ChannelIds ?? string.Empty).Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries).ToArray(),
UserId = request.UserId
}); });
return ToOptimizedResult(result); return ToOptimizedResult(result);
} }
public object Get(GetRecordings request)
{
var result = _liveTvManager.GetRecordings();
return ToOptimizedResult(result);
}
} }
} }

View File

@ -29,11 +29,10 @@ namespace MediaBrowser.Controller.LiveTv
QueryResult<ChannelInfoDto> GetChannels(ChannelQuery query); QueryResult<ChannelInfoDto> GetChannels(ChannelQuery query);
/// <summary> /// <summary>
/// Gets the channel information dto. /// Gets the recordings.
/// </summary> /// </summary>
/// <param name="info">The information.</param> /// <returns>QueryResult{RecordingInfoDto}.</returns>
/// <returns>ChannelInfoDto.</returns> QueryResult<RecordingInfoDto> GetRecordings();
ChannelInfoDto GetChannelInfoDto(Channel info);
/// <summary> /// <summary>
/// Gets the channel. /// Gets the channel.
@ -42,6 +41,14 @@ namespace MediaBrowser.Controller.LiveTv
/// <returns>Channel.</returns> /// <returns>Channel.</returns>
Channel GetChannel(string id); Channel GetChannel(string id);
/// <summary>
/// Gets the channel.
/// </summary>
/// <param name="id">The identifier.</param>
/// <param name="userId">The user identifier.</param>
/// <returns>Channel.</returns>
ChannelInfoDto GetChannelInfoDto(string id, string userId);
/// <summary> /// <summary>
/// Gets the programs. /// Gets the programs.
/// </summary> /// </summary>

View File

@ -1,5 +1,6 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using MediaBrowser.Model.LiveTv;
namespace MediaBrowser.Controller.LiveTv namespace MediaBrowser.Controller.LiveTv
{ {
@ -21,6 +22,12 @@ namespace MediaBrowser.Controller.LiveTv
/// </summary> /// </summary>
public string Name { get; set; } public string Name { get; set; }
/// <summary>
/// Gets or sets the official rating.
/// </summary>
/// <value>The official rating.</value>
public string OfficialRating { get; set; }
/// <summary> /// <summary>
/// Description of the progam. /// Description of the progam.
/// </summary> /// </summary>
@ -41,6 +48,24 @@ namespace MediaBrowser.Controller.LiveTv
/// </summary> /// </summary>
public List<string> Genres { get; set; } public List<string> Genres { get; set; }
/// <summary>
/// Gets or sets the quality.
/// </summary>
/// <value>The quality.</value>
public ProgramVideoQuality Quality { get; set; }
/// <summary>
/// Gets or sets the original air date.
/// </summary>
/// <value>The original air date.</value>
public DateTime? OriginalAirDate { get; set; }
/// <summary>
/// Gets or sets the audio.
/// </summary>
/// <value>The audio.</value>
public ProgramAudio Audio { get; set; }
public ProgramInfo() public ProgramInfo()
{ {
Genres = new List<string>(); Genres = new List<string>();

View File

@ -1,4 +1,5 @@
using System; using MediaBrowser.Model.LiveTv;
using System;
using System.Collections.Generic; using System.Collections.Generic;
namespace MediaBrowser.Controller.LiveTv namespace MediaBrowser.Controller.LiveTv
@ -47,9 +48,10 @@ namespace MediaBrowser.Controller.LiveTv
public DateTime EndDate { get; set; } public DateTime EndDate { get; set; }
/// <summary> /// <summary>
/// Status of the recording. /// Gets or sets the status.
/// </summary> /// </summary>
public string Status { get; set; } //TODO: Enum for status?? Difference NextPvr,Argus,... /// <value>The status.</value>
public RecordingStatus Status { get; set; }
/// <summary> /// <summary>
/// Gets or sets a value indicating whether this instance is recurring. /// Gets or sets a value indicating whether this instance is recurring.

View File

@ -248,6 +248,9 @@
<Compile Include="..\MediaBrowser.Model\LiveTv\RecordingQuery.cs"> <Compile Include="..\MediaBrowser.Model\LiveTv\RecordingQuery.cs">
<Link>LiveTv\RecordingQuery.cs</Link> <Link>LiveTv\RecordingQuery.cs</Link>
</Compile> </Compile>
<Compile Include="..\MediaBrowser.Model\LiveTv\RecordingStatus.cs">
<Link>LiveTv\RecordingStatus.cs</Link>
</Compile>
<Compile Include="..\MediaBrowser.Model\Logging\ILogger.cs"> <Compile Include="..\MediaBrowser.Model\Logging\ILogger.cs">
<Link>Logging\ILogger.cs</Link> <Link>Logging\ILogger.cs</Link>
</Compile> </Compile>

View File

@ -235,6 +235,9 @@
<Compile Include="..\MediaBrowser.Model\LiveTv\RecordingQuery.cs"> <Compile Include="..\MediaBrowser.Model\LiveTv\RecordingQuery.cs">
<Link>LiveTv\RecordingQuery.cs</Link> <Link>LiveTv\RecordingQuery.cs</Link>
</Compile> </Compile>
<Compile Include="..\MediaBrowser.Model\LiveTv\RecordingStatus.cs">
<Link>LiveTv\RecordingStatus.cs</Link>
</Compile>
<Compile Include="..\MediaBrowser.Model\Logging\ILogger.cs"> <Compile Include="..\MediaBrowser.Model\Logging\ILogger.cs">
<Link>Logging\ILogger.cs</Link> <Link>Logging\ILogger.cs</Link>
</Compile> </Compile>

View File

@ -1,4 +1,5 @@
using System; using System;
using MediaBrowser.Model.Dto;
namespace MediaBrowser.Model.LiveTv namespace MediaBrowser.Model.LiveTv
{ {
@ -54,5 +55,11 @@ namespace MediaBrowser.Model.LiveTv
/// </summary> /// </summary>
/// <value>The type of the media.</value> /// <value>The type of the media.</value>
public string MediaType { get; set; } public string MediaType { get; set; }
/// <summary>
/// Gets or sets the user data.
/// </summary>
/// <value>The user data.</value>
public UserItemDataDto UserData { get; set; }
} }
} }

View File

@ -27,6 +27,12 @@ namespace MediaBrowser.Model.LiveTv
/// </summary> /// </summary>
/// <value>The recording identifier.</value> /// <value>The recording identifier.</value>
public string RecordingId { get; set; } public string RecordingId { get; set; }
/// <summary>
/// Gets or sets the official rating.
/// </summary>
/// <value>The official rating.</value>
public string OfficialRating { get; set; }
/// <summary> /// <summary>
/// Gets or sets the name of the service. /// Gets or sets the name of the service.
@ -59,9 +65,38 @@ namespace MediaBrowser.Model.LiveTv
/// </summary> /// </summary>
public List<string> Genres { get; set; } public List<string> Genres { get; set; }
/// <summary>
/// Gets or sets the quality.
/// </summary>
/// <value>The quality.</value>
public ProgramVideoQuality Quality { get; set; }
/// <summary>
/// Gets or sets the audio.
/// </summary>
/// <value>The audio.</value>
public ProgramAudio Audio { get; set; }
/// <summary>
/// Gets or sets the original air date.
/// </summary>
/// <value>The original air date.</value>
public DateTime? OriginalAirDate { get; set; }
public ProgramInfoDto() public ProgramInfoDto()
{ {
Genres = new List<string>(); Genres = new List<string>();
} }
} }
public enum ProgramVideoQuality
{
StandardDefinition,
HighDefinition
}
public enum ProgramAudio
{
Stereo
}
} }

View File

@ -17,6 +17,12 @@
/// <value>The channel identifier.</value> /// <value>The channel identifier.</value>
public string[] ChannelIdList { get; set; } public string[] ChannelIdList { get; set; }
/// <summary>
/// Gets or sets the user identifier.
/// </summary>
/// <value>The user identifier.</value>
public string UserId { get; set; }
public ProgramQuery() public ProgramQuery()
{ {
ChannelIdList = new string[] { }; ChannelIdList = new string[] { };

View File

@ -55,5 +55,11 @@ namespace MediaBrowser.Model.LiveTv
/// IsRecurring recording? /// IsRecurring recording?
/// </summary> /// </summary>
public bool IsRecurring { get; set; } public bool IsRecurring { get; set; }
/// <summary>
/// Gets or sets the status.
/// </summary>
/// <value>The status.</value>
public RecordingStatus Status { get; set; }
} }
} }

View File

@ -0,0 +1,13 @@

namespace MediaBrowser.Model.LiveTv
{
public enum RecordingStatus
{
Pending,
InProgress,
Completed,
CompletedWithError,
Conflicted,
Deleted
}
}

View File

@ -65,6 +65,7 @@
<Compile Include="LiveTv\ProgramInfoDto.cs" /> <Compile Include="LiveTv\ProgramInfoDto.cs" />
<Compile Include="LiveTv\ProgramQuery.cs" /> <Compile Include="LiveTv\ProgramQuery.cs" />
<Compile Include="LiveTv\RecordingQuery.cs" /> <Compile Include="LiveTv\RecordingQuery.cs" />
<Compile Include="LiveTv\RecordingStatus.cs" />
<Compile Include="Providers\ImageProviderInfo.cs" /> <Compile Include="Providers\ImageProviderInfo.cs" />
<Compile Include="Providers\RemoteImageInfo.cs" /> <Compile Include="Providers\RemoteImageInfo.cs" />
<Compile Include="Dto\StudioDto.cs" /> <Compile Include="Dto\StudioDto.cs" />

View File

@ -2,7 +2,11 @@
using MediaBrowser.Common.IO; using MediaBrowser.Common.IO;
using MediaBrowser.Controller; using MediaBrowser.Controller;
using MediaBrowser.Controller.Drawing; using MediaBrowser.Controller.Drawing;
using MediaBrowser.Controller.Dto;
using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Library;
using MediaBrowser.Controller.LiveTv; using MediaBrowser.Controller.LiveTv;
using MediaBrowser.Controller.Localization;
using MediaBrowser.Controller.Persistence; using MediaBrowser.Controller.Persistence;
using MediaBrowser.Model.Entities; using MediaBrowser.Model.Entities;
using MediaBrowser.Model.LiveTv; using MediaBrowser.Model.LiveTv;
@ -28,6 +32,11 @@ namespace MediaBrowser.Server.Implementations.LiveTv
private readonly IItemRepository _itemRepo; private readonly IItemRepository _itemRepo;
private readonly IImageProcessor _imageProcessor; private readonly IImageProcessor _imageProcessor;
private readonly IUserManager _userManager;
private readonly ILocalizationManager _localization;
private readonly IUserDataManager _userDataManager;
private readonly IDtoService _dtoService;
private readonly List<ILiveTvService> _services = new List<ILiveTvService>(); private readonly List<ILiveTvService> _services = new List<ILiveTvService>();
private List<Channel> _channels = new List<Channel>(); private List<Channel> _channels = new List<Channel>();
@ -36,13 +45,17 @@ namespace MediaBrowser.Server.Implementations.LiveTv
private readonly SemaphoreSlim _updateSemaphore = new SemaphoreSlim(1, 1); private readonly SemaphoreSlim _updateSemaphore = new SemaphoreSlim(1, 1);
public LiveTvManager(IServerApplicationPaths appPaths, IFileSystem fileSystem, ILogger logger, IItemRepository itemRepo, IImageProcessor imageProcessor) public LiveTvManager(IServerApplicationPaths appPaths, IFileSystem fileSystem, ILogger logger, IItemRepository itemRepo, IImageProcessor imageProcessor, IUserManager userManager, ILocalizationManager localization, IUserDataManager userDataManager, IDtoService dtoService)
{ {
_appPaths = appPaths; _appPaths = appPaths;
_fileSystem = fileSystem; _fileSystem = fileSystem;
_logger = logger; _logger = logger;
_itemRepo = itemRepo; _itemRepo = itemRepo;
_imageProcessor = imageProcessor; _imageProcessor = imageProcessor;
_userManager = userManager;
_localization = localization;
_userDataManager = userDataManager;
_dtoService = dtoService;
} }
/// <summary> /// <summary>
@ -67,10 +80,11 @@ namespace MediaBrowser.Server.Implementations.LiveTv
/// Gets the channel info dto. /// Gets the channel info dto.
/// </summary> /// </summary>
/// <param name="info">The info.</param> /// <param name="info">The info.</param>
/// <param name="user">The user.</param>
/// <returns>ChannelInfoDto.</returns> /// <returns>ChannelInfoDto.</returns>
public ChannelInfoDto GetChannelInfoDto(Channel info) public ChannelInfoDto GetChannelInfoDto(Channel info, User user)
{ {
return new ChannelInfoDto var dto = new ChannelInfoDto
{ {
Name = info.Name, Name = info.Name,
ServiceName = info.ServiceName, ServiceName = info.ServiceName,
@ -81,6 +95,13 @@ namespace MediaBrowser.Server.Implementations.LiveTv
Id = info.Id.ToString("N"), Id = info.Id.ToString("N"),
MediaType = info.MediaType MediaType = info.MediaType
}; };
if (user != null)
{
dto.UserData = _dtoService.GetUserItemDataDto(_userDataManager.GetUserData(user.Id, info.GetUserDataKey()));
}
return dto;
} }
private ILiveTvService GetService(ChannelInfo channel) private ILiveTvService GetService(ChannelInfo channel)
@ -111,7 +132,28 @@ namespace MediaBrowser.Server.Implementations.LiveTv
public QueryResult<ChannelInfoDto> GetChannels(ChannelQuery query) public QueryResult<ChannelInfoDto> GetChannels(ChannelQuery query)
{ {
var channels = _channels.OrderBy(i => var user = string.IsNullOrEmpty(query.UserId) ? null : _userManager.GetUserById(new Guid(query.UserId));
IEnumerable<Channel> channels = _channels;
if (user != null)
{
channels = channels.Where(i => i.IsParentalAllowed(user, _localization))
.OrderBy(i =>
{
double number = 0;
if (!string.IsNullOrEmpty(i.ChannelNumber))
{
double.TryParse(i.ChannelNumber, out number);
}
return number;
});
}
var returnChannels = channels.OrderBy(i =>
{ {
double number = 0; double number = 0;
@ -123,13 +165,13 @@ namespace MediaBrowser.Server.Implementations.LiveTv
return number; return number;
}).ThenBy(i => i.Name) }).ThenBy(i => i.Name)
.Select(GetChannelInfoDto) .Select(i => GetChannelInfoDto(i, user))
.ToArray(); .ToArray();
return new QueryResult<ChannelInfoDto> return new QueryResult<ChannelInfoDto>
{ {
Items = channels, Items = returnChannels,
TotalRecordCount = channels.Length TotalRecordCount = returnChannels.Length
}; };
} }
@ -140,6 +182,15 @@ namespace MediaBrowser.Server.Implementations.LiveTv
return _channels.FirstOrDefault(i => i.Id == guid); return _channels.FirstOrDefault(i => i.Id == guid);
} }
public ChannelInfoDto GetChannelInfoDto(string id, string userId)
{
var channel = GetChannel(id);
var user = string.IsNullOrEmpty(userId) ? null : _userManager.GetUserById(new Guid(userId));
return channel == null ? null : GetChannelInfoDto(channel, user);
}
private ProgramInfoDto GetProgramInfoDto(ProgramInfo program, Channel channel) private ProgramInfoDto GetProgramInfoDto(ProgramInfo program, Channel channel)
{ {
var id = GetInternalProgramIdId(channel.ServiceName, program.Id).ToString("N"); var id = GetInternalProgramIdId(channel.ServiceName, program.Id).ToString("N");
@ -154,7 +205,11 @@ namespace MediaBrowser.Server.Implementations.LiveTv
Id = id, Id = id,
Name = program.Name, Name = program.Name,
ServiceName = channel.ServiceName, ServiceName = channel.ServiceName,
StartDate = program.StartDate StartDate = program.StartDate,
OfficialRating = program.OfficialRating,
Quality = program.Quality,
OriginalAirDate = program.OriginalAirDate,
Audio = program.Audio
}; };
} }
@ -367,7 +422,8 @@ namespace MediaBrowser.Server.Implementations.LiveTv
StartDate = info.StartDate, StartDate = info.StartDate,
Id = id, Id = id,
ExternalId = info.Id, ExternalId = info.Id,
ChannelId = GetInternalChannelId(service.Name, info.ChannelId).ToString("N") ChannelId = GetInternalChannelId(service.Name, info.ChannelId).ToString("N"),
Status = info.Status
}; };
if (!string.IsNullOrEmpty(info.ProgramId)) if (!string.IsNullOrEmpty(info.ProgramId))
@ -377,5 +433,16 @@ namespace MediaBrowser.Server.Implementations.LiveTv
return dto; return dto;
} }
public QueryResult<RecordingInfoDto> GetRecordings()
{
var returnArray = _recordings.ToArray();
return new QueryResult<RecordingInfoDto>
{
Items = returnArray,
TotalRecordCount = returnArray.Length
};
}
} }
} }

View File

@ -294,7 +294,7 @@ namespace MediaBrowser.ServerApplication
DtoService = new DtoService(Logger, LibraryManager, UserManager, UserDataManager, ItemRepository, ImageProcessor); DtoService = new DtoService(Logger, LibraryManager, UserManager, UserDataManager, ItemRepository, ImageProcessor);
RegisterSingleInstance(DtoService); RegisterSingleInstance(DtoService);
LiveTvManager = new LiveTvManager(ApplicationPaths, FileSystemManager, Logger, ItemRepository, ImageProcessor); LiveTvManager = new LiveTvManager(ApplicationPaths, FileSystemManager, Logger, ItemRepository, ImageProcessor, UserManager, LocalizationManager, UserDataManager, DtoService);
RegisterSingleInstance(LiveTvManager); RegisterSingleInstance(LiveTvManager);
var displayPreferencesTask = Task.Run(async () => await ConfigureDisplayPreferencesRepositories().ConfigureAwait(false)); var displayPreferencesTask = Task.Run(async () => await ConfigureDisplayPreferencesRepositories().ConfigureAwait(false));