From 2ceea17bf424cf1ac8608b79e57f1c0ac1c65e42 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Fri, 21 Feb 2014 00:35:56 -0500 Subject: [PATCH] rework EnableMediaPlayback --- .../Playback/BaseStreamingService.cs | 11 ++++++----- MediaBrowser.Controller/Entities/BaseItem.cs | 16 ++++++++++++++++ .../MediaBrowser.Model.Portable.csproj | 3 +++ .../MediaBrowser.Model.net35.csproj | 3 +++ MediaBrowser.Model/Dto/BaseItemDto.cs | 13 +++++++++++++ MediaBrowser.Model/Dto/RecordingInfoDto.cs | 12 ------------ MediaBrowser.Model/Library/PlayAccess.cs | 9 +++++++++ MediaBrowser.Model/MediaBrowser.Model.csproj | 1 + .../Dto/DtoService.cs | 3 ++- .../Session/SessionManager.cs | 11 ++++++----- 10 files changed, 59 insertions(+), 23 deletions(-) delete mode 100644 MediaBrowser.Model/Dto/RecordingInfoDto.cs create mode 100644 MediaBrowser.Model/Library/PlayAccess.cs diff --git a/MediaBrowser.Api/Playback/BaseStreamingService.cs b/MediaBrowser.Api/Playback/BaseStreamingService.cs index da3f9be17c..5b32210786 100644 --- a/MediaBrowser.Api/Playback/BaseStreamingService.cs +++ b/MediaBrowser.Api/Playback/BaseStreamingService.cs @@ -12,6 +12,7 @@ using MediaBrowser.Model.Drawing; using MediaBrowser.Model.Dto; using MediaBrowser.Model.Entities; using MediaBrowser.Model.IO; +using MediaBrowser.Model.Library; using MediaBrowser.Model.LiveTv; using System; using System.Collections.Generic; @@ -1268,11 +1269,6 @@ namespace MediaBrowser.Api.Playback var user = AuthorizationRequestFilterAttribute.GetCurrentUser(Request, UserManager); - if (user != null && !user.Configuration.EnableMediaPlayback) - { - throw new ArgumentException(string.Format("{0} is not allowed to play media.", user.Name)); - } - var url = Request.PathInfo; if (!request.AudioCodec.HasValue) @@ -1288,6 +1284,11 @@ namespace MediaBrowser.Api.Playback var item = DtoService.GetItemByDtoId(request.Id); + if (user != null && item.GetPlayAccess(user) != PlayAccess.Full) + { + throw new ArgumentException(string.Format("{0} is not allowed to play media.", user.Name)); + } + if (item is ILiveTvRecording) { var recording = await LiveTvManager.GetInternalRecording(request.Id, cancellationToken).ConfigureAwait(false); diff --git a/MediaBrowser.Controller/Entities/BaseItem.cs b/MediaBrowser.Controller/Entities/BaseItem.cs index cf79148f64..483ed1c341 100644 --- a/MediaBrowser.Controller/Entities/BaseItem.cs +++ b/MediaBrowser.Controller/Entities/BaseItem.cs @@ -7,6 +7,7 @@ using MediaBrowser.Controller.Persistence; using MediaBrowser.Controller.Providers; using MediaBrowser.Model.Configuration; using MediaBrowser.Model.Entities; +using MediaBrowser.Model.Library; using MediaBrowser.Model.Logging; using System; using System.Collections.Generic; @@ -478,6 +479,21 @@ namespace MediaBrowser.Controller.Entities } } + /// + /// Gets the play access. + /// + /// The user. + /// PlayAccess. + public PlayAccess GetPlayAccess(User user) + { + if (!user.Configuration.EnableMediaPlayback) + { + return PlayAccess.None; + } + + return PlayAccess.Full; + } + /// /// Loads local trailers from the file system /// diff --git a/MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj b/MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj index 8987cae5fa..556a59138a 100644 --- a/MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj +++ b/MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj @@ -233,6 +233,9 @@ IO\IZipClient.cs + + Library\PlayAccess.cs + LiveTv\ChannelInfoDto.cs diff --git a/MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj b/MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj index 76fbe20007..b5ac60d52f 100644 --- a/MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj +++ b/MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj @@ -220,6 +220,9 @@ IO\IZipClient.cs + + Library\PlayAccess.cs + LiveTv\ChannelInfoDto.cs diff --git a/MediaBrowser.Model/Dto/BaseItemDto.cs b/MediaBrowser.Model/Dto/BaseItemDto.cs index 8f43304463..0d2c4c34ed 100644 --- a/MediaBrowser.Model/Dto/BaseItemDto.cs +++ b/MediaBrowser.Model/Dto/BaseItemDto.cs @@ -4,6 +4,7 @@ using System.Collections.Generic; using System.ComponentModel; using System.Diagnostics; using System.Runtime.Serialization; +using MediaBrowser.Model.Library; namespace MediaBrowser.Model.Dto { @@ -153,6 +154,12 @@ namespace MediaBrowser.Model.Dto /// /// The cumulative run time ticks. public long? CumulativeRunTimeTicks { get; set; } + + /// + /// Gets or sets the original run time ticks. + /// + /// The original run time ticks. + public long? OriginalRunTimeTicks { get; set; } /// /// Gets or sets the run time ticks. @@ -160,6 +167,12 @@ namespace MediaBrowser.Model.Dto /// The run time ticks. public long? RunTimeTicks { get; set; } + /// + /// Gets or sets the play access. + /// + /// The play access. + public PlayAccess PlayAccess { get; set; } + /// /// Gets or sets the aspect ratio. /// diff --git a/MediaBrowser.Model/Dto/RecordingInfoDto.cs b/MediaBrowser.Model/Dto/RecordingInfoDto.cs deleted file mode 100644 index 4151c5a9c8..0000000000 --- a/MediaBrowser.Model/Dto/RecordingInfoDto.cs +++ /dev/null @@ -1,12 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace MediaBrowser.Model.Dto -{ - public class RecordingInfoDto - { - } -} diff --git a/MediaBrowser.Model/Library/PlayAccess.cs b/MediaBrowser.Model/Library/PlayAccess.cs new file mode 100644 index 0000000000..6ec845fc73 --- /dev/null +++ b/MediaBrowser.Model/Library/PlayAccess.cs @@ -0,0 +1,9 @@ + +namespace MediaBrowser.Model.Library +{ + public enum PlayAccess + { + Full = 0, + None = 1 + } +} diff --git a/MediaBrowser.Model/MediaBrowser.Model.csproj b/MediaBrowser.Model/MediaBrowser.Model.csproj index efe450ac15..b2d1303585 100644 --- a/MediaBrowser.Model/MediaBrowser.Model.csproj +++ b/MediaBrowser.Model/MediaBrowser.Model.csproj @@ -76,6 +76,7 @@ + diff --git a/MediaBrowser.Server.Implementations/Dto/DtoService.cs b/MediaBrowser.Server.Implementations/Dto/DtoService.cs index 65a496533e..321923dbaf 100644 --- a/MediaBrowser.Server.Implementations/Dto/DtoService.cs +++ b/MediaBrowser.Server.Implementations/Dto/DtoService.cs @@ -10,7 +10,6 @@ using MediaBrowser.Controller.Entities.TV; using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Persistence; using MediaBrowser.Controller.Session; -using MediaBrowser.Model.Configuration; using MediaBrowser.Model.Drawing; using MediaBrowser.Model.Dto; using MediaBrowser.Model.Entities; @@ -185,6 +184,8 @@ namespace MediaBrowser.Server.Implementations.Dto { dto.UserData.Played = dto.PlayedPercentage.HasValue && dto.PlayedPercentage.Value >= 100; } + + dto.PlayAccess = item.GetPlayAccess(user); } private int GetChildCount(Folder folder, User user) diff --git a/MediaBrowser.Server.Implementations/Session/SessionManager.cs b/MediaBrowser.Server.Implementations/Session/SessionManager.cs index 09a442966c..bfa23b9975 100644 --- a/MediaBrowser.Server.Implementations/Session/SessionManager.cs +++ b/MediaBrowser.Server.Implementations/Session/SessionManager.cs @@ -7,6 +7,7 @@ using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Persistence; using MediaBrowser.Controller.Session; using MediaBrowser.Model.Entities; +using MediaBrowser.Model.Library; using MediaBrowser.Model.Logging; using MediaBrowser.Model.Session; using System; @@ -604,20 +605,20 @@ namespace MediaBrowser.Server.Implementations.Session { var session = GetSessionForRemoteControl(sessionId); + var items = command.ItemIds.Select(i => _libraryManager.GetItemById(new Guid(i))) + .Where(i => i.LocationType != LocationType.Virtual) + .ToList(); + if (session.UserId.HasValue) { var user = _userManager.GetUserById(session.UserId.Value); - if (!user.Configuration.EnableMediaPlayback) + if (items.Any(i => i.GetPlayAccess(user) != PlayAccess.Full)) { throw new ArgumentException(string.Format("{0} is not allowed to play media.", user.Name)); } } - var items = command.ItemIds.Select(i => _libraryManager.GetItemById(new Guid(i))) - .Where(i => i.LocationType != LocationType.Virtual) - .ToList(); - if (command.PlayCommand != PlayCommand.PlayNow) { if (items.Any(i => !session.QueueableMediaTypes.Contains(i.MediaType, StringComparer.OrdinalIgnoreCase)))