diff --git a/MediaBrowser.Api/LiveTv/LiveTvService.cs b/MediaBrowser.Api/LiveTv/LiveTvService.cs index f3dcf57e03..fe21b9ada1 100644 --- a/MediaBrowser.Api/LiveTv/LiveTvService.cs +++ b/MediaBrowser.Api/LiveTv/LiveTvService.cs @@ -171,6 +171,9 @@ namespace MediaBrowser.Api.LiveTv [ApiMember(Name = "MinStartDate", Description = "Optional. The minimum premiere date. Format = ISO", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "GET,POST")] public string MinStartDate { get; set; } + [ApiMember(Name = "HasAired", Description = "Optional. Filter by programs that have completed airing, or not.", IsRequired = false, DataType = "bool", ParameterType = "query", Verb = "GET")] + public bool? HasAired { get; set; } + [ApiMember(Name = "MaxStartDate", Description = "Optional. The maximum premiere date. Format = ISO", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "GET,POST")] public string MaxStartDate { get; set; } @@ -369,7 +372,8 @@ namespace MediaBrowser.Api.LiveTv var query = new ProgramQuery { ChannelIdList = (request.ChannelIds ?? string.Empty).Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries).ToArray(), - UserId = request.UserId + UserId = request.UserId, + HasAired = request.HasAired }; if (!string.IsNullOrEmpty(request.MinStartDate)) diff --git a/MediaBrowser.Model/LiveTv/ProgramQuery.cs b/MediaBrowser.Model/LiveTv/ProgramQuery.cs index 36c06d4c08..2d15a4c4bd 100644 --- a/MediaBrowser.Model/LiveTv/ProgramQuery.cs +++ b/MediaBrowser.Model/LiveTv/ProgramQuery.cs @@ -26,7 +26,9 @@ namespace MediaBrowser.Model.LiveTv public DateTime? MinEndDate { get; set; } public DateTime? MaxEndDate { get; set; } - + + public bool? HasAired { get; set; } + public ProgramQuery() { ChannelIdList = new string[] { }; diff --git a/MediaBrowser.Model/MediaInfo/LiveMediaInfoResult.cs b/MediaBrowser.Model/MediaInfo/LiveMediaInfoResult.cs index afd5c890f4..4a206ea202 100644 --- a/MediaBrowser.Model/MediaInfo/LiveMediaInfoResult.cs +++ b/MediaBrowser.Model/MediaInfo/LiveMediaInfoResult.cs @@ -1,4 +1,5 @@ -using MediaBrowser.Model.Dto; +using MediaBrowser.Model.Dlna; +using MediaBrowser.Model.Dto; using System.Collections.Generic; namespace MediaBrowser.Model.MediaInfo @@ -17,6 +18,12 @@ namespace MediaBrowser.Model.MediaInfo /// The live stream identifier. public string LiveStreamId { get; set; } + /// + /// Gets or sets the error code. + /// + /// The error code. + public PlaybackErrorCode? ErrorCode { get; set; } + public LiveMediaInfoResult() { MediaSources = new List(); diff --git a/MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs b/MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs index be3926f4c1..337bba6a21 100644 --- a/MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs +++ b/MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs @@ -659,6 +659,12 @@ namespace MediaBrowser.Server.Implementations.LiveTv programs = programs.Where(i => i.StartDate <= val); } + if (query.HasAired.HasValue) + { + var val = query.HasAired.Value; + programs = programs.Where(i => i.HasAired == val); + } + if (query.ChannelIdList.Length > 0) { var guids = query.ChannelIdList.Select(i => new Guid(i)).ToList(); diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/javascript.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/javascript.json index 035cdf21c0..484578e31b 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/javascript.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/javascript.json @@ -36,8 +36,8 @@ "MessageKeyUpdated": "Thank you. Your supporter key has been updated.", "MessageKeyRemoved": "Thank you. Your supporter key has been removed.", "ErrorLaunchingChromecast": "There was an error launching chromecast. Please ensure your device is connected to your wireless network.", - "ValueTimeLimitSingleHour": "Time limit: 1 hour", - "ValueTimeLimitMultiHour": "Time limit: {0} hours", + "ValueTimeLimitSingleHour": "Time limit: 1 hour", + "ValueTimeLimitMultiHour": "Time limit: {0} hours", "HeaderSearch": "Search", "ValueDateCreated": "Date created: {0}", "LabelArtist": "Artist", @@ -97,6 +97,10 @@ "LabelVersionInstalled": "{0} installed", "LabelNumberReviews": "{0} Reviews", "LabelFree": "Free", + "HeaderPlaybackError": "Playback Error", + "MessagePlaybackErrorNotAllowed": "You're currently not authorized to play this content. Please contact your system administrator for details.", + "MessagePlaybackErrorNoCompatibleStream": "No compatible streams are currently available. Please try again later.", + "MessagePlaybackErrorRateLimitExceeded": "Your playback rate limit has been exceeded. Please contact your system administrator for details.", "HeaderSelectAudio": "Select Audio", "HeaderSelectSubtitles": "Select Subtitles", "ButtonMarkForRemoval": "Remove from device", diff --git a/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj b/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj index fe8185447f..4e2d66894a 100644 --- a/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj +++ b/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj @@ -304,8 +304,6 @@ - - diff --git a/MediaBrowser.Server.Implementations/Photos/DynamicImageProvider.cs b/MediaBrowser.Server.Implementations/Photos/DynamicImageProvider.cs index f93153c9c8..4e1330144e 100644 --- a/MediaBrowser.Server.Implementations/Photos/DynamicImageProvider.cs +++ b/MediaBrowser.Server.Implementations/Photos/DynamicImageProvider.cs @@ -13,13 +13,15 @@ using System.Threading.Tasks; namespace MediaBrowser.Server.Implementations.Photos { - public class MusicDynamicImageProvider : BaseDynamicImageProvider, ICustomMetadataProvider + public class DynamicImageProvider : BaseDynamicImageProvider, ICustomMetadataProvider { private readonly IUserManager _userManager; private readonly ILibraryManager _libraryManager; - public MusicDynamicImageProvider(IFileSystem fileSystem, IProviderManager providerManager, IApplicationPaths applicationPaths) : base(fileSystem, providerManager, applicationPaths) + public DynamicImageProvider(IFileSystem fileSystem, IProviderManager providerManager, IApplicationPaths applicationPaths, IUserManager userManager, ILibraryManager libraryManager) : base(fileSystem, providerManager, applicationPaths) { + _userManager = userManager; + _libraryManager = libraryManager; } protected override async Task> GetItemsWithImages(IHasImages item) diff --git a/MediaBrowser.Server.Implementations/Sync/FolderSync/FolderSyncDataProvider.cs b/MediaBrowser.Server.Implementations/Sync/FolderSync/FolderSyncDataProvider.cs deleted file mode 100644 index b9008d87e5..0000000000 --- a/MediaBrowser.Server.Implementations/Sync/FolderSync/FolderSyncDataProvider.cs +++ /dev/null @@ -1,31 +0,0 @@ -using MediaBrowser.Controller.Sync; -using MediaBrowser.Model.Sync; -using System; -using System.Collections.Generic; -using System.Threading.Tasks; - -namespace MediaBrowser.Server.Implementations.Sync.FolderSync -{ - public class FolderSyncDataProvider : ISyncDataProvider - { - public Task> GetServerItemIds(SyncTarget target, string serverId) - { - throw new NotImplementedException(); - } - - public Task AddOrUpdate(SyncTarget target, LocalItem item) - { - throw new NotImplementedException(); - } - - public Task Delete(SyncTarget target, string id) - { - throw new NotImplementedException(); - } - - public Task Get(SyncTarget target, string id) - { - throw new NotImplementedException(); - } - } -} diff --git a/MediaBrowser.Server.Implementations/Sync/FolderSync/FolderSyncProvider.cs b/MediaBrowser.Server.Implementations/Sync/FolderSync/FolderSyncProvider.cs deleted file mode 100644 index 3183816c8a..0000000000 --- a/MediaBrowser.Server.Implementations/Sync/FolderSync/FolderSyncProvider.cs +++ /dev/null @@ -1,143 +0,0 @@ -using MediaBrowser.Common.Configuration; -using MediaBrowser.Controller.Library; -using MediaBrowser.Controller.Sync; -using MediaBrowser.Model.Sync; -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; - -namespace MediaBrowser.Server.Implementations.Sync.FolderSync -{ - public class FolderSyncProvider : IServerSyncProvider - { - private readonly IApplicationPaths _appPaths; - private readonly IUserManager _userManager; - - public FolderSyncProvider(IApplicationPaths appPaths, IUserManager userManager) - { - _appPaths = appPaths; - _userManager = userManager; - } - - public Task SendFile(string inputFile, string path, SyncTarget target, IProgress progress, CancellationToken cancellationToken) - { - return Task.Run(() => File.Copy(inputFile, path, true), cancellationToken); - } - - public Task DeleteFile(string path, SyncTarget target, CancellationToken cancellationToken) - { - return Task.Run(() => File.Delete(path), cancellationToken); - } - - public Task GetFile(string path, SyncTarget target, IProgress progress, CancellationToken cancellationToken) - { - return Task.FromResult((Stream)File.OpenRead(path)); - } - - public string GetFullPath(IEnumerable paths, SyncTarget target) - { - var account = GetSyncAccounts() - .FirstOrDefault(i => string.Equals(i.Id, target.Id, StringComparison.OrdinalIgnoreCase)); - - if (account == null) - { - throw new ArgumentException("Invalid SyncTarget supplied."); - } - - var list = paths.ToList(); - list.Insert(0, account.Path); - - return Path.Combine(list.ToArray()); - } - - public string GetParentDirectoryPath(string path, SyncTarget target) - { - return Path.GetDirectoryName(path); - } - - public Task> GetFileSystemEntries(string path, SyncTarget target) - { - List files; - - try - { - files = new DirectoryInfo(path).EnumerateFiles("*", SearchOption.TopDirectoryOnly).ToList(); - } - catch (DirectoryNotFoundException) - { - files = new List(); - } - - return Task.FromResult(files.Select(i => new DeviceFileInfo - { - Name = i.Name, - Path = i.FullName - - }).ToList()); - } - - public ISyncDataProvider GetDataProvider() - { - // If single instances are needed, manage them here - return new FolderSyncDataProvider(); - } - - public string Name - { - get { return "Folder Sync"; } - } - - public IEnumerable GetSyncTargets(string userId) - { - return GetSyncAccounts() - .Where(i => i.UserIds.Contains(userId, StringComparer.OrdinalIgnoreCase)) - .Select(GetSyncTarget); - } - - public IEnumerable GetAllSyncTargets() - { - return GetSyncAccounts().Select(GetSyncTarget); - } - - private SyncTarget GetSyncTarget(SyncAccount account) - { - return new SyncTarget - { - Id = account.Id, - Name = account.Name - }; - } - - private IEnumerable GetSyncAccounts() - { - return new List(); - // Dummy this up - return _userManager - .Users - .Select(i => new SyncAccount - { - Id = i.Id.ToString("N"), - UserIds = new List { i.Id.ToString("N") }, - Path = Path.Combine(_appPaths.DataPath, "foldersync", i.Id.ToString("N")), - Name = i.Name + "'s Folder Sync" - }); - } - - // An internal class to manage all configured Folder Sync accounts for differnet users - class SyncAccount - { - public string Id { get; set; } - public string Name { get; set; } - public string Path { get; set; } - public List UserIds { get; set; } - - public SyncAccount() - { - UserIds = new List(); - } - } - } -} diff --git a/MediaBrowser.ServerApplication/MainStartup.cs b/MediaBrowser.ServerApplication/MainStartup.cs index 598ec1fd79..e77af1c6bb 100644 --- a/MediaBrowser.ServerApplication/MainStartup.cs +++ b/MediaBrowser.ServerApplication/MainStartup.cs @@ -1,5 +1,4 @@ -using ImageMagickSharp; -using MediaBrowser.Common.Implementations.Logging; +using MediaBrowser.Common.Implementations.Logging; using MediaBrowser.Model.Logging; using MediaBrowser.Server.Implementations; using MediaBrowser.Server.Startup.Common; diff --git a/MediaBrowser.ServerApplication/MediaBrowser.ServerApplication.csproj b/MediaBrowser.ServerApplication/MediaBrowser.ServerApplication.csproj index fb889e4f2f..53e34ceae3 100644 --- a/MediaBrowser.ServerApplication/MediaBrowser.ServerApplication.csproj +++ b/MediaBrowser.ServerApplication/MediaBrowser.ServerApplication.csproj @@ -455,9 +455,7 @@ MediaBrowser.XbmcMetadata - - - + diff --git a/Nuget/MediaBrowser.Common.Internal.nuspec b/Nuget/MediaBrowser.Common.Internal.nuspec index f83ddcbf12..94d843174e 100644 --- a/Nuget/MediaBrowser.Common.Internal.nuspec +++ b/Nuget/MediaBrowser.Common.Internal.nuspec @@ -2,7 +2,7 @@ MediaBrowser.Common.Internal - 3.0.580 + 3.0.581 MediaBrowser.Common.Internal Luke ebr,Luke,scottisafool @@ -12,7 +12,7 @@ Contains common components shared by Media Browser Theater and Media Browser Server. Not intended for plugin developer consumption. Copyright © Media Browser 2013 - + diff --git a/Nuget/MediaBrowser.Common.nuspec b/Nuget/MediaBrowser.Common.nuspec index 675b9aafc8..578cda06a2 100644 --- a/Nuget/MediaBrowser.Common.nuspec +++ b/Nuget/MediaBrowser.Common.nuspec @@ -2,7 +2,7 @@ MediaBrowser.Common - 3.0.580 + 3.0.581 MediaBrowser.Common Media Browser Team ebr,Luke,scottisafool diff --git a/Nuget/MediaBrowser.Model.Signed.nuspec b/Nuget/MediaBrowser.Model.Signed.nuspec index 892b64be98..ae5e261f90 100644 --- a/Nuget/MediaBrowser.Model.Signed.nuspec +++ b/Nuget/MediaBrowser.Model.Signed.nuspec @@ -2,7 +2,7 @@ MediaBrowser.Model.Signed - 3.0.580 + 3.0.581 MediaBrowser.Model - Signed Edition Media Browser Team ebr,Luke,scottisafool diff --git a/Nuget/MediaBrowser.Server.Core.nuspec b/Nuget/MediaBrowser.Server.Core.nuspec index 537313ec88..d3de0bb79c 100644 --- a/Nuget/MediaBrowser.Server.Core.nuspec +++ b/Nuget/MediaBrowser.Server.Core.nuspec @@ -2,7 +2,7 @@ MediaBrowser.Server.Core - 3.0.580 + 3.0.581 Media Browser.Server.Core Media Browser Team ebr,Luke,scottisafool @@ -12,7 +12,7 @@ Contains core components required to build plugins for Media Browser Server. Copyright © Media Browser 2013 - +