aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Server.Implementations/LiveTv/LiveTvDtoService.cs
diff options
context:
space:
mode:
Diffstat (limited to 'MediaBrowser.Server.Implementations/LiveTv/LiveTvDtoService.cs')
-rw-r--r--MediaBrowser.Server.Implementations/LiveTv/LiveTvDtoService.cs301
1 files changed, 226 insertions, 75 deletions
diff --git a/MediaBrowser.Server.Implementations/LiveTv/LiveTvDtoService.cs b/MediaBrowser.Server.Implementations/LiveTv/LiveTvDtoService.cs
index f93821cc9..6552c6892 100644
--- a/MediaBrowser.Server.Implementations/LiveTv/LiveTvDtoService.cs
+++ b/MediaBrowser.Server.Implementations/LiveTv/LiveTvDtoService.cs
@@ -8,6 +8,9 @@ using MediaBrowser.Model.Entities;
using MediaBrowser.Model.LiveTv;
using MediaBrowser.Model.Logging;
using System;
+using System.Collections.Generic;
+using System.Threading;
+using System.Threading.Tasks;
namespace MediaBrowser.Server.Implementations.LiveTv
{
@@ -27,108 +30,151 @@ namespace MediaBrowser.Server.Implementations.LiveTv
_logger = logger;
}
- public TimerInfoDto GetTimerInfoDto(TimerInfo info, ILiveTvService service)
+ public TimerInfoDto GetTimerInfoDto(TimerInfo info, ILiveTvService service, LiveTvProgram program, LiveTvChannel channel)
{
var dto = new TimerInfoDto
{
Id = GetInternalTimerId(service.Name, info.Id).ToString("N"),
- ChannelName = info.ChannelName,
Overview = info.Overview,
EndDate = info.EndDate,
Name = info.Name,
StartDate = info.StartDate,
ExternalId = info.Id,
- ChannelId = GetInternalChannelId(service.Name, info.ChannelId, info.ChannelName).ToString("N"),
+ ChannelId = GetInternalChannelId(service.Name, info.ChannelId).ToString("N"),
Status = info.Status,
SeriesTimerId = string.IsNullOrEmpty(info.SeriesTimerId) ? null : GetInternalSeriesTimerId(service.Name, info.SeriesTimerId).ToString("N"),
- RequestedPostPaddingSeconds = info.RequestedPostPaddingSeconds,
- RequestedPrePaddingSeconds = info.RequestedPrePaddingSeconds,
- RequiredPostPaddingSeconds = info.RequiredPostPaddingSeconds,
- RequiredPrePaddingSeconds = info.RequiredPrePaddingSeconds,
+ PrePaddingSeconds = info.PrePaddingSeconds,
+ PostPaddingSeconds = info.PostPaddingSeconds,
+ IsPostPaddingRequired = info.IsPostPaddingRequired,
+ IsPrePaddingRequired = info.IsPrePaddingRequired,
ExternalChannelId = info.ChannelId,
- ExternalSeriesTimerId = info.SeriesTimerId
+ ExternalSeriesTimerId = info.SeriesTimerId,
+ ServiceName = service.Name,
+ ExternalProgramId = info.ProgramId,
+ Priority = info.Priority,
+ RunTimeTicks = (info.EndDate - info.StartDate).Ticks
};
- var duration = info.EndDate - info.StartDate;
- dto.DurationMs = Convert.ToInt32(duration.TotalMilliseconds);
-
if (!string.IsNullOrEmpty(info.ProgramId))
{
dto.ProgramId = GetInternalProgramId(service.Name, info.ProgramId).ToString("N");
}
+ if (program != null)
+ {
+ dto.ProgramInfo = GetProgramInfoDto(program, channel.ChannelInfo.Name);
+
+ dto.ProgramInfo.TimerId = dto.Id;
+ dto.ProgramInfo.SeriesTimerId = dto.SeriesTimerId;
+ }
+
+ if (channel != null)
+ {
+ dto.ChannelName = channel.ChannelInfo.Name;
+ }
+
return dto;
}
- public SeriesTimerInfoDto GetSeriesTimerInfoDto(SeriesTimerInfo info, ILiveTvService service)
+ public SeriesTimerInfoDto GetSeriesTimerInfoDto(SeriesTimerInfo info, ILiveTvService service, string channelName)
{
var dto = new SeriesTimerInfoDto
{
Id = GetInternalSeriesTimerId(service.Name, info.Id).ToString("N"),
- ChannelName = info.ChannelName,
Overview = info.Overview,
EndDate = info.EndDate,
Name = info.Name,
StartDate = info.StartDate,
ExternalId = info.Id,
- ChannelId = GetInternalChannelId(service.Name, info.ChannelId, info.ChannelName).ToString("N"),
- RequestedPostPaddingSeconds = info.RequestedPostPaddingSeconds,
- RequestedPrePaddingSeconds = info.RequestedPrePaddingSeconds,
- RequiredPostPaddingSeconds = info.RequiredPostPaddingSeconds,
- RequiredPrePaddingSeconds = info.RequiredPrePaddingSeconds,
+ PrePaddingSeconds = info.PrePaddingSeconds,
+ PostPaddingSeconds = info.PostPaddingSeconds,
+ IsPostPaddingRequired = info.IsPostPaddingRequired,
+ IsPrePaddingRequired = info.IsPrePaddingRequired,
Days = info.Days,
Priority = info.Priority,
- RecurrenceType = info.RecurrenceType,
+ RecordAnyChannel = info.RecordAnyChannel,
+ RecordAnyTime = info.RecordAnyTime,
+ RecordNewOnly = info.RecordNewOnly,
ExternalChannelId = info.ChannelId,
- ExternalProgramId = info.ProgramId
+ ExternalProgramId = info.ProgramId,
+ ServiceName = service.Name,
+ ChannelName = channelName
};
+ if (!string.IsNullOrEmpty(info.ChannelId))
+ {
+ dto.ChannelId = GetInternalChannelId(service.Name, info.ChannelId).ToString("N");
+ }
+
if (!string.IsNullOrEmpty(info.ProgramId))
{
dto.ProgramId = GetInternalProgramId(service.Name, info.ProgramId).ToString("N");
}
+ dto.DayPattern = info.Days == null ? null : GetDayPattern(info.Days);
+
+ return dto;
+ }
+
+ public DayPattern? GetDayPattern(List<DayOfWeek> days)
+ {
DayPattern? pattern = null;
- if (info.Days != null && info.Days.Count > 0)
+ if (days.Count > 0)
{
- if (info.Days.Count == 7)
+ if (days.Count == 7)
{
pattern = DayPattern.Daily;
}
- else if (info.Days.Count == 2)
+ else if (days.Count == 2)
{
- if (info.Days.Contains(DayOfWeek.Saturday) && info.Days.Contains(DayOfWeek.Sunday))
+ if (days.Contains(DayOfWeek.Saturday) && days.Contains(DayOfWeek.Sunday))
{
pattern = DayPattern.Weekends;
}
}
- else if (info.Days.Count == 5)
+ else if (days.Count == 5)
{
- if (info.Days.Contains(DayOfWeek.Monday) && info.Days.Contains(DayOfWeek.Tuesday) && info.Days.Contains(DayOfWeek.Wednesday) && info.Days.Contains(DayOfWeek.Thursday) && info.Days.Contains(DayOfWeek.Friday))
+ if (days.Contains(DayOfWeek.Monday) && days.Contains(DayOfWeek.Tuesday) && days.Contains(DayOfWeek.Wednesday) && days.Contains(DayOfWeek.Thursday) && days.Contains(DayOfWeek.Friday))
{
pattern = DayPattern.Weekdays;
}
}
}
- dto.DayPattern = pattern;
+ return pattern;
+ }
- return dto;
+ /// <summary>
+ /// Convert the provider 0-5 scale to our 0-10 scale
+ /// </summary>
+ /// <param name="val"></param>
+ /// <returns></returns>
+ private float? GetClientCommunityRating(float? val)
+ {
+ if (!val.HasValue)
+ {
+ return null;
+ }
+
+ return val.Value * 2;
}
- public RecordingInfoDto GetRecordingInfoDto(RecordingInfo info, ILiveTvService service, User user = null)
+ public RecordingInfoDto GetRecordingInfoDto(LiveTvRecording recording, LiveTvChannel channel, ILiveTvService service, User user = null)
{
+ var info = recording.RecordingInfo;
+
var dto = new RecordingInfoDto
{
Id = GetInternalRecordingId(service.Name, info.Id).ToString("N"),
- ChannelName = info.ChannelName,
+ SeriesTimerId = string.IsNullOrEmpty(info.SeriesTimerId) ? null : GetInternalSeriesTimerId(service.Name, info.SeriesTimerId).ToString("N"),
+ Type = recording.GetClientTypeName(),
Overview = info.Overview,
EndDate = info.EndDate,
Name = info.Name,
StartDate = info.StartDate,
ExternalId = info.Id,
- ChannelId = GetInternalChannelId(service.Name, info.ChannelId, info.ChannelName).ToString("N"),
+ ChannelId = GetInternalChannelId(service.Name, info.ChannelId).ToString("N"),
Status = info.Status,
Path = info.Path,
Genres = info.Genres,
@@ -136,25 +182,44 @@ namespace MediaBrowser.Server.Implementations.LiveTv
EpisodeTitle = info.EpisodeTitle,
ChannelType = info.ChannelType,
MediaType = info.ChannelType == ChannelType.Radio ? MediaType.Audio : MediaType.Video,
- CommunityRating = info.CommunityRating,
+ CommunityRating = GetClientCommunityRating(info.CommunityRating),
OfficialRating = info.OfficialRating,
Audio = info.Audio,
- IsHD = info.IsHD
+ IsHD = info.IsHD,
+ ServiceName = service.Name,
+ Url = info.Url,
+ IsMovie = info.IsMovie,
+ IsSeries = info.IsSeries,
+ IsSports = info.IsSports,
+ IsLive = info.IsLive,
+ IsNews = info.IsNews,
+ IsKids = info.IsKids,
+ IsPremiere = info.IsPremiere,
+ RunTimeTicks = (info.EndDate - info.StartDate).Ticks
};
- if (user != null)
+ var imageTag = GetImageTag(recording);
+
+ if (imageTag.HasValue)
{
- //dto.UserData = _dtoService.GetUserItemDataDto(_userDataManager.GetUserData(user.Id, info.GetUserDataKey()));
+ dto.ImageTags[ImageType.Primary] = imageTag.Value;
}
- var duration = info.EndDate - info.StartDate;
- dto.DurationMs = Convert.ToInt32(duration.TotalMilliseconds);
+ if (user != null)
+ {
+ dto.UserData = _dtoService.GetUserItemDataDto(_userDataManager.GetUserData(user.Id, recording.GetUserDataKey()));
+ }
if (!string.IsNullOrEmpty(info.ProgramId))
{
dto.ProgramId = GetInternalProgramId(service.Name, info.ProgramId).ToString("N");
}
+ if (channel != null)
+ {
+ dto.ChannelName = channel.ChannelInfo.Name;
+ }
+
return dto;
}
@@ -164,17 +229,20 @@ namespace MediaBrowser.Server.Implementations.LiveTv
/// <param name="info">The info.</param>
/// <param name="user">The user.</param>
/// <returns>ChannelInfoDto.</returns>
- public ChannelInfoDto GetChannelInfoDto(Channel info, User user = null)
+ public ChannelInfoDto GetChannelInfoDto(LiveTvChannel info, User user = null)
{
+ var channelInfo = info.ChannelInfo;
+
var dto = new ChannelInfoDto
{
Name = info.Name,
ServiceName = info.ServiceName,
- ChannelType = info.ChannelType,
- Number = info.ChannelNumber,
- Type = info.GetType().Name,
+ ChannelType = channelInfo.ChannelType,
+ Number = channelInfo.Number,
+ Type = info.GetClientTypeName(),
Id = info.Id.ToString("N"),
- MediaType = info.MediaType
+ MediaType = info.MediaType,
+ ExternalId = channelInfo.Id
};
if (user != null)
@@ -182,7 +250,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv
dto.UserData = _dtoService.GetUserItemDataDto(_userDataManager.GetUserData(user.Id, info.GetUserDataKey()));
}
- var imageTag = GetLogoImageTag(info);
+ var imageTag = GetImageTag(info);
if (imageTag.HasValue)
{
@@ -192,38 +260,49 @@ namespace MediaBrowser.Server.Implementations.LiveTv
return dto;
}
- public ProgramInfoDto GetProgramInfoDto(ProgramInfo program, Channel channel, User user = null)
+ public ProgramInfoDto GetProgramInfoDto(LiveTvProgram item, string channelName, User user = null)
{
+ var program = item.ProgramInfo;
+
var dto = new ProgramInfoDto
{
- Id = GetInternalProgramId(channel.ServiceName, program.Id).ToString("N"),
- ChannelId = channel.Id.ToString("N"),
+ Id = GetInternalProgramId(item.ServiceName, program.Id).ToString("N"),
+ ChannelId = GetInternalChannelId(item.ServiceName, program.ChannelId).ToString("N"),
Overview = program.Overview,
EndDate = program.EndDate,
Genres = program.Genres,
ExternalId = program.Id,
Name = program.Name,
- ServiceName = channel.ServiceName,
+ ServiceName = item.ServiceName,
StartDate = program.StartDate,
OfficialRating = program.OfficialRating,
IsHD = program.IsHD,
OriginalAirDate = program.OriginalAirDate,
Audio = program.Audio,
- CommunityRating = program.CommunityRating,
+ CommunityRating = GetClientCommunityRating(program.CommunityRating),
AspectRatio = program.AspectRatio,
IsRepeat = program.IsRepeat,
- EpisodeTitle = program.EpisodeTitle
+ EpisodeTitle = program.EpisodeTitle,
+ ChannelName = channelName,
+ IsMovie = program.IsMovie,
+ IsSeries = program.IsSeries,
+ IsSports = program.IsSports,
+ IsLive = program.IsLive,
+ IsNews = program.IsNews,
+ IsKids = program.IsKids,
+ IsPremiere = program.IsPremiere,
+ RunTimeTicks = (program.EndDate - program.StartDate).Ticks
};
if (user != null)
{
- //dto.UserData = _dtoService.GetUserItemDataDto(_userDataManager.GetUserData(user.Id, info.GetUserDataKey()));
+ dto.UserData = _dtoService.GetUserItemDataDto(_userDataManager.GetUserData(user.Id, item.GetUserDataKey()));
}
return dto;
}
- private Guid? GetLogoImageTag(Channel info)
+ private Guid? GetImageTag(BaseItem info)
{
var path = info.PrimaryImagePath;
@@ -238,17 +317,17 @@ namespace MediaBrowser.Server.Implementations.LiveTv
}
catch (Exception ex)
{
- _logger.ErrorException("Error getting channel image info for {0}", ex, info.Name);
+ _logger.ErrorException("Error getting image info for {0}", ex, info.Name);
}
return null;
}
- public Guid GetInternalChannelId(string serviceName, string externalId, string channelName)
+ public Guid GetInternalChannelId(string serviceName, string externalId)
{
- var name = serviceName + externalId + channelName;
+ var name = serviceName + externalId;
- return name.ToLower().GetMBId(typeof(Channel));
+ return name.ToLower().GetMBId(typeof(LiveTvChannel));
}
public Guid GetInternalTimerId(string serviceName, string externalId)
@@ -279,46 +358,118 @@ namespace MediaBrowser.Server.Implementations.LiveTv
return name.ToLower().GetMD5();
}
- public TimerInfo GetTimerInfo(TimerInfoDto dto)
+ public async Task<TimerInfo> GetTimerInfo(TimerInfoDto dto, bool isNew, ILiveTvManager liveTv, CancellationToken cancellationToken)
{
- return new TimerInfo
+ var info = new TimerInfo
{
- Id = dto.ExternalId,
- ChannelName = dto.ChannelName,
Overview = dto.Overview,
EndDate = dto.EndDate,
Name = dto.Name,
StartDate = dto.StartDate,
- ChannelId = dto.ExternalChannelId,
Status = dto.Status,
+ PrePaddingSeconds = dto.PrePaddingSeconds,
+ PostPaddingSeconds = dto.PostPaddingSeconds,
+ IsPostPaddingRequired = dto.IsPostPaddingRequired,
+ IsPrePaddingRequired = dto.IsPrePaddingRequired,
+ Priority = dto.Priority,
SeriesTimerId = dto.ExternalSeriesTimerId,
- RequestedPostPaddingSeconds = dto.RequestedPostPaddingSeconds,
- RequestedPrePaddingSeconds = dto.RequestedPrePaddingSeconds,
- RequiredPostPaddingSeconds = dto.RequiredPostPaddingSeconds,
- RequiredPrePaddingSeconds = dto.RequiredPrePaddingSeconds
+ ProgramId = dto.ExternalProgramId,
+ ChannelId = dto.ExternalChannelId,
+ Id = dto.ExternalId
};
+
+ // Convert internal server id's to external tv provider id's
+ if (!isNew && !string.IsNullOrEmpty(dto.Id) && string.IsNullOrEmpty(info.Id))
+ {
+ var timer = await liveTv.GetSeriesTimer(dto.Id, cancellationToken).ConfigureAwait(false);
+
+ info.Id = timer.ExternalId;
+ }
+
+ if (!string.IsNullOrEmpty(dto.ChannelId) && string.IsNullOrEmpty(info.ChannelId))
+ {
+ var channel = await liveTv.GetChannel(dto.ChannelId, cancellationToken).ConfigureAwait(false);
+
+ if (channel != null)
+ {
+ info.ChannelId = channel.ExternalId;
+ }
+ }
+
+ if (!string.IsNullOrEmpty(dto.ProgramId) && string.IsNullOrEmpty(info.ProgramId))
+ {
+ var program = await liveTv.GetProgram(dto.ProgramId, cancellationToken).ConfigureAwait(false);
+
+ if (program != null)
+ {
+ info.ProgramId = program.ExternalId;
+ }
+ }
+
+ if (!string.IsNullOrEmpty(dto.SeriesTimerId) && string.IsNullOrEmpty(info.SeriesTimerId))
+ {
+ var timer = await liveTv.GetSeriesTimer(dto.SeriesTimerId, cancellationToken).ConfigureAwait(false);
+
+ if (timer != null)
+ {
+ info.SeriesTimerId = timer.ExternalId;
+ }
+ }
+
+ return info;
}
- public SeriesTimerInfo GetSeriesTimerInfo(SeriesTimerInfoDto dto)
+ public async Task<SeriesTimerInfo> GetSeriesTimerInfo(SeriesTimerInfoDto dto, bool isNew, ILiveTvManager liveTv, CancellationToken cancellationToken)
{
- return new SeriesTimerInfo
+ var info = new SeriesTimerInfo
{
- Id = dto.ExternalId,
- ChannelName = dto.ChannelName,
Overview = dto.Overview,
EndDate = dto.EndDate,
Name = dto.Name,
StartDate = dto.StartDate,
- ChannelId = dto.ExternalChannelId,
- RequestedPostPaddingSeconds = dto.RequestedPostPaddingSeconds,
- RequestedPrePaddingSeconds = dto.RequestedPrePaddingSeconds,
- RequiredPostPaddingSeconds = dto.RequiredPostPaddingSeconds,
- RequiredPrePaddingSeconds = dto.RequiredPrePaddingSeconds,
+ PrePaddingSeconds = dto.PrePaddingSeconds,
+ PostPaddingSeconds = dto.PostPaddingSeconds,
+ IsPostPaddingRequired = dto.IsPostPaddingRequired,
+ IsPrePaddingRequired = dto.IsPrePaddingRequired,
Days = dto.Days,
Priority = dto.Priority,
- RecurrenceType = dto.RecurrenceType,
- ProgramId = dto.ExternalProgramId
+ RecordAnyChannel = dto.RecordAnyChannel,
+ RecordAnyTime = dto.RecordAnyTime,
+ RecordNewOnly = dto.RecordNewOnly,
+ ProgramId = dto.ExternalProgramId,
+ ChannelId = dto.ExternalChannelId,
+ Id = dto.ExternalId
};
+
+ // Convert internal server id's to external tv provider id's
+ if (!isNew && !string.IsNullOrEmpty(dto.Id) && string.IsNullOrEmpty(info.Id))
+ {
+ var timer = await liveTv.GetSeriesTimer(dto.Id, cancellationToken).ConfigureAwait(false);
+
+ info.Id = timer.ExternalId;
+ }
+
+ if (!string.IsNullOrEmpty(dto.ChannelId) && string.IsNullOrEmpty(info.ChannelId))
+ {
+ var channel = await liveTv.GetChannel(dto.ChannelId, cancellationToken).ConfigureAwait(false);
+
+ if (channel != null)
+ {
+ info.ChannelId = channel.ExternalId;
+ }
+ }
+
+ if (!string.IsNullOrEmpty(dto.ProgramId) && string.IsNullOrEmpty(info.ProgramId))
+ {
+ var program = await liveTv.GetProgram(dto.ProgramId, cancellationToken).ConfigureAwait(false);
+
+ if (program != null)
+ {
+ info.ProgramId = program.ExternalId;
+ }
+ }
+
+ return info;
}
}
}