diff options
Diffstat (limited to 'MediaBrowser.Api/Library/LibraryService.cs')
| -rw-r--r-- | MediaBrowser.Api/Library/LibraryService.cs | 129 |
1 files changed, 68 insertions, 61 deletions
diff --git a/MediaBrowser.Api/Library/LibraryService.cs b/MediaBrowser.Api/Library/LibraryService.cs index 34b930a6a..5e1619672 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; @@ -23,8 +25,8 @@ using System.Threading.Tasks; namespace MediaBrowser.Api.Library { - [Route("/Items/{Id}/File", "GET")] - [Api(Description = "Gets the original file of an item")] + [Route("/Items/{Id}/File", "GET", Summary = "Gets the original file of an item")] + [Authenticated] public class GetFile { /// <summary> @@ -38,8 +40,8 @@ namespace MediaBrowser.Api.Library /// <summary> /// Class GetCriticReviews /// </summary> - [Route("/Items/{Id}/CriticReviews", "GET")] - [Api(Description = "Gets critic reviews for an item")] + [Route("/Items/{Id}/CriticReviews", "GET", Summary = "Gets critic reviews for an item")] + [Authenticated] public class GetCriticReviews : IReturn<QueryResult<ItemReview>> { /// <summary> @@ -67,8 +69,8 @@ namespace MediaBrowser.Api.Library /// <summary> /// Class GetThemeSongs /// </summary> - [Route("/Items/{Id}/ThemeSongs", "GET")] - [Api(Description = "Gets theme songs for an item")] + [Route("/Items/{Id}/ThemeSongs", "GET", Summary = "Gets theme songs for an item")] + [Authenticated] public class GetThemeSongs : IReturn<ThemeMediaResult> { /// <summary> @@ -92,8 +94,8 @@ namespace MediaBrowser.Api.Library /// <summary> /// Class GetThemeVideos /// </summary> - [Route("/Items/{Id}/ThemeVideos", "GET")] - [Api(Description = "Gets theme videos for an item")] + [Route("/Items/{Id}/ThemeVideos", "GET", Summary = "Gets theme videos for an item")] + [Authenticated] public class GetThemeVideos : IReturn<ThemeMediaResult> { /// <summary> @@ -117,8 +119,8 @@ namespace MediaBrowser.Api.Library /// <summary> /// Class GetThemeVideos /// </summary> - [Route("/Items/{Id}/ThemeMedia", "GET")] - [Api(Description = "Gets theme videos and songs for an item")] + [Route("/Items/{Id}/ThemeMedia", "GET", Summary = "Gets theme videos and songs for an item")] + [Authenticated] public class GetThemeMedia : IReturn<AllThemeMediaResult> { /// <summary> @@ -139,14 +141,14 @@ namespace MediaBrowser.Api.Library public bool InheritFromParent { get; set; } } - [Route("/Library/Refresh", "POST")] - [Api(Description = "Starts a library scan")] + [Route("/Library/Refresh", "POST", Summary = "Starts a library scan")] + [Authenticated(Roles = "Admin")] public class RefreshLibrary : IReturnVoid { } - [Route("/Items/{Id}", "DELETE")] - [Api(Description = "Deletes an item from the library and file system")] + [Route("/Items/{Id}", "DELETE", Summary = "Deletes an item from the library and file system")] + [Authenticated] public class DeleteItem : IReturnVoid { [ApiMember(Name = "Id", Description = "Item Id", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "DELETE")] @@ -154,7 +156,7 @@ namespace MediaBrowser.Api.Library } [Route("/Items/Counts", "GET")] - [Api(Description = "Gets counts of various item types")] + [Authenticated] public class GetItemCounts : IReturn<ItemCounts> { [ApiMember(Name = "UserId", Description = "Optional. Get counts from a specific user's library.", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "GET")] @@ -164,8 +166,8 @@ namespace MediaBrowser.Api.Library public bool? IsFavorite { get; set; } } - [Route("/Items/{Id}/Ancestors", "GET")] - [Api(Description = "Gets all parents of an item")] + [Route("/Items/{Id}/Ancestors", "GET", Summary = "Gets all parents of an item")] + [Authenticated] public class GetAncestors : IReturn<BaseItemDto[]> { /// <summary> @@ -183,8 +185,8 @@ namespace MediaBrowser.Api.Library public string Id { get; set; } } - [Route("/Items/YearIndex", "GET")] - [Api(Description = "Gets a year index based on an item query.")] + [Route("/Items/YearIndex", "GET", Summary = "Gets a year index based on an item query.")] + [Authenticated] public class GetYearIndex : IReturn<List<ItemIndex>> { /// <summary> @@ -201,23 +203,23 @@ namespace MediaBrowser.Api.Library /// <summary> /// Class GetPhyscialPaths /// </summary> - [Route("/Library/PhysicalPaths", "GET")] - [Api(Description = "Gets a list of physical paths from virtual folders")] + [Route("/Library/PhysicalPaths", "GET", Summary = "Gets a list of physical paths from virtual folders")] + [Authenticated(Roles = "Admin")] public class GetPhyscialPaths : IReturn<List<string>> { } - [Route("/Library/MediaFolders", "GET")] - [Api(Description = "Gets all user media folders.")] + [Route("/Library/MediaFolders", "GET", Summary = "Gets all user media folders.")] + [Authenticated] public class GetMediaFolders : IReturn<ItemsResult> { [ApiMember(Name = "IsHidden", Description = "Optional. Filter by folders that are marked hidden, or not.", IsRequired = false, DataType = "boolean", ParameterType = "query", Verb = "GET")] public bool? IsHidden { get; set; } } - [Route("/Library/Series/Added", "POST")] - [Route("/Library/Series/Updated", "POST")] - [Api(Description = "Reports that new episodes of a series have been added by an external source")] + [Route("/Library/Series/Added", "POST", Summary = "Reports that new episodes of a series have been added by an external source")] + [Route("/Library/Series/Updated", "POST", Summary = "Reports that new episodes of a series have been added by an external source")] + [Authenticated] public class PostUpdatedSeries : IReturnVoid { [ApiMember(Name = "TvdbId", Description = "Tvdb Id", IsRequired = false, DataType = "string", ParameterType = "path", Verb = "GET")] @@ -227,7 +229,6 @@ namespace MediaBrowser.Api.Library /// <summary> /// Class LibraryService /// </summary> - [Authenticated] public class LibraryService : BaseApiService { /// <summary> @@ -242,12 +243,13 @@ namespace MediaBrowser.Api.Library private readonly IDtoService _dtoService; private readonly IChannelManager _channelManager; private readonly ISessionManager _sessionManager; + private readonly IAuthorizationContext _authContext; /// <summary> /// Initializes a new instance of the <see cref="LibraryService" /> class. /// </summary> 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; @@ -256,6 +258,7 @@ namespace MediaBrowser.Api.Library _userDataManager = userDataManager; _channelManager = channelManager; _sessionManager = sessionManager; + _authContext = authContext; } public object Get(GetMediaFolders request) @@ -269,16 +272,13 @@ namespace MediaBrowser.Api.Library items = items.Where(i => i.IsHidden == val).ToList(); } - // Get everything - var fields = Enum.GetNames(typeof(ItemFields)) - .Select(i => (ItemFields)Enum.Parse(typeof(ItemFields), i, true)) - .ToList(); - + var dtoOptions = new DtoOptions(); + var result = new ItemsResult { TotalRecordCount = items.Count, - Items = items.Select(i => _dtoService.GetBaseItemDto(i, fields)).ToArray() + Items = items.Select(i => _dtoService.GetBaseItemDto(i, dtoOptions)).ToArray() }; return ToOptimizedResult(result); @@ -344,13 +344,10 @@ namespace MediaBrowser.Api.Library var user = request.UserId.HasValue ? _userManager.GetUserById(request.UserId.Value) : null; - // Get everything - var fields = Enum.GetNames(typeof(ItemFields)) - .Select(i => (ItemFields)Enum.Parse(typeof(ItemFields), i, true)) - .ToList(); + var dtoOptions = new DtoOptions(); BaseItem parent = item.Parent; - + while (parent != null) { if (user != null) @@ -358,7 +355,7 @@ namespace MediaBrowser.Api.Library parent = TranslateParentItem(parent, user); } - baseItemDtos.Add(_dtoService.GetBaseItemDto(parent, fields, user)); + baseItemDtos.Add(_dtoService.GetBaseItemDto(parent, dtoOptions, user)); parent = parent.Parent; } @@ -406,7 +403,6 @@ namespace MediaBrowser.Api.Library var games = filteredItems.OfType<Game>().ToList(); var movies = filteredItems.OfType<Movie>().ToList(); var musicVideos = filteredItems.OfType<MusicVideo>().ToList(); - var adultVideos = filteredItems.OfType<AdultVideo>().ToList(); var boxsets = filteredItems.OfType<BoxSet>().ToList(); var books = filteredItems.OfType<Book>().ToList(); var songs = filteredItems.OfType<Audio>().ToList(); @@ -421,9 +417,7 @@ namespace MediaBrowser.Api.Library MovieCount = movies.Count, SeriesCount = series.Count, SongCount = songs.Count, - TrailerCount = filteredItems.OfType<Trailer>().Count(), MusicVideoCount = musicVideos.Count, - AdultVideoCount = adultVideos.Count, BoxSetCount = boxsets.Count, BookCount = books.Count, @@ -470,6 +464,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 || item is BoxSet) + { + // For now this is allowed if user can see the playlist + } + else if (item is ILiveTvRecording) + { + if (!user.Policy.EnableLiveTvManagement) + { + throw new UnauthorizedAccessException(); + } + } + else + { + if (!user.Policy.EnableContentDeletion) + { + throw new UnauthorizedAccessException(); + } + } + var task = _libraryManager.DeleteItem(item); Task.WaitAll(task); @@ -561,11 +577,6 @@ namespace MediaBrowser.Api.Library item = item.Parent; } - // Get everything - var fields = Enum.GetNames(typeof(ItemFields)) - .Select(i => (ItemFields)Enum.Parse(typeof(ItemFields), i, true)) - .ToList(); - var themeSongIds = GetThemeSongIds(item); if (themeSongIds.Count == 0 && request.InheritFromParent) @@ -586,9 +597,11 @@ namespace MediaBrowser.Api.Library } } + var dtoOptions = new DtoOptions(); + var dtos = themeSongIds.Select(_libraryManager.GetItemById) .OrderBy(i => i.SortName) - .Select(i => _dtoService.GetBaseItemDto(i, fields, user, item)); + .Select(i => _dtoService.GetBaseItemDto(i, dtoOptions, user, item)); var items = dtos.ToArray(); @@ -629,11 +642,6 @@ namespace MediaBrowser.Api.Library item = item.Parent; } - // Get everything - var fields = Enum.GetNames(typeof(ItemFields)) - .Select(i => (ItemFields)Enum.Parse(typeof(ItemFields), i, true)) - .ToList(); - var themeVideoIds = GetThemeVideoIds(item); if (themeVideoIds.Count == 0 && request.InheritFromParent) @@ -659,9 +667,11 @@ namespace MediaBrowser.Api.Library } } + var dtoOptions = new DtoOptions(); + var dtos = themeVideoIds.Select(_libraryManager.GetItemById) .OrderBy(i => i.SortName) - .Select(i => _dtoService.GetBaseItemDto(i, fields, user, item)); + .Select(i => _dtoService.GetBaseItemDto(i, dtoOptions, user, item)); var items = dtos.ToArray(); @@ -732,10 +742,7 @@ namespace MediaBrowser.Api.Library : (Folder)_libraryManager.RootFolder) : _libraryManager.GetItemById(id); - // Get everything - var fields = Enum.GetNames(typeof(ItemFields)) - .Select(i => (ItemFields)Enum.Parse(typeof(ItemFields), i, true)) - .ToList(); + var dtoOptions = new DtoOptions(); var dtos = GetSoundtrackSongIds(item, inheritFromParent) .Select(_libraryManager.GetItemById) @@ -743,7 +750,7 @@ namespace MediaBrowser.Api.Library .SelectMany(i => i.RecursiveChildren) .OfType<Audio>() .OrderBy(i => i.SortName) - .Select(i => _dtoService.GetBaseItemDto(i, fields, user, item)); + .Select(i => _dtoService.GetBaseItemDto(i, dtoOptions, user, item)); var items = dtos.ToArray(); @@ -766,7 +773,7 @@ namespace MediaBrowser.Api.Library if (!inherit) { - return null; + return new List<Guid>(); } hasSoundtracks = item.Parents.OfType<IHasSoundtracks>().FirstOrDefault(); |
