diff --git a/MediaBrowser.Api/Library/LibraryService.cs b/MediaBrowser.Api/Library/LibraryService.cs
index ec7b1f0b35..06d8e0478e 100644
--- a/MediaBrowser.Api/Library/LibraryService.cs
+++ b/MediaBrowser.Api/Library/LibraryService.cs
@@ -5,8 +5,10 @@ using MediaBrowser.Controller.Entities.Audio;
using MediaBrowser.Controller.Entities.Movies;
using MediaBrowser.Controller.Entities.TV;
using MediaBrowser.Controller.Library;
+using MediaBrowser.Controller.LiveTv;
using MediaBrowser.Controller.Net;
using MediaBrowser.Controller.Persistence;
+using MediaBrowser.Controller.Playlists;
using MediaBrowser.Controller.Session;
using MediaBrowser.Model.Dto;
using MediaBrowser.Model.Entities;
@@ -146,7 +148,7 @@ namespace MediaBrowser.Api.Library
}
[Route("/Items/{Id}", "DELETE", Summary = "Deletes an item from the library and file system")]
- [Authenticated(Roles = "Delete")]
+ [Authenticated]
public class DeleteItem : IReturnVoid
{
[ApiMember(Name = "Id", Description = "Item Id", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "DELETE")]
@@ -241,12 +243,13 @@ namespace MediaBrowser.Api.Library
private readonly IDtoService _dtoService;
private readonly IChannelManager _channelManager;
private readonly ISessionManager _sessionManager;
+ private readonly IAuthorizationContext _authContext;
///
/// Initializes a new instance of the class.
///
public LibraryService(IItemRepository itemRepo, ILibraryManager libraryManager, IUserManager userManager,
- IDtoService dtoService, IUserDataManager userDataManager, IChannelManager channelManager, ISessionManager sessionManager)
+ IDtoService dtoService, IUserDataManager userDataManager, IChannelManager channelManager, ISessionManager sessionManager, IAuthorizationContext authContext)
{
_itemRepo = itemRepo;
_libraryManager = libraryManager;
@@ -255,6 +258,7 @@ namespace MediaBrowser.Api.Library
_userDataManager = userDataManager;
_channelManager = channelManager;
_sessionManager = sessionManager;
+ _authContext = authContext;
}
public object Get(GetMediaFolders request)
@@ -466,6 +470,28 @@ namespace MediaBrowser.Api.Library
{
var item = _libraryManager.GetItemById(request.Id);
+ var auth = _authContext.GetAuthorizationInfo(Request);
+ var user = _userManager.GetUserById(auth.UserId);
+
+ if (item is Playlist)
+ {
+ // For now this is allowed if user can see the playlist
+ }
+ else if (item is ILiveTvRecording)
+ {
+ if (!user.Configuration.EnableLiveTvManagement)
+ {
+ throw new UnauthorizedAccessException();
+ }
+ }
+ else
+ {
+ if (!user.Configuration.EnableContentDeletion)
+ {
+ throw new UnauthorizedAccessException();
+ }
+ }
+
var task = _libraryManager.DeleteItem(item);
Task.WaitAll(task);
diff --git a/MediaBrowser.Api/MediaBrowser.Api.csproj b/MediaBrowser.Api/MediaBrowser.Api.csproj
index bc6cba5b9f..dae3790990 100644
--- a/MediaBrowser.Api/MediaBrowser.Api.csproj
+++ b/MediaBrowser.Api/MediaBrowser.Api.csproj
@@ -79,6 +79,7 @@
+
diff --git a/MediaBrowser.Api/Playback/MediaInfoService.cs b/MediaBrowser.Api/Playback/MediaInfoService.cs
new file mode 100644
index 0000000000..b9973df40b
--- /dev/null
+++ b/MediaBrowser.Api/Playback/MediaInfoService.cs
@@ -0,0 +1,64 @@
+using MediaBrowser.Controller.Channels;
+using MediaBrowser.Controller.Entities;
+using MediaBrowser.Controller.Library;
+using MediaBrowser.Controller.Net;
+using MediaBrowser.Model.Dto;
+using MediaBrowser.Model.MediaInfo;
+using ServiceStack;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading;
+using System.Threading.Tasks;
+
+namespace MediaBrowser.Api.Playback
+{
+ [Route("/Items/{Id}/MediaInfo", "GET", Summary = "Gets live playback media info for an item")]
+ public class GetLiveMediaInfo : IReturn
+ {
+ [ApiMember(Name = "Id", Description = "Item Id", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "GET")]
+ public string Id { get; set; }
+
+ [ApiMember(Name = "UserId", Description = "User Id", IsRequired = true, DataType = "string", ParameterType = "query", Verb = "GET")]
+ public string UserId { get; set; }
+ }
+
+ [Authenticated]
+ public class MediaInfoService : BaseApiService
+ {
+ private readonly ILibraryManager _libraryManager;
+ private readonly IChannelManager _channelManager;
+ private readonly IUserManager _userManager;
+
+ public MediaInfoService(ILibraryManager libraryManager, IChannelManager channelManager, IUserManager userManager)
+ {
+ _libraryManager = libraryManager;
+ _channelManager = channelManager;
+ _userManager = userManager;
+ }
+
+ public async Task