aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--MediaBrowser.Api/LiveTv/LiveTvService.cs17
-rw-r--r--MediaBrowser.Controller/LiveTv/ILiveTvManager.cs10
-rw-r--r--MediaBrowser.Controller/LiveTv/ILiveTvService.cs9
-rw-r--r--MediaBrowser.Controller/LiveTv/ProgramInfo.cs18
-rw-r--r--MediaBrowser.Controller/LiveTv/SeriesTimerInfo.cs24
-rw-r--r--MediaBrowser.Controller/LiveTv/TimerInfo.cs26
-rw-r--r--MediaBrowser.Controller/MediaInfo/FFMpegManager.cs50
-rw-r--r--MediaBrowser.Model/Configuration/ServerConfiguration.cs8
-rw-r--r--MediaBrowser.Model/LiveTv/ProgramInfoDto.cs18
-rw-r--r--MediaBrowser.Model/LiveTv/SeriesTimerInfoDto.cs24
-rw-r--r--MediaBrowser.Model/LiveTv/TimerInfoDto.cs26
-rw-r--r--MediaBrowser.Providers/Music/AlbumInfoFromSongProvider.cs1
-rw-r--r--MediaBrowser.Providers/Music/LastfmHelper.cs16
-rw-r--r--MediaBrowser.Server.Implementations/LiveTv/LiveTvDtoService.cs67
-rw-r--r--MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs42
-rw-r--r--MediaBrowser.WebDashboard/ApiClient.js6
-rw-r--r--MediaBrowser.WebDashboard/packages.config2
-rw-r--r--Nuget/MediaBrowser.Common.Internal.nuspec4
-rw-r--r--Nuget/MediaBrowser.Common.nuspec2
-rw-r--r--Nuget/MediaBrowser.Server.Core.nuspec4
20 files changed, 262 insertions, 112 deletions
diff --git a/MediaBrowser.Api/LiveTv/LiveTvService.cs b/MediaBrowser.Api/LiveTv/LiveTvService.cs
index e7b348eb7..80c9313e5 100644
--- a/MediaBrowser.Api/LiveTv/LiveTvService.cs
+++ b/MediaBrowser.Api/LiveTv/LiveTvService.cs
@@ -75,8 +75,10 @@ namespace MediaBrowser.Api.LiveTv
[Route("/LiveTv/Timers/Defaults", "GET")]
[Api(Description = "Gets default values for a new timer")]
- public class GetDefaultTimer : IReturn<TimerInfoDto>
+ public class GetDefaultTimer : IReturn<SeriesTimerInfoDto>
{
+ [ApiMember(Name = "ProgramId", Description = "Optional, to attach default values based on a program.", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "GET")]
+ public string ProgramId { get; set; }
}
[Route("/LiveTv/Timers", "GET")]
@@ -326,9 +328,18 @@ namespace MediaBrowser.Api.LiveTv
public object Get(GetDefaultTimer request)
{
- var result = _liveTvManager.GetNewTimerDefaults(CancellationToken.None).Result;
+ if (string.IsNullOrEmpty(request.ProgramId))
+ {
+ var result = _liveTvManager.GetNewTimerDefaults(CancellationToken.None).Result;
- return ToOptimizedResult(result);
+ return ToOptimizedResult(result);
+ }
+ else
+ {
+ var result = _liveTvManager.GetNewTimerDefaults(request.ProgramId, CancellationToken.None).Result;
+
+ return ToOptimizedResult(result);
+ }
}
public object Get(GetProgram request)
diff --git a/MediaBrowser.Controller/LiveTv/ILiveTvManager.cs b/MediaBrowser.Controller/LiveTv/ILiveTvManager.cs
index 10dfc0843..8e711d28c 100644
--- a/MediaBrowser.Controller/LiveTv/ILiveTvManager.cs
+++ b/MediaBrowser.Controller/LiveTv/ILiveTvManager.cs
@@ -36,7 +36,15 @@ namespace MediaBrowser.Controller.LiveTv
/// </summary>
/// <param name="cancellationToken">The cancellation token.</param>
/// <returns>Task{TimerInfo}.</returns>
- Task<TimerInfoDto> GetNewTimerDefaults(CancellationToken cancellationToken);
+ Task<SeriesTimerInfoDto> GetNewTimerDefaults(CancellationToken cancellationToken);
+
+ /// <summary>
+ /// Gets the new timer defaults.
+ /// </summary>
+ /// <param name="programId">The program identifier.</param>
+ /// <param name="cancellationToken">The cancellation token.</param>
+ /// <returns>Task{SeriesTimerInfoDto}.</returns>
+ Task<SeriesTimerInfoDto> GetNewTimerDefaults(string programId, CancellationToken cancellationToken);
/// <summary>
/// Deletes the recording.
diff --git a/MediaBrowser.Controller/LiveTv/ILiveTvService.cs b/MediaBrowser.Controller/LiveTv/ILiveTvService.cs
index b88cadf23..2cd768a93 100644
--- a/MediaBrowser.Controller/LiveTv/ILiveTvService.cs
+++ b/MediaBrowser.Controller/LiveTv/ILiveTvService.cs
@@ -89,18 +89,19 @@ namespace MediaBrowser.Controller.LiveTv
/// <summary>
/// Gets the recording image asynchronous.
/// </summary>
- /// <param name="channelId">The channel identifier.</param>
+ /// <param name="recordingId">The recording identifier.</param>
/// <param name="cancellationToken">The cancellation token.</param>
/// <returns>Task{ImageResponseInfo}.</returns>
- Task<ImageResponseInfo> GetRecordingImageAsync(string channelId, CancellationToken cancellationToken);
+ Task<ImageResponseInfo> GetRecordingImageAsync(string recordingId, CancellationToken cancellationToken);
/// <summary>
/// Gets the program image asynchronous.
/// </summary>
+ /// <param name="programId">The program identifier.</param>
/// <param name="channelId">The channel identifier.</param>
/// <param name="cancellationToken">The cancellation token.</param>
/// <returns>Task{ImageResponseInfo}.</returns>
- Task<ImageResponseInfo> GetProgramImageAsync(string channelId, CancellationToken cancellationToken);
+ Task<ImageResponseInfo> GetProgramImageAsync(string programId, string channelId, CancellationToken cancellationToken);
/// <summary>
/// Gets the recordings asynchronous.
@@ -121,7 +122,7 @@ namespace MediaBrowser.Controller.LiveTv
/// </summary>
/// <param name="cancellationToken">The cancellation token.</param>
/// <returns>Task{TimerInfo}.</returns>
- Task<TimerInfo> GetNewTimerDefaultsAsync(CancellationToken cancellationToken);
+ Task<SeriesTimerInfo> GetNewTimerDefaultsAsync(CancellationToken cancellationToken);
/// <summary>
/// Gets the series timers asynchronous.
diff --git a/MediaBrowser.Controller/LiveTv/ProgramInfo.cs b/MediaBrowser.Controller/LiveTv/ProgramInfo.cs
index 5cf8fb721..15b55f50e 100644
--- a/MediaBrowser.Controller/LiveTv/ProgramInfo.cs
+++ b/MediaBrowser.Controller/LiveTv/ProgramInfo.cs
@@ -102,6 +102,24 @@ namespace MediaBrowser.Controller.LiveTv
/// Leave it null if the only way to determine is by requesting the image and handling the failure.
/// </summary>
public bool? HasImage { get; set; }
+
+ /// <summary>
+ /// Gets or sets a value indicating whether this instance is movie.
+ /// </summary>
+ /// <value><c>true</c> if this instance is movie; otherwise, <c>false</c>.</value>
+ public bool IsMovie { get; set; }
+
+ /// <summary>
+ /// Gets or sets a value indicating whether this instance is sports.
+ /// </summary>
+ /// <value><c>true</c> if this instance is sports; otherwise, <c>false</c>.</value>
+ public bool IsSports { get; set; }
+
+ /// <summary>
+ /// Gets or sets a value indicating whether this instance is series.
+ /// </summary>
+ /// <value><c>true</c> if this instance is series; otherwise, <c>false</c>.</value>
+ public bool IsSeries { get; set; }
public ProgramInfo()
{
diff --git a/MediaBrowser.Controller/LiveTv/SeriesTimerInfo.cs b/MediaBrowser.Controller/LiveTv/SeriesTimerInfo.cs
index b92ec4a43..6801cd7f9 100644
--- a/MediaBrowser.Controller/LiveTv/SeriesTimerInfo.cs
+++ b/MediaBrowser.Controller/LiveTv/SeriesTimerInfo.cs
@@ -78,28 +78,28 @@ namespace MediaBrowser.Controller.LiveTv
public int Priority { get; set; }
/// <summary>
- /// Gets or sets the requested pre padding seconds.
+ /// Gets or sets the pre padding seconds.
/// </summary>
- /// <value>The requested pre padding seconds.</value>
- public int RequestedPrePaddingSeconds { get; set; }
+ /// <value>The pre padding seconds.</value>
+ public int PrePaddingSeconds { get; set; }
/// <summary>
- /// Gets or sets the requested post padding seconds.
+ /// Gets or sets the post padding seconds.
/// </summary>
- /// <value>The requested post padding seconds.</value>
- public int RequestedPostPaddingSeconds { get; set; }
+ /// <value>The post padding seconds.</value>
+ public int PostPaddingSeconds { get; set; }
/// <summary>
- /// Gets or sets the required pre padding seconds.
+ /// Gets or sets a value indicating whether this instance is pre padding required.
/// </summary>
- /// <value>The required pre padding seconds.</value>
- public int RequiredPrePaddingSeconds { get; set; }
+ /// <value><c>true</c> if this instance is pre padding required; otherwise, <c>false</c>.</value>
+ public bool IsPrePaddingRequired { get; set; }
/// <summary>
- /// Gets or sets the required post padding seconds.
+ /// Gets or sets a value indicating whether this instance is post padding required.
/// </summary>
- /// <value>The required post padding seconds.</value>
- public int RequiredPostPaddingSeconds { get; set; }
+ /// <value><c>true</c> if this instance is post padding required; otherwise, <c>false</c>.</value>
+ public bool IsPostPaddingRequired { get; set; }
public SeriesTimerInfo()
{
diff --git a/MediaBrowser.Controller/LiveTv/TimerInfo.cs b/MediaBrowser.Controller/LiveTv/TimerInfo.cs
index d5928959b..499b217b5 100644
--- a/MediaBrowser.Controller/LiveTv/TimerInfo.cs
+++ b/MediaBrowser.Controller/LiveTv/TimerInfo.cs
@@ -59,29 +59,29 @@ namespace MediaBrowser.Controller.LiveTv
public RecordingStatus Status { get; set; }
/// <summary>
- /// Gets or sets the requested pre padding seconds.
+ /// Gets or sets the pre padding seconds.
/// </summary>
- /// <value>The requested pre padding seconds.</value>
- public int RequestedPrePaddingSeconds { get; set; }
+ /// <value>The pre padding seconds.</value>
+ public int PrePaddingSeconds { get; set; }
/// <summary>
- /// Gets or sets the requested post padding seconds.
+ /// Gets or sets the post padding seconds.
/// </summary>
- /// <value>The requested post padding seconds.</value>
- public int RequestedPostPaddingSeconds { get; set; }
+ /// <value>The post padding seconds.</value>
+ public int PostPaddingSeconds { get; set; }
/// <summary>
- /// Gets or sets the required pre padding seconds.
+ /// Gets or sets a value indicating whether this instance is pre padding required.
/// </summary>
- /// <value>The required pre padding seconds.</value>
- public int RequiredPrePaddingSeconds { get; set; }
+ /// <value><c>true</c> if this instance is pre padding required; otherwise, <c>false</c>.</value>
+ public bool IsPrePaddingRequired { get; set; }
/// <summary>
- /// Gets or sets the required post padding seconds.
+ /// Gets or sets a value indicating whether this instance is post padding required.
/// </summary>
- /// <value>The required post padding seconds.</value>
- public int RequiredPostPaddingSeconds { get; set; }
-
+ /// <value><c>true</c> if this instance is post padding required; otherwise, <c>false</c>.</value>
+ public bool IsPostPaddingRequired { get; set; }
+
/// <summary>
/// Gets or sets the priority.
/// </summary>
diff --git a/MediaBrowser.Controller/MediaInfo/FFMpegManager.cs b/MediaBrowser.Controller/MediaInfo/FFMpegManager.cs
index 380a96387..e4f4e8bbb 100644
--- a/MediaBrowser.Controller/MediaInfo/FFMpegManager.cs
+++ b/MediaBrowser.Controller/MediaInfo/FFMpegManager.cs
@@ -1,7 +1,10 @@
using MediaBrowser.Common.Extensions;
using MediaBrowser.Common.IO;
using MediaBrowser.Common.MediaInfo;
+using MediaBrowser.Controller.Configuration;
using MediaBrowser.Controller.Entities;
+using MediaBrowser.Controller.Entities.Movies;
+using MediaBrowser.Controller.Entities.TV;
using MediaBrowser.Controller.Persistence;
using MediaBrowser.Model.Entities;
using MediaBrowser.Model.Logging;
@@ -20,7 +23,7 @@ namespace MediaBrowser.Controller.MediaInfo
/// </summary>
public class FFMpegManager
{
- private readonly IServerApplicationPaths _appPaths;
+ private readonly IServerConfigurationManager _config;
private readonly IMediaEncoder _encoder;
private readonly ILogger _logger;
private readonly IItemRepository _itemRepo;
@@ -32,18 +35,17 @@ namespace MediaBrowser.Controller.MediaInfo
/// <summary>
/// Initializes a new instance of the <see cref="FFMpegManager" /> class.
/// </summary>
- /// <param name="appPaths">The app paths.</param>
/// <param name="encoder">The encoder.</param>
/// <param name="logger">The logger.</param>
/// <param name="itemRepo">The item repo.</param>
/// <exception cref="System.ArgumentNullException">zipClient</exception>
- public FFMpegManager(IServerApplicationPaths appPaths, IMediaEncoder encoder, ILogger logger, IItemRepository itemRepo, IFileSystem fileSystem)
+ public FFMpegManager(IMediaEncoder encoder, ILogger logger, IItemRepository itemRepo, IFileSystem fileSystem, IServerConfigurationManager config)
{
- _appPaths = appPaths;
_encoder = encoder;
_logger = logger;
_itemRepo = itemRepo;
_fileSystem = fileSystem;
+ _config = config;
// TODO: Remove this static instance
Instance = this;
@@ -57,7 +59,7 @@ namespace MediaBrowser.Controller.MediaInfo
{
get
{
- return Path.Combine(_appPaths.DataPath, "chapter-images");
+ return Path.Combine(_config.ApplicationPaths.DataPath, "chapter-images");
}
}
@@ -69,11 +71,44 @@ namespace MediaBrowser.Controller.MediaInfo
{
get
{
- return Path.Combine(_appPaths.CachePath, "subtitles");
+ return Path.Combine(_config.ApplicationPaths.CachePath, "subtitles");
}
}
/// <summary>
+ /// Determines whether [is eligible for chapter image extraction] [the specified video].
+ /// </summary>
+ /// <param name="video">The video.</param>
+ /// <returns><c>true</c> if [is eligible for chapter image extraction] [the specified video]; otherwise, <c>false</c>.</returns>
+ private bool IsEligibleForChapterImageExtraction(Video video)
+ {
+ if (video is Movie)
+ {
+ if (!_config.Configuration.EnableMovieChapterImageExtraction)
+ {
+ return false;
+ }
+ }
+ else if (video is Episode)
+ {
+ if (!_config.Configuration.EnableEpisodeChapterImageExtraction)
+ {
+ return false;
+ }
+ }
+ else
+ {
+ if (!_config.Configuration.EnableOtherVideoChapterImageExtraction)
+ {
+ return false;
+ }
+ }
+
+ // Can't extract images if there are no video streams
+ return video.DefaultVideoStreamIndex.HasValue;
+ }
+
+ /// <summary>
/// The first chapter ticks
/// </summary>
private static readonly long FirstChapterTicks = TimeSpan.FromSeconds(15).Ticks;
@@ -90,8 +125,7 @@ namespace MediaBrowser.Controller.MediaInfo
/// <exception cref="System.ArgumentNullException"></exception>
public async Task<bool> PopulateChapterImages(Video video, List<ChapterInfo> chapters, bool extractImages, bool saveChapters, CancellationToken cancellationToken)
{
- // Can't extract images if there are no video streams
- if (!video.DefaultVideoStreamIndex.HasValue)
+ if (!IsEligibleForChapterImageExtraction(video))
{
return true;
}
diff --git a/MediaBrowser.Model/Configuration/ServerConfiguration.cs b/MediaBrowser.Model/Configuration/ServerConfiguration.cs
index 14231f3ad..62688cdc4 100644
--- a/MediaBrowser.Model/Configuration/ServerConfiguration.cs
+++ b/MediaBrowser.Model/Configuration/ServerConfiguration.cs
@@ -234,6 +234,10 @@ namespace MediaBrowser.Model.Configuration
/// <value>The encoding quality.</value>
public EncodingQuality EncodingQuality { get; set; }
+ public bool EnableMovieChapterImageExtraction { get; set; }
+ public bool EnableEpisodeChapterImageExtraction { get; set; }
+ public bool EnableOtherVideoChapterImageExtraction { get; set; }
+
/// <summary>
/// Initializes a new instance of the <see cref="ServerConfiguration" /> class.
/// </summary>
@@ -247,6 +251,10 @@ namespace MediaBrowser.Model.Configuration
EnableDashboardResponseCaching = true;
EnableVideoImageExtraction = true;
+ EnableMovieChapterImageExtraction = true;
+ EnableEpisodeChapterImageExtraction = true;
+ EnableOtherVideoChapterImageExtraction = true;
+
#if (DEBUG)
EnableDeveloperTools = true;
#endif
diff --git a/MediaBrowser.Model/LiveTv/ProgramInfoDto.cs b/MediaBrowser.Model/LiveTv/ProgramInfoDto.cs
index 4febb2961..0c4eb28c5 100644
--- a/MediaBrowser.Model/LiveTv/ProgramInfoDto.cs
+++ b/MediaBrowser.Model/LiveTv/ProgramInfoDto.cs
@@ -114,6 +114,24 @@ namespace MediaBrowser.Model.LiveTv
/// <value>The user data.</value>
public UserItemDataDto UserData { get; set; }
+ /// <summary>
+ /// Gets or sets a value indicating whether this instance is movie.
+ /// </summary>
+ /// <value><c>true</c> if this instance is movie; otherwise, <c>false</c>.</value>
+ public bool IsMovie { get; set; }
+
+ /// <summary>
+ /// Gets or sets a value indicating whether this instance is sports.
+ /// </summary>
+ /// <value><c>true</c> if this instance is sports; otherwise, <c>false</c>.</value>
+ public bool IsSports { get; set; }
+
+ /// <summary>
+ /// Gets or sets a value indicating whether this instance is series.
+ /// </summary>
+ /// <value><c>true</c> if this instance is series; otherwise, <c>false</c>.</value>
+ public bool IsSeries { get; set; }
+
public ProgramInfoDto()
{
Genres = new List<string>();
diff --git a/MediaBrowser.Model/LiveTv/SeriesTimerInfoDto.cs b/MediaBrowser.Model/LiveTv/SeriesTimerInfoDto.cs
index fd61b8722..a8c6a2e37 100644
--- a/MediaBrowser.Model/LiveTv/SeriesTimerInfoDto.cs
+++ b/MediaBrowser.Model/LiveTv/SeriesTimerInfoDto.cs
@@ -107,28 +107,28 @@ namespace MediaBrowser.Model.LiveTv
public int Priority { get; set; }
/// <summary>
- /// Gets or sets the requested pre padding seconds.
+ /// Gets or sets the pre padding seconds.
/// </summary>
- /// <value>The requested pre padding seconds.</value>
- public int RequestedPrePaddingSeconds { get; set; }
+ /// <value>The pre padding seconds.</value>
+ public int PrePaddingSeconds { get; set; }
/// <summary>
- /// Gets or sets the requested post padding seconds.
+ /// Gets or sets the post padding seconds.
/// </summary>
- /// <value>The requested post padding seconds.</value>
- public int RequestedPostPaddingSeconds { get; set; }
+ /// <value>The post padding seconds.</value>
+ public int PostPaddingSeconds { get; set; }
/// <summary>
- /// Gets or sets the required pre padding seconds.
+ /// Gets or sets a value indicating whether this instance is pre padding required.
/// </summary>
- /// <value>The required pre padding seconds.</value>
- public int RequiredPrePaddingSeconds { get; set; }
+ /// <value><c>true</c> if this instance is pre padding required; otherwise, <c>false</c>.</value>
+ public bool IsPrePaddingRequired { get; set; }
/// <summary>
- /// Gets or sets the required post padding seconds.
+ /// Gets or sets a value indicating whether this instance is post padding required.
/// </summary>
- /// <value>The required post padding seconds.</value>
- public int RequiredPostPaddingSeconds { get; set; }
+ /// <value><c>true</c> if this instance is post padding required; otherwise, <c>false</c>.</value>
+ public bool IsPostPaddingRequired { get; set; }
public SeriesTimerInfoDto()
{
diff --git a/MediaBrowser.Model/LiveTv/TimerInfoDto.cs b/MediaBrowser.Model/LiveTv/TimerInfoDto.cs
index f6db58c05..fc7306a62 100644
--- a/MediaBrowser.Model/LiveTv/TimerInfoDto.cs
+++ b/MediaBrowser.Model/LiveTv/TimerInfoDto.cs
@@ -86,30 +86,30 @@ namespace MediaBrowser.Model.LiveTv
/// </summary>
/// <value>The external series timer identifier.</value>
public string ExternalSeriesTimerId { get; set; }
-
+
/// <summary>
- /// Gets or sets the requested pre padding seconds.
+ /// Gets or sets the pre padding seconds.
/// </summary>
- /// <value>The requested pre padding seconds.</value>
- public int RequestedPrePaddingSeconds { get; set; }
+ /// <value>The pre padding seconds.</value>
+ public int PrePaddingSeconds { get; set; }
/// <summary>
- /// Gets or sets the requested post padding seconds.
+ /// Gets or sets the post padding seconds.
/// </summary>
- /// <value>The requested post padding seconds.</value>
- public int RequestedPostPaddingSeconds { get; set; }
+ /// <value>The post padding seconds.</value>
+ public int PostPaddingSeconds { get; set; }
/// <summary>
- /// Gets or sets the required pre padding seconds.
+ /// Gets or sets a value indicating whether this instance is pre padding required.
/// </summary>
- /// <value>The required pre padding seconds.</value>
- public int RequiredPrePaddingSeconds { get; set; }
+ /// <value><c>true</c> if this instance is pre padding required; otherwise, <c>false</c>.</value>
+ public bool IsPrePaddingRequired { get; set; }
/// <summary>
- /// Gets or sets the required post padding seconds.
+ /// Gets or sets a value indicating whether this instance is post padding required.
/// </summary>
- /// <value>The required post padding seconds.</value>
- public int RequiredPostPaddingSeconds { get; set; }
+ /// <value><c>true</c> if this instance is post padding required; otherwise, <c>false</c>.</value>
+ public bool IsPostPaddingRequired { get; set; }
/// <summary>
/// Gets or sets the duration ms.
diff --git a/MediaBrowser.Providers/Music/AlbumInfoFromSongProvider.cs b/MediaBrowser.Providers/Music/AlbumInfoFromSongProvider.cs
index c4b4af97f..47799b8f3 100644
--- a/MediaBrowser.Providers/Music/AlbumInfoFromSongProvider.cs
+++ b/MediaBrowser.Providers/Music/AlbumInfoFromSongProvider.cs
@@ -140,7 +140,6 @@ namespace MediaBrowser.Providers.Music
}
}
-
providerInfo.FileStamp = GetComparisonData(songs);
SetLastRefreshed(item, DateTime.UtcNow, providerInfo);
diff --git a/MediaBrowser.Providers/Music/LastfmHelper.cs b/MediaBrowser.Providers/Music/LastfmHelper.cs
index 3301d5584..df02cee5b 100644
--- a/MediaBrowser.Providers/Music/LastfmHelper.cs
+++ b/MediaBrowser.Providers/Music/LastfmHelper.cs
@@ -81,16 +81,20 @@ namespace MediaBrowser.Providers.Music
}
// Only grab the date here if the album doesn't already have one, since id3 tags are preferred
- if (!item.PremiereDate.HasValue)
- {
- DateTime release;
+ DateTime release;
- if (DateTime.TryParse(data.releasedate, out release))
+ if (DateTime.TryParse(data.releasedate, out release))
+ {
+ // Lastfm sends back null as sometimes 1901, other times 0
+ if (release.Year > 1901)
{
- // Lastfm sends back null as sometimes 1901, other times 0
- if (release.Year > 1901)
+ if (!item.PremiereDate.HasValue)
{
item.PremiereDate = release;
+ }
+
+ if (!item.ProductionYear.HasValue)
+ {
item.ProductionYear = release.Year;
}
}
diff --git a/MediaBrowser.Server.Implementations/LiveTv/LiveTvDtoService.cs b/MediaBrowser.Server.Implementations/LiveTv/LiveTvDtoService.cs
index ea8523887..a58722c32 100644
--- a/MediaBrowser.Server.Implementations/LiveTv/LiveTvDtoService.cs
+++ b/MediaBrowser.Server.Implementations/LiveTv/LiveTvDtoService.cs
@@ -1,6 +1,4 @@
-using System.Threading;
-using System.Threading.Tasks;
-using MediaBrowser.Common.Extensions;
+using MediaBrowser.Common.Extensions;
using MediaBrowser.Controller.Drawing;
using MediaBrowser.Controller.Dto;
using MediaBrowser.Controller.Entities;
@@ -10,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
{
@@ -43,10 +44,10 @@ namespace MediaBrowser.Server.Implementations.LiveTv
ChannelId = GetInternalChannelId(service.Name, info.ChannelId, info.ChannelName).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,
ServiceName = service.Name,
@@ -76,10 +77,10 @@ namespace MediaBrowser.Server.Implementations.LiveTv
Name = info.Name,
StartDate = info.StartDate,
ExternalId = info.Id,
- 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,
RecordAnyChannel = info.RecordAnyChannel,
@@ -100,33 +101,38 @@ namespace MediaBrowser.Server.Implementations.LiveTv
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 dto;
+ return pattern;
}
public RecordingInfoDto GetRecordingInfoDto(RecordingInfo info, ILiveTvService service, User user = null)
@@ -228,7 +234,10 @@ namespace MediaBrowser.Server.Implementations.LiveTv
AspectRatio = program.AspectRatio,
IsRepeat = program.IsRepeat,
EpisodeTitle = program.EpisodeTitle,
- ChannelName = program.ChannelName
+ ChannelName = program.ChannelName,
+ IsMovie = program.IsMovie,
+ IsSeries = program.IsSeries,
+ IsSports = program.IsSports
};
if (user != null)
@@ -306,10 +315,10 @@ namespace MediaBrowser.Server.Implementations.LiveTv
StartDate = dto.StartDate,
Status = dto.Status,
SeriesTimerId = dto.ExternalSeriesTimerId,
- RequestedPostPaddingSeconds = dto.RequestedPostPaddingSeconds,
- RequestedPrePaddingSeconds = dto.RequestedPrePaddingSeconds,
- RequiredPostPaddingSeconds = dto.RequiredPostPaddingSeconds,
- RequiredPrePaddingSeconds = dto.RequiredPrePaddingSeconds,
+ PrePaddingSeconds = dto.PrePaddingSeconds,
+ PostPaddingSeconds = dto.PostPaddingSeconds,
+ IsPostPaddingRequired = dto.IsPostPaddingRequired,
+ IsPrePaddingRequired = dto.IsPrePaddingRequired,
Priority = dto.Priority
};
@@ -354,10 +363,10 @@ namespace MediaBrowser.Server.Implementations.LiveTv
EndDate = dto.EndDate,
Name = dto.Name,
StartDate = dto.StartDate,
- 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,
RecordAnyChannel = dto.RecordAnyChannel,
diff --git a/MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs b/MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs
index b9dfc1b48..06ed4e200 100644
--- a/MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs
+++ b/MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs
@@ -459,11 +459,41 @@ namespace MediaBrowser.Server.Implementations.LiveTv
return results.Items.FirstOrDefault(i => string.Equals(i.Id, id, StringComparison.CurrentCulture));
}
- public async Task<TimerInfoDto> GetNewTimerDefaults(CancellationToken cancellationToken)
+ public async Task<SeriesTimerInfoDto> GetNewTimerDefaults(CancellationToken cancellationToken)
{
var info = await ActiveService.GetNewTimerDefaultsAsync(cancellationToken).ConfigureAwait(false);
- return _tvDtoService.GetTimerInfoDto(info, ActiveService);
+ var obj = _tvDtoService.GetSeriesTimerInfoDto(info, ActiveService);
+
+ obj.Id = obj.ExternalId = string.Empty;
+
+ return obj;
+ }
+
+ public async Task<SeriesTimerInfoDto> GetNewTimerDefaults(string programId, CancellationToken cancellationToken)
+ {
+ var info = await GetNewTimerDefaults(cancellationToken).ConfigureAwait(false);
+
+ var program = await GetProgram(programId, cancellationToken).ConfigureAwait(false);
+
+ info.Days = new List<DayOfWeek>
+ {
+ program.StartDate.ToLocalTime().DayOfWeek
+ };
+
+ info.DayPattern = _tvDtoService.GetDayPattern(info.Days);
+
+ info.Name = program.Name;
+ info.ChannelId = program.ChannelId;
+ info.ChannelName = program.ChannelName;
+ info.EndDate = program.EndDate;
+ info.StartDate = program.StartDate;
+ info.Name = program.Name;
+ info.Overview = program.Overview;
+ info.ProgramId = program.Id;
+ info.ExternalProgramId = program.ExternalId;
+
+ return info;
}
public async Task CreateTimer(TimerInfoDto timer, CancellationToken cancellationToken)
@@ -472,6 +502,10 @@ namespace MediaBrowser.Server.Implementations.LiveTv
var info = await _tvDtoService.GetTimerInfo(timer, true, this, cancellationToken).ConfigureAwait(false);
+ // Set priority from default values
+ var defaultValues = await service.GetNewTimerDefaultsAsync(cancellationToken).ConfigureAwait(false);
+ info.Priority = defaultValues.Priority;
+
await service.CreateTimerAsync(info, cancellationToken).ConfigureAwait(false);
}
@@ -481,6 +515,10 @@ namespace MediaBrowser.Server.Implementations.LiveTv
var info = await _tvDtoService.GetSeriesTimerInfo(timer, true, this, cancellationToken).ConfigureAwait(false);
+ // Set priority from default values
+ var defaultValues = await service.GetNewTimerDefaultsAsync(cancellationToken).ConfigureAwait(false);
+ info.Priority = defaultValues.Priority;
+
await service.CreateSeriesTimerAsync(info, cancellationToken).ConfigureAwait(false);
}
diff --git a/MediaBrowser.WebDashboard/ApiClient.js b/MediaBrowser.WebDashboard/ApiClient.js
index a42c27949..e260a0a05 100644
--- a/MediaBrowser.WebDashboard/ApiClient.js
+++ b/MediaBrowser.WebDashboard/ApiClient.js
@@ -545,9 +545,11 @@ MediaBrowser.ApiClient = function ($, navigator, JSON, WebSocket, setTimeout, wi
});
};
- self.getNewLiveTvTimerDefaults = function () {
+ self.getNewLiveTvTimerDefaults = function (options) {
- var url = self.getUrl("LiveTv/Timers/Defaults");
+ options = options || {};
+
+ var url = self.getUrl("LiveTv/Timers/Defaults", options);
return self.ajax({
type: "GET",
diff --git a/MediaBrowser.WebDashboard/packages.config b/MediaBrowser.WebDashboard/packages.config
index 12f78c773..659c5db1e 100644
--- a/MediaBrowser.WebDashboard/packages.config
+++ b/MediaBrowser.WebDashboard/packages.config
@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
- <package id="MediaBrowser.ApiClient.Javascript" version="3.0.209" targetFramework="net45" />
+ <package id="MediaBrowser.ApiClient.Javascript" version="3.0.210" targetFramework="net45" />
</packages> \ No newline at end of file
diff --git a/Nuget/MediaBrowser.Common.Internal.nuspec b/Nuget/MediaBrowser.Common.Internal.nuspec
index ef156a2bf..563d08caa 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.276</version>
+ <version>3.0.278</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.276" />
+ <dependency id="MediaBrowser.Common" version="3.0.278" />
<dependency id="NLog" version="2.1.0" />
<dependency id="SimpleInjector" version="2.4.0" />
<dependency id="sharpcompress" version="0.10.2" />
diff --git a/Nuget/MediaBrowser.Common.nuspec b/Nuget/MediaBrowser.Common.nuspec
index 58ab61425..10889c801 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.276</version>
+ <version>3.0.278</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 b94e77552..96e9241ab 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.276</version>
+ <version>3.0.278</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.276" />
+ <dependency id="MediaBrowser.Common" version="3.0.278" />
</dependencies>
</metadata>
<files>