aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs
diff options
context:
space:
mode:
authorLuke Pulverenti <luke.pulverenti@gmail.com>2013-12-19 16:51:32 -0500
committerLuke Pulverenti <luke.pulverenti@gmail.com>2013-12-19 16:51:32 -0500
commitcd859ac2e6d499ce2cdf531058e64a4c3402910f (patch)
treee453d21e99ef2d6aee7f5e4af668a69147b31dfd /MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs
parente1e5d354345008e8d4ddc2dbbb99a68df4133280 (diff)
added IHasImages and IHasUserData
Diffstat (limited to 'MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs')
-rw-r--r--MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs114
1 files changed, 85 insertions, 29 deletions
diff --git a/MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs b/MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs
index 06ed4e2009..06e6fbe159 100644
--- a/MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs
+++ b/MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs
@@ -36,7 +36,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv
private readonly List<ILiveTvService> _services = new List<ILiveTvService>();
- private List<Channel> _channels = new List<Channel>();
+ private List<LiveTvChannel> _channels = new List<LiveTvChannel>();
private List<ProgramInfoDto> _programs = new List<ProgramInfoDto>();
public LiveTvManager(IServerApplicationPaths appPaths, IFileSystem fileSystem, ILogger logger, IItemRepository itemRepo, IImageProcessor imageProcessor, ILocalizationManager localization, IUserDataManager userDataManager, IDtoService dtoService, IUserManager userManager)
@@ -77,18 +77,19 @@ namespace MediaBrowser.Server.Implementations.LiveTv
{
var user = string.IsNullOrEmpty(query.UserId) ? null : _userManager.GetUserById(new Guid(query.UserId));
- IEnumerable<Channel> channels = _channels;
+ IEnumerable<LiveTvChannel> channels = _channels;
if (user != null)
{
- channels = channels.Where(i => i.IsParentalAllowed(user, _localization))
+ channels = channels
+ .Where(i => i.IsParentalAllowed(user, _localization))
.OrderBy(i =>
{
double number = 0;
- if (!string.IsNullOrEmpty(i.ChannelNumber))
+ if (!string.IsNullOrEmpty(i.ChannelInfo.Number))
{
- double.TryParse(i.ChannelNumber, out number);
+ double.TryParse(i.ChannelInfo.Number, out number);
}
return number;
@@ -100,9 +101,9 @@ namespace MediaBrowser.Server.Implementations.LiveTv
{
double number = 0;
- if (!string.IsNullOrEmpty(i.ChannelNumber))
+ if (!string.IsNullOrEmpty(i.ChannelInfo.Number))
{
- double.TryParse(i.ChannelNumber, out number);
+ double.TryParse(i.ChannelInfo.Number, out number);
}
return number;
@@ -120,14 +121,25 @@ namespace MediaBrowser.Server.Implementations.LiveTv
return Task.FromResult(result);
}
- public Channel GetChannel(string id)
+ public LiveTvChannel GetInternalChannel(string id)
{
var guid = new Guid(id);
return _channels.FirstOrDefault(i => i.Id == guid);
}
- private async Task<Channel> GetChannel(ChannelInfo channelInfo, string serviceName, CancellationToken cancellationToken)
+ public async Task<LiveTvRecording> GetInternalRecording(string id, CancellationToken cancellationToken)
+ {
+ var service = ActiveService;
+
+ var recordings = await service.GetRecordingsAsync(cancellationToken).ConfigureAwait(false);
+
+ var recording = recordings.FirstOrDefault(i => _tvDtoService.GetInternalRecordingId(service.Name, i.Id) == new Guid(id));
+
+ return await GetRecording(recording, service.Name, cancellationToken).ConfigureAwait(false);
+ }
+
+ private async Task<LiveTvChannel> GetChannel(ChannelInfo channelInfo, string serviceName, CancellationToken cancellationToken)
{
var path = Path.Combine(_appPaths.ItemsByNamePath, "channels", _fileSystem.GetValidFilename(serviceName), _fileSystem.GetValidFilename(channelInfo.Name));
@@ -150,26 +162,25 @@ namespace MediaBrowser.Server.Implementations.LiveTv
var id = _tvDtoService.GetInternalChannelId(serviceName, channelInfo.Id, channelInfo.Name);
- var item = _itemRepo.RetrieveItem(id) as Channel;
+ var item = _itemRepo.RetrieveItem(id) as LiveTvChannel;
if (item == null)
{
- item = new Channel
+ item = new LiveTvChannel
{
Name = channelInfo.Name,
Id = id,
DateCreated = _fileSystem.GetCreationTimeUtc(fileInfo),
DateModified = _fileSystem.GetLastWriteTimeUtc(fileInfo),
- Path = path,
- ChannelId = channelInfo.Id,
- ChannelNumber = channelInfo.Number,
- ServiceName = serviceName,
- HasProviderImage = channelInfo.HasImage
+ Path = path
};
isNew = true;
}
+ item.ChannelInfo = channelInfo;
+ item.ServiceName = serviceName;
+
// Set this now so we don't cause additional file system access during provider executions
item.ResetResolveArgs(fileInfo);
@@ -178,6 +189,35 @@ namespace MediaBrowser.Server.Implementations.LiveTv
return item;
}
+ private async Task<LiveTvRecording> GetRecording(RecordingInfo info, string serviceName, CancellationToken cancellationToken)
+ {
+ var isNew = false;
+
+ var id = _tvDtoService.GetInternalRecordingId(serviceName, info.Id);
+
+ var item = _itemRepo.RetrieveItem(id) as LiveTvRecording;
+
+ if (item == null)
+ {
+ item = new LiveTvRecording
+ {
+ Name = info.Name,
+ Id = id,
+ DateCreated = DateTime.UtcNow,
+ DateModified = DateTime.UtcNow
+ };
+
+ isNew = true;
+ }
+
+ item.RecordingInfo = info;
+ item.ServiceName = serviceName;
+
+ await item.RefreshMetadata(cancellationToken, forceSave: isNew, resetResolveArgs: false);
+
+ return item;
+ }
+
public Task<ProgramInfoDto> GetProgram(string id, CancellationToken cancellationToken, User user = null)
{
var program = _programs.FirstOrDefault(i => string.Equals(i.Id, id, StringComparison.OrdinalIgnoreCase));
@@ -225,7 +265,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv
var allChannels = await GetChannels(service, cancellationToken).ConfigureAwait(false);
var allChannelsList = allChannels.ToList();
- var list = new List<Channel>();
+ var list = new List<LiveTvChannel>();
var programs = new List<ProgramInfoDto>();
var numComplete = 0;
@@ -271,26 +311,34 @@ namespace MediaBrowser.Server.Implementations.LiveTv
public async Task<QueryResult<RecordingInfoDto>> GetRecordings(RecordingQuery query, CancellationToken cancellationToken)
{
- var user = string.IsNullOrEmpty(query.UserId) ? null : _userManager.GetUserById(new Guid(query.UserId));
+ var service = ActiveService;
- var list = new List<RecordingInfoDto>();
+ var user = string.IsNullOrEmpty(query.UserId) ? null : _userManager.GetUserById(new Guid(query.UserId));
- if (ActiveService != null)
- {
- var recordings = await ActiveService.GetRecordingsAsync(cancellationToken).ConfigureAwait(false);
+ var list = new List<RecordingInfo>();
- var dtos = recordings.Select(i => _tvDtoService.GetRecordingInfoDto(i, ActiveService, user));
+ var recordings = await service.GetRecordingsAsync(cancellationToken).ConfigureAwait(false);
+ list.AddRange(recordings);
- list.AddRange(dtos);
+ if (!string.IsNullOrEmpty(query.ChannelId))
+ {
+ list = list
+ .Where(i => _tvDtoService.GetInternalChannelId(service.Name, i.ChannelId, i.ChannelName) == new Guid(query.ChannelId))
+ .ToList();
}
- if (!string.IsNullOrEmpty(query.ChannelId))
+ if (!string.IsNullOrEmpty(query.Id))
{
- list = list.Where(i => string.Equals(i.ChannelId, query.ChannelId))
+ list = list
+ .Where(i => _tvDtoService.GetInternalRecordingId(service.Name, i.Id) == new Guid(query.Id))
.ToList();
}
- var returnArray = list.OrderByDescending(i => i.StartDate)
+ var entities = await GetEntities(list, service.Name, cancellationToken).ConfigureAwait(false);
+
+ var returnArray = entities
+ .Select(i => _tvDtoService.GetRecordingInfoDto(i, ActiveService, user))
+ .OrderByDescending(i => i.StartDate)
.ToArray();
return new QueryResult<RecordingInfoDto>
@@ -300,6 +348,13 @@ namespace MediaBrowser.Server.Implementations.LiveTv
};
}
+ private Task<LiveTvRecording[]> GetEntities(IEnumerable<RecordingInfo> recordings, string serviceName, CancellationToken cancellationToken)
+ {
+ var tasks = recordings.Select(i => GetRecording(i, serviceName, cancellationToken));
+
+ return Task.WhenAll(tasks);
+ }
+
private IEnumerable<ILiveTvService> GetServices(string serviceName, string channelId)
{
IEnumerable<ILiveTvService> services = _services;
@@ -404,11 +459,12 @@ namespace MediaBrowser.Server.Implementations.LiveTv
{
var results = await GetRecordings(new RecordingQuery
{
- UserId = user == null ? null : user.Id.ToString("N")
+ UserId = user == null ? null : user.Id.ToString("N"),
+ Id = id
}, cancellationToken).ConfigureAwait(false);
- return results.Items.FirstOrDefault(i => string.Equals(i.Id, id, StringComparison.CurrentCulture));
+ return results.Items.FirstOrDefault();
}
public async Task<TimerInfoDto> GetTimer(string id, CancellationToken cancellationToken)