|
|
|
@ -348,28 +348,19 @@ namespace MediaBrowser.Api.Library
|
|
|
|
|
|
|
|
|
|
private string[] GetRepresentativeItemTypes(string contentType)
|
|
|
|
|
{
|
|
|
|
|
switch (contentType)
|
|
|
|
|
return contentType switch
|
|
|
|
|
{
|
|
|
|
|
case CollectionType.BoxSets:
|
|
|
|
|
return new string[] { "BoxSet" };
|
|
|
|
|
case CollectionType.Playlists:
|
|
|
|
|
return new string[] { "Playlist" };
|
|
|
|
|
case CollectionType.Movies:
|
|
|
|
|
return new string[] { "Movie" };
|
|
|
|
|
case CollectionType.TvShows:
|
|
|
|
|
return new string[] { "Series", "Season", "Episode" };
|
|
|
|
|
case CollectionType.Books:
|
|
|
|
|
return new string[] { "Book" };
|
|
|
|
|
case CollectionType.Music:
|
|
|
|
|
return new string[] { "MusicAlbum", "MusicArtist", "Audio", "MusicVideo" };
|
|
|
|
|
case CollectionType.HomeVideos:
|
|
|
|
|
case CollectionType.Photos:
|
|
|
|
|
return new string[] { "Video", "Photo" };
|
|
|
|
|
case CollectionType.MusicVideos:
|
|
|
|
|
return new string[] { "MusicVideo" };
|
|
|
|
|
default:
|
|
|
|
|
return new string[] { "Series", "Season", "Episode", "Movie" };
|
|
|
|
|
}
|
|
|
|
|
CollectionType.BoxSets => new[] {"BoxSet"},
|
|
|
|
|
CollectionType.Playlists => new[] {"Playlist"},
|
|
|
|
|
CollectionType.Movies => new[] {"Movie"},
|
|
|
|
|
CollectionType.TvShows => new[] {"Series", "Season", "Episode"},
|
|
|
|
|
CollectionType.Books => new[] {"Book"},
|
|
|
|
|
CollectionType.Music => new[] {"MusicAlbum", "MusicArtist", "Audio", "MusicVideo"},
|
|
|
|
|
CollectionType.HomeVideos => new[] {"Video", "Photo"},
|
|
|
|
|
CollectionType.Photos => new[] {"Video", "Photo"},
|
|
|
|
|
CollectionType.MusicVideos => new[] {"MusicVideo"},
|
|
|
|
|
_ => new[] {"Series", "Season", "Episode", "Movie"}
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private bool IsSaverEnabledByDefault(string name, string[] itemTypes, bool isNewLibrary)
|
|
|
|
@ -397,54 +388,22 @@ namespace MediaBrowser.Api.Library
|
|
|
|
|
{
|
|
|
|
|
if (string.Equals(name, "TheMovieDb", StringComparison.OrdinalIgnoreCase))
|
|
|
|
|
{
|
|
|
|
|
if (string.Equals(type, "Series", StringComparison.OrdinalIgnoreCase))
|
|
|
|
|
{
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
if (string.Equals(type, "Season", StringComparison.OrdinalIgnoreCase))
|
|
|
|
|
{
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
if (string.Equals(type, "Episode", StringComparison.OrdinalIgnoreCase))
|
|
|
|
|
{
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
if (string.Equals(type, "MusicVideo", StringComparison.OrdinalIgnoreCase))
|
|
|
|
|
{
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
else if (string.Equals(name, "TheTVDB", StringComparison.OrdinalIgnoreCase))
|
|
|
|
|
{
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
else if (string.Equals(name, "The Open Movie Database", StringComparison.OrdinalIgnoreCase))
|
|
|
|
|
{
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
else if (string.Equals(name, "TheAudioDB", StringComparison.OrdinalIgnoreCase))
|
|
|
|
|
{
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
else if (string.Equals(name, "MusicBrainz", StringComparison.OrdinalIgnoreCase))
|
|
|
|
|
{
|
|
|
|
|
return true;
|
|
|
|
|
return !(string.Equals(type, "Season", StringComparison.OrdinalIgnoreCase)
|
|
|
|
|
|| string.Equals(type, "Episode", StringComparison.OrdinalIgnoreCase)
|
|
|
|
|
|| string.Equals(type, "MusicVideo", StringComparison.OrdinalIgnoreCase));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return false;
|
|
|
|
|
return string.Equals(name, "TheTVDB", StringComparison.OrdinalIgnoreCase)
|
|
|
|
|
|| string.Equals(name, "TheAudioDB", StringComparison.OrdinalIgnoreCase)
|
|
|
|
|
|| string.Equals(name, "MusicBrainz", StringComparison.OrdinalIgnoreCase);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var metadataOptions = ServerConfigurationManager.Configuration.MetadataOptions
|
|
|
|
|
.Where(i => string.Equals(i.ItemType, type, StringComparison.OrdinalIgnoreCase))
|
|
|
|
|
.ToArray();
|
|
|
|
|
|
|
|
|
|
if (metadataOptions.Length == 0)
|
|
|
|
|
{
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return metadataOptions.Any(i => !i.DisabledMetadataFetchers.Contains(name, StringComparer.OrdinalIgnoreCase));
|
|
|
|
|
return metadataOptions.Length == 0
|
|
|
|
|
|| metadataOptions.Any(i => !i.DisabledMetadataFetchers.Contains(name, StringComparer.OrdinalIgnoreCase));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private bool IsImageFetcherEnabledByDefault(string name, string type, bool isNewLibrary)
|
|
|
|
@ -453,50 +412,17 @@ namespace MediaBrowser.Api.Library
|
|
|
|
|
{
|
|
|
|
|
if (string.Equals(name, "TheMovieDb", StringComparison.OrdinalIgnoreCase))
|
|
|
|
|
{
|
|
|
|
|
if (string.Equals(type, "Series", StringComparison.OrdinalIgnoreCase))
|
|
|
|
|
{
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
if (string.Equals(type, "Season", StringComparison.OrdinalIgnoreCase))
|
|
|
|
|
{
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
if (string.Equals(type, "Episode", StringComparison.OrdinalIgnoreCase))
|
|
|
|
|
{
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
if (string.Equals(type, "MusicVideo", StringComparison.OrdinalIgnoreCase))
|
|
|
|
|
{
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
else if (string.Equals(name, "TheTVDB", StringComparison.OrdinalIgnoreCase))
|
|
|
|
|
{
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
else if (string.Equals(name, "The Open Movie Database", StringComparison.OrdinalIgnoreCase))
|
|
|
|
|
{
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
else if (string.Equals(name, "TheAudioDB", StringComparison.OrdinalIgnoreCase))
|
|
|
|
|
{
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
else if (string.Equals(name, "Emby Designs", StringComparison.OrdinalIgnoreCase))
|
|
|
|
|
{
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
else if (string.Equals(name, "Screen Grabber", StringComparison.OrdinalIgnoreCase))
|
|
|
|
|
{
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
else if (string.Equals(name, "Image Extractor", StringComparison.OrdinalIgnoreCase))
|
|
|
|
|
{
|
|
|
|
|
return true;
|
|
|
|
|
return !string.Equals(type, "Series", StringComparison.OrdinalIgnoreCase)
|
|
|
|
|
&& !string.Equals(type, "Season", StringComparison.OrdinalIgnoreCase)
|
|
|
|
|
&& !string.Equals(type, "Episode", StringComparison.OrdinalIgnoreCase)
|
|
|
|
|
&& !string.Equals(type, "MusicVideo", StringComparison.OrdinalIgnoreCase);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return false;
|
|
|
|
|
return string.Equals(name, "TheTVDB", StringComparison.OrdinalIgnoreCase)
|
|
|
|
|
|| string.Equals(name, "Screen Grabber", StringComparison.OrdinalIgnoreCase)
|
|
|
|
|
|| string.Equals(name, "TheAudioDB", StringComparison.OrdinalIgnoreCase)
|
|
|
|
|
|| string.Equals(name, "Emby Designs", StringComparison.OrdinalIgnoreCase)
|
|
|
|
|
|| string.Equals(name, "Image Extractor", StringComparison.OrdinalIgnoreCase);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var metadataOptions = ServerConfigurationManager.Configuration.MetadataOptions
|
|
|
|
@ -561,8 +487,7 @@ namespace MediaBrowser.Api.Library
|
|
|
|
|
|
|
|
|
|
foreach (var type in types)
|
|
|
|
|
{
|
|
|
|
|
ImageOption[] defaultImageOptions = null;
|
|
|
|
|
TypeOptions.DefaultImageOptions.TryGetValue(type, out defaultImageOptions);
|
|
|
|
|
TypeOptions.DefaultImageOptions.TryGetValue(type, out var defaultImageOptions);
|
|
|
|
|
|
|
|
|
|
typeOptions.Add(new LibraryTypeOptions
|
|
|
|
|
{
|
|
|
|
@ -609,8 +534,6 @@ namespace MediaBrowser.Api.Library
|
|
|
|
|
|
|
|
|
|
public object Get(GetSimilarItems request)
|
|
|
|
|
{
|
|
|
|
|
var user = !request.UserId.Equals(Guid.Empty) ? _userManager.GetUserById(request.UserId) : null;
|
|
|
|
|
|
|
|
|
|
var item = string.IsNullOrEmpty(request.Id) ?
|
|
|
|
|
(!request.UserId.Equals(Guid.Empty) ? _libraryManager.GetUserRootFolder() :
|
|
|
|
|
_libraryManager.RootFolder) : _libraryManager.GetItemById(request.Id);
|
|
|
|
@ -668,7 +591,7 @@ namespace MediaBrowser.Api.Library
|
|
|
|
|
// ExcludeArtistIds
|
|
|
|
|
if (!string.IsNullOrEmpty(request.ExcludeArtistIds))
|
|
|
|
|
{
|
|
|
|
|
query.ExcludeArtistIds = BaseApiService.GetGuids(request.ExcludeArtistIds);
|
|
|
|
|
query.ExcludeArtistIds = GetGuids(request.ExcludeArtistIds);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
List<BaseItem> itemsResult;
|
|
|
|
@ -689,7 +612,6 @@ namespace MediaBrowser.Api.Library
|
|
|
|
|
var result = new QueryResult<BaseItemDto>
|
|
|
|
|
{
|
|
|
|
|
Items = returnList,
|
|
|
|
|
|
|
|
|
|
TotalRecordCount = itemsResult.Count
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
@ -919,12 +841,10 @@ namespace MediaBrowser.Api.Library
|
|
|
|
|
|
|
|
|
|
private BaseItem TranslateParentItem(BaseItem item, User user)
|
|
|
|
|
{
|
|
|
|
|
if (item.GetParent() is AggregateFolder)
|
|
|
|
|
{
|
|
|
|
|
return _libraryManager.GetUserRootFolder().GetChildren(user, true).FirstOrDefault(i => i.PhysicalLocations.Contains(item.Path));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return item;
|
|
|
|
|
return item.GetParent() is AggregateFolder
|
|
|
|
|
? _libraryManager.GetUserRootFolder().GetChildren(user, true)
|
|
|
|
|
.FirstOrDefault(i => i.PhysicalLocations.Contains(item.Path))
|
|
|
|
|
: item;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
@ -1086,7 +1006,7 @@ namespace MediaBrowser.Api.Library
|
|
|
|
|
var item = string.IsNullOrEmpty(request.Id)
|
|
|
|
|
? (!request.UserId.Equals(Guid.Empty)
|
|
|
|
|
? _libraryManager.GetUserRootFolder()
|
|
|
|
|
: (Folder)_libraryManager.RootFolder)
|
|
|
|
|
: _libraryManager.RootFolder)
|
|
|
|
|
: _libraryManager.GetItemById(request.Id);
|
|
|
|
|
|
|
|
|
|
if (item == null)
|
|
|
|
@ -1094,18 +1014,13 @@ namespace MediaBrowser.Api.Library
|
|
|
|
|
throw new ResourceNotFoundException("Item not found.");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
BaseItem[] themeItems = Array.Empty<BaseItem>();
|
|
|
|
|
IEnumerable<BaseItem> themeItems;
|
|
|
|
|
|
|
|
|
|
while (true)
|
|
|
|
|
{
|
|
|
|
|
themeItems = item.GetThemeSongs().ToArray();
|
|
|
|
|
|
|
|
|
|
if (themeItems.Length > 0)
|
|
|
|
|
{
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
themeItems = item.GetThemeSongs();
|
|
|
|
|
|
|
|
|
|
if (!request.InheritFromParent)
|
|
|
|
|
if (themeItems.Any() || !request.InheritFromParent)
|
|
|
|
|
{
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
@ -1119,11 +1034,9 @@ namespace MediaBrowser.Api.Library
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var dtoOptions = GetDtoOptions(_authContext, request);
|
|
|
|
|
|
|
|
|
|
var dtos = themeItems
|
|
|
|
|
.Select(i => _dtoService.GetBaseItemDto(i, dtoOptions, user, item));
|
|
|
|
|
|
|
|
|
|
var items = dtos.ToArray();
|
|
|
|
|
var items = themeItems
|
|
|
|
|
.Select(i => _dtoService.GetBaseItemDto(i, dtoOptions, user, item))
|
|
|
|
|
.ToArray();
|
|
|
|
|
|
|
|
|
|
return new ThemeMediaResult
|
|
|
|
|
{
|
|
|
|
@ -1140,9 +1053,7 @@ namespace MediaBrowser.Api.Library
|
|
|
|
|
/// <returns>System.Object.</returns>
|
|
|
|
|
public object Get(GetThemeVideos request)
|
|
|
|
|
{
|
|
|
|
|
var result = GetThemeVideos(request);
|
|
|
|
|
|
|
|
|
|
return ToOptimizedResult(result);
|
|
|
|
|
return ToOptimizedResult(GetThemeVideos(request));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public ThemeMediaResult GetThemeVideos(GetThemeVideos request)
|
|
|
|
@ -1152,7 +1063,7 @@ namespace MediaBrowser.Api.Library
|
|
|
|
|
var item = string.IsNullOrEmpty(request.Id)
|
|
|
|
|
? (!request.UserId.Equals(Guid.Empty)
|
|
|
|
|
? _libraryManager.GetUserRootFolder()
|
|
|
|
|
: (Folder)_libraryManager.RootFolder)
|
|
|
|
|
: _libraryManager.RootFolder)
|
|
|
|
|
: _libraryManager.GetItemById(request.Id);
|
|
|
|
|
|
|
|
|
|
if (item == null)
|
|
|
|
@ -1160,18 +1071,13 @@ namespace MediaBrowser.Api.Library
|
|
|
|
|
throw new ResourceNotFoundException("Item not found.");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
BaseItem[] themeItems = Array.Empty<BaseItem>();
|
|
|
|
|
IEnumerable<BaseItem> themeItems;
|
|
|
|
|
|
|
|
|
|
while (true)
|
|
|
|
|
{
|
|
|
|
|
themeItems = item.GetThemeVideos().ToArray();
|
|
|
|
|
|
|
|
|
|
if (themeItems.Length > 0)
|
|
|
|
|
{
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
themeItems = item.GetThemeVideos();
|
|
|
|
|
|
|
|
|
|
if (!request.InheritFromParent)
|
|
|
|
|
if (themeItems.Any() || !request.InheritFromParent)
|
|
|
|
|
{
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
@ -1186,10 +1092,9 @@ namespace MediaBrowser.Api.Library
|
|
|
|
|
|
|
|
|
|
var dtoOptions = GetDtoOptions(_authContext, request);
|
|
|
|
|
|
|
|
|
|
var dtos = themeItems
|
|
|
|
|
.Select(i => _dtoService.GetBaseItemDto(i, dtoOptions, user, item));
|
|
|
|
|
|
|
|
|
|
var items = dtos.ToArray();
|
|
|
|
|
var items = themeItems
|
|
|
|
|
.Select(i => _dtoService.GetBaseItemDto(i, dtoOptions, user, item))
|
|
|
|
|
.ToArray();
|
|
|
|
|
|
|
|
|
|
return new ThemeMediaResult
|
|
|
|
|
{
|
|
|
|
|