aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Api/Library/LibraryService.cs
diff options
context:
space:
mode:
Diffstat (limited to 'MediaBrowser.Api/Library/LibraryService.cs')
-rw-r--r--MediaBrowser.Api/Library/LibraryService.cs129
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();