mirror of
https://github.com/jellyfin/jellyfin.git
synced 2025-12-22 16:54:46 +03:00
Merge branch 'master' into comparisons
This commit is contained in:
@@ -14,6 +14,8 @@ using Jellyfin.Api.Extensions;
|
||||
using Jellyfin.Api.ModelBinders;
|
||||
using Jellyfin.Api.Models.LibraryDtos;
|
||||
using Jellyfin.Data.Entities;
|
||||
using Jellyfin.Data.Enums;
|
||||
using Jellyfin.Extensions;
|
||||
using MediaBrowser.Common.Progress;
|
||||
using MediaBrowser.Controller.Configuration;
|
||||
using MediaBrowser.Controller.Dto;
|
||||
@@ -22,7 +24,6 @@ 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.Providers;
|
||||
using MediaBrowser.Model.Activity;
|
||||
@@ -36,7 +37,6 @@ using Microsoft.AspNetCore.Authorization;
|
||||
using Microsoft.AspNetCore.Http;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using Book = MediaBrowser.Controller.Entities.Book;
|
||||
|
||||
namespace Jellyfin.Api.Controllers
|
||||
{
|
||||
@@ -331,10 +331,10 @@ namespace Jellyfin.Api.Controllers
|
||||
[Authorize(Policy = Policies.DefaultAuthorization)]
|
||||
[ProducesResponseType(StatusCodes.Status204NoContent)]
|
||||
[ProducesResponseType(StatusCodes.Status401Unauthorized)]
|
||||
public ActionResult DeleteItem(Guid itemId)
|
||||
public async Task<ActionResult> DeleteItem(Guid itemId)
|
||||
{
|
||||
var item = _libraryManager.GetItemById(itemId);
|
||||
var auth = _authContext.GetAuthorizationInfo(Request);
|
||||
var auth = await _authContext.GetAuthorizationInfo(Request).ConfigureAwait(false);
|
||||
var user = auth.User;
|
||||
|
||||
if (!item.CanDelete(user))
|
||||
@@ -361,7 +361,7 @@ namespace Jellyfin.Api.Controllers
|
||||
[Authorize(Policy = Policies.DefaultAuthorization)]
|
||||
[ProducesResponseType(StatusCodes.Status204NoContent)]
|
||||
[ProducesResponseType(StatusCodes.Status401Unauthorized)]
|
||||
public ActionResult DeleteItems([FromQuery, ModelBinder(typeof(CommaDelimitedArrayModelBinder))] Guid[] ids)
|
||||
public async Task<ActionResult> DeleteItems([FromQuery, ModelBinder(typeof(CommaDelimitedArrayModelBinder))] Guid[] ids)
|
||||
{
|
||||
if (ids.Length == 0)
|
||||
{
|
||||
@@ -371,7 +371,7 @@ namespace Jellyfin.Api.Controllers
|
||||
foreach (var i in ids)
|
||||
{
|
||||
var item = _libraryManager.GetItemById(i);
|
||||
var auth = _authContext.GetAuthorizationInfo(Request);
|
||||
var auth = await _authContext.GetAuthorizationInfo(Request).ConfigureAwait(false);
|
||||
var user = auth.User;
|
||||
|
||||
if (!item.CanDelete(user))
|
||||
@@ -413,14 +413,14 @@ namespace Jellyfin.Api.Controllers
|
||||
|
||||
var counts = new ItemCounts
|
||||
{
|
||||
AlbumCount = GetCount(typeof(MusicAlbum), user, isFavorite),
|
||||
EpisodeCount = GetCount(typeof(Episode), user, isFavorite),
|
||||
MovieCount = GetCount(typeof(Movie), user, isFavorite),
|
||||
SeriesCount = GetCount(typeof(Series), user, isFavorite),
|
||||
SongCount = GetCount(typeof(Audio), user, isFavorite),
|
||||
MusicVideoCount = GetCount(typeof(MusicVideo), user, isFavorite),
|
||||
BoxSetCount = GetCount(typeof(BoxSet), user, isFavorite),
|
||||
BookCount = GetCount(typeof(Book), user, isFavorite)
|
||||
AlbumCount = GetCount(BaseItemKind.MusicAlbum, user, isFavorite),
|
||||
EpisodeCount = GetCount(BaseItemKind.Episode, user, isFavorite),
|
||||
MovieCount = GetCount(BaseItemKind.Movie, user, isFavorite),
|
||||
SeriesCount = GetCount(BaseItemKind.Series, user, isFavorite),
|
||||
SongCount = GetCount(BaseItemKind.Audio, user, isFavorite),
|
||||
MusicVideoCount = GetCount(BaseItemKind.MusicVideo, user, isFavorite),
|
||||
BoxSetCount = GetCount(BaseItemKind.BoxSet, user, isFavorite),
|
||||
BookCount = GetCount(BaseItemKind.Book, user, isFavorite)
|
||||
};
|
||||
|
||||
return counts;
|
||||
@@ -529,7 +529,7 @@ namespace Jellyfin.Api.Controllers
|
||||
{
|
||||
var series = _libraryManager.GetItemList(new InternalItemsQuery
|
||||
{
|
||||
IncludeItemTypes = new[] { nameof(Series) },
|
||||
IncludeItemTypes = new[] { BaseItemKind.Series },
|
||||
DtoOptions = new DtoOptions(false)
|
||||
{
|
||||
EnableImages = false
|
||||
@@ -559,7 +559,7 @@ namespace Jellyfin.Api.Controllers
|
||||
{
|
||||
var movies = _libraryManager.GetItemList(new InternalItemsQuery
|
||||
{
|
||||
IncludeItemTypes = new[] { nameof(Movie) },
|
||||
IncludeItemTypes = new[] { BaseItemKind.Movie },
|
||||
DtoOptions = new DtoOptions(false)
|
||||
{
|
||||
EnableImages = false
|
||||
@@ -627,7 +627,7 @@ namespace Jellyfin.Api.Controllers
|
||||
return NotFound();
|
||||
}
|
||||
|
||||
var auth = _authContext.GetAuthorizationInfo(Request);
|
||||
var auth = await _authContext.GetAuthorizationInfo(Request).ConfigureAwait(false);
|
||||
|
||||
var user = auth.User;
|
||||
|
||||
@@ -700,7 +700,7 @@ namespace Jellyfin.Api.Controllers
|
||||
: _libraryManager.RootFolder)
|
||||
: _libraryManager.GetItemById(itemId);
|
||||
|
||||
if (item is Episode || (item is IItemByName && !(item is MusicArtist)))
|
||||
if (item is Episode || (item is IItemByName && item is not MusicArtist))
|
||||
{
|
||||
return new QueryResult<BaseItemDto>();
|
||||
}
|
||||
@@ -715,30 +715,31 @@ namespace Jellyfin.Api.Controllers
|
||||
bool? isMovie = item is Movie || (program != null && program.IsMovie) || item is Trailer;
|
||||
bool? isSeries = item is Series || (program != null && program.IsSeries);
|
||||
|
||||
var includeItemTypes = new List<string>();
|
||||
var includeItemTypes = new List<BaseItemKind>();
|
||||
if (isMovie.Value)
|
||||
{
|
||||
includeItemTypes.Add(nameof(Movie));
|
||||
includeItemTypes.Add(BaseItemKind.Movie);
|
||||
if (_serverConfigurationManager.Configuration.EnableExternalContentInSuggestions)
|
||||
{
|
||||
includeItemTypes.Add(nameof(Trailer));
|
||||
includeItemTypes.Add(nameof(LiveTvProgram));
|
||||
includeItemTypes.Add(BaseItemKind.Trailer);
|
||||
includeItemTypes.Add(BaseItemKind.LiveTvProgram);
|
||||
}
|
||||
}
|
||||
else if (isSeries.Value)
|
||||
{
|
||||
includeItemTypes.Add(nameof(Series));
|
||||
includeItemTypes.Add(BaseItemKind.Series);
|
||||
}
|
||||
else
|
||||
{
|
||||
// For non series and movie types these columns are typically null
|
||||
// isSeries = null;
|
||||
isMovie = null;
|
||||
includeItemTypes.Add(item.GetType().Name);
|
||||
includeItemTypes.Add(item.GetBaseItemKind());
|
||||
}
|
||||
|
||||
var query = new InternalItemsQuery(user)
|
||||
{
|
||||
Genres = item.Genres,
|
||||
Limit = limit,
|
||||
IncludeItemTypes = includeItemTypes.ToArray(),
|
||||
SimilarTo = item,
|
||||
@@ -785,7 +786,7 @@ namespace Jellyfin.Api.Controllers
|
||||
var typesList = types.ToList();
|
||||
|
||||
var plugins = _providerManager.GetAllMetadataPlugins()
|
||||
.Where(i => types.Contains(i.ItemType, StringComparer.OrdinalIgnoreCase))
|
||||
.Where(i => types.Contains(i.ItemType, StringComparison.OrdinalIgnoreCase))
|
||||
.OrderBy(i => typesList.IndexOf(i.ItemType))
|
||||
.ToList();
|
||||
|
||||
@@ -871,11 +872,11 @@ namespace Jellyfin.Api.Controllers
|
||||
return result;
|
||||
}
|
||||
|
||||
private int GetCount(Type type, User? user, bool? isFavorite)
|
||||
private int GetCount(BaseItemKind itemKind, User? user, bool? isFavorite)
|
||||
{
|
||||
var query = new InternalItemsQuery(user)
|
||||
{
|
||||
IncludeItemTypes = new[] { type.Name },
|
||||
IncludeItemTypes = new[] { itemKind },
|
||||
Limit = 0,
|
||||
Recursive = true,
|
||||
IsVirtualItem = false,
|
||||
@@ -940,10 +941,10 @@ namespace Jellyfin.Api.Controllers
|
||||
}
|
||||
|
||||
var metadataOptions = _serverConfigurationManager.Configuration.MetadataOptions
|
||||
.Where(i => itemTypes.Contains(i.ItemType ?? string.Empty, StringComparer.OrdinalIgnoreCase))
|
||||
.Where(i => itemTypes.Contains(i.ItemType ?? string.Empty, StringComparison.OrdinalIgnoreCase))
|
||||
.ToArray();
|
||||
|
||||
return metadataOptions.Length == 0 || metadataOptions.Any(i => !i.DisabledMetadataSavers.Contains(name, StringComparer.OrdinalIgnoreCase));
|
||||
return metadataOptions.Length == 0 || metadataOptions.Any(i => !i.DisabledMetadataSavers.Contains(name, StringComparison.OrdinalIgnoreCase));
|
||||
}
|
||||
|
||||
private bool IsMetadataFetcherEnabledByDefault(string name, string type, bool isNewLibrary)
|
||||
@@ -967,7 +968,7 @@ namespace Jellyfin.Api.Controllers
|
||||
.ToArray();
|
||||
|
||||
return metadataOptions.Length == 0
|
||||
|| metadataOptions.Any(i => !i.DisabledMetadataFetchers.Contains(name, StringComparer.OrdinalIgnoreCase));
|
||||
|| metadataOptions.Any(i => !i.DisabledMetadataFetchers.Contains(name, StringComparison.OrdinalIgnoreCase));
|
||||
}
|
||||
|
||||
private bool IsImageFetcherEnabledByDefault(string name, string type, bool isNewLibrary)
|
||||
@@ -997,7 +998,7 @@ namespace Jellyfin.Api.Controllers
|
||||
return true;
|
||||
}
|
||||
|
||||
return metadataOptions.Any(i => !i.DisabledImageFetchers.Contains(name, StringComparer.OrdinalIgnoreCase));
|
||||
return metadataOptions.Any(i => !i.DisabledImageFetchers.Contains(name, StringComparison.OrdinalIgnoreCase));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user