mirror of https://github.com/jellyfin/jellyfin.git
add filters for audio and subtitle languages
This commit is contained in:
parent
6aa53748a7
commit
014a1afd86
|
@ -4372,6 +4372,20 @@ namespace Emby.Server.Implementations.Data
|
|||
}
|
||||
}
|
||||
|
||||
if (query.AudioLanguage.Length > 0)
|
||||
{
|
||||
var languages = string.Join(",", query.AudioLanguage.Select(lang => "'" + lang + "'"));
|
||||
var undefinedLanguage = query.AudioLanguage.Contains("und") ? "or ms.Language is null" : string.Empty; // language with null value is handled as unddefined
|
||||
mediaStreamsFilters.Add("SELECT CASE WHEN EXISTS (SELECT 1 FROM items JOIN MediaStreams ms ON ms.ItemId = items.ItemId AND ms.StreamType = 'Audio' AND (ms.Language in (" + languages + ") " + undefinedLanguage + ") limit 1) THEN TRUE ELSE FALSE END AS StreamFilterMatches");
|
||||
}
|
||||
|
||||
if (query.SubtitleLanguage.Length > 0)
|
||||
{
|
||||
var languages = string.Join(",", query.SubtitleLanguage.Select(lang => "'" + lang + "'"));
|
||||
var undefinedLanguage = query.SubtitleLanguage.Contains("und") ? "or ms.Language is null" : string.Empty; // language with null value is handled as unddefined
|
||||
mediaStreamsFilters.Add("SELECT CASE WHEN EXISTS (SELECT 1 FROM items JOIN MediaStreams ms ON ms.ItemId = items.ItemId AND ms.StreamType = 'Subtitle' AND (ms.Language in (" + languages + ") " + undefinedLanguage + ") limit 1) THEN TRUE ELSE FALSE END AS StreamFilterMatches");
|
||||
}
|
||||
|
||||
if (mediaStreamsFilters.Count > 0)
|
||||
{
|
||||
return "(NOT EXISTS (" + mediaStreamsQuery + " SELECT 1 FROM (" + string.Join(" UNION ", mediaStreamsFilters) + ") WHERE StreamFilterMatches = FALSE LIMIT 1))";
|
||||
|
@ -4969,7 +4983,9 @@ AND Type = @InternalPersonType)");
|
|||
NameContains = query.NameContains,
|
||||
SearchTerm = query.SearchTerm,
|
||||
SimilarTo = query.SimilarTo,
|
||||
ExcludeItemIds = query.ExcludeItemIds
|
||||
ExcludeItemIds = query.ExcludeItemIds,
|
||||
AudioLanguage = query.AudioLanguage,
|
||||
SubtitleLanguage = query.SubtitleLanguage
|
||||
};
|
||||
|
||||
var outerWhereClauses = GetWhereClauses(outerQuery, null);
|
||||
|
|
|
@ -146,6 +146,8 @@ public class ItemsController : BaseJellyfinApiController
|
|||
/// <param name="nameLessThan">Optional filter by items whose name is equally or lesser than a given input string.</param>
|
||||
/// <param name="studioIds">Optional. If specified, results will be filtered based on studio id. This allows multiple, pipe delimited.</param>
|
||||
/// <param name="genreIds">Optional. If specified, results will be filtered based on genre id. This allows multiple, pipe delimited.</param>
|
||||
/// <param name="audioLanguages">Optional. If specified, results will be filtered based on audio language. This allows multiple, comma delimited values.</param>
|
||||
/// <param name="subtitleLanguages">Optional. If specified, results will be filtered based on subtitale language. This allows multiple, comma delimited values.</param>
|
||||
/// <param name="enableTotalRecordCount">Optional. Enable the total record count.</param>
|
||||
/// <param name="enableImages">Optional, include image information in output.</param>
|
||||
/// <returns>A <see cref="QueryResult{BaseItemDto}"/> with the items.</returns>
|
||||
|
@ -235,6 +237,8 @@ public class ItemsController : BaseJellyfinApiController
|
|||
[FromQuery] string? nameLessThan,
|
||||
[FromQuery, ModelBinder(typeof(CommaDelimitedArrayModelBinder))] Guid[] studioIds,
|
||||
[FromQuery, ModelBinder(typeof(CommaDelimitedArrayModelBinder))] Guid[] genreIds,
|
||||
[FromQuery, ModelBinder(typeof(CommaDelimitedArrayModelBinder))] string[] audioLanguages,
|
||||
[FromQuery, ModelBinder(typeof(CommaDelimitedArrayModelBinder))] string[] subtitleLanguages,
|
||||
[FromQuery] bool enableTotalRecordCount = true,
|
||||
[FromQuery] bool? enableImages = true)
|
||||
{
|
||||
|
@ -363,6 +367,8 @@ public class ItemsController : BaseJellyfinApiController
|
|||
MinDateLastSavedForUser = minDateLastSavedForUser?.ToUniversalTime(),
|
||||
MinPremiereDate = minPremiereDate?.ToUniversalTime(),
|
||||
MaxPremiereDate = maxPremiereDate?.ToUniversalTime(),
|
||||
AudioLanguage = audioLanguages,
|
||||
SubtitleLanguage = subtitleLanguages,
|
||||
};
|
||||
|
||||
if (ids.Length != 0 || !string.IsNullOrWhiteSpace(searchTerm))
|
||||
|
@ -603,6 +609,8 @@ public class ItemsController : BaseJellyfinApiController
|
|||
/// <param name="nameLessThan">Optional filter by items whose name is equally or lesser than a given input string.</param>
|
||||
/// <param name="studioIds">Optional. If specified, results will be filtered based on studio id. This allows multiple, pipe delimited.</param>
|
||||
/// <param name="genreIds">Optional. If specified, results will be filtered based on genre id. This allows multiple, pipe delimited.</param>
|
||||
/// <param name="audioLanguages">Optional. If specified, results will be filtered based on audio language. This allows multiple, comma delimited values.</param>
|
||||
/// <param name="subtitleLanguages">Optional. If specified, results will be filtered based on subtitale language. This allows multiple, comma delimited values.</param>
|
||||
/// <param name="enableTotalRecordCount">Optional. Enable the total record count.</param>
|
||||
/// <param name="enableImages">Optional, include image information in output.</param>
|
||||
/// <returns>A <see cref="QueryResult{BaseItemDto}"/> with the items.</returns>
|
||||
|
@ -692,6 +700,8 @@ public class ItemsController : BaseJellyfinApiController
|
|||
[FromQuery] string? nameLessThan,
|
||||
[FromQuery, ModelBinder(typeof(CommaDelimitedArrayModelBinder))] Guid[] studioIds,
|
||||
[FromQuery, ModelBinder(typeof(CommaDelimitedArrayModelBinder))] Guid[] genreIds,
|
||||
[FromQuery, ModelBinder(typeof(CommaDelimitedArrayModelBinder))] string[] audioLanguages,
|
||||
[FromQuery, ModelBinder(typeof(CommaDelimitedArrayModelBinder))] string[] subtitleLanguages,
|
||||
[FromQuery] bool enableTotalRecordCount = true,
|
||||
[FromQuery] bool? enableImages = true)
|
||||
{
|
||||
|
@ -779,6 +789,8 @@ public class ItemsController : BaseJellyfinApiController
|
|||
nameLessThan,
|
||||
studioIds,
|
||||
genreIds,
|
||||
audioLanguages,
|
||||
subtitleLanguages,
|
||||
enableTotalRecordCount,
|
||||
enableImages);
|
||||
}
|
||||
|
|
|
@ -112,6 +112,8 @@ public class TrailersController : BaseJellyfinApiController
|
|||
/// <param name="nameLessThan">Optional filter by items whose name is equally or lesser than a given input string.</param>
|
||||
/// <param name="studioIds">Optional. If specified, results will be filtered based on studio id. This allows multiple, pipe delimited.</param>
|
||||
/// <param name="genreIds">Optional. If specified, results will be filtered based on genre id. This allows multiple, pipe delimited.</param>
|
||||
/// <param name="audioLanguages">Optional. If specified, results will be filtered based on audio language. This allows multiple, comma delimited values.</param>
|
||||
/// <param name="subtitleLanguages">Optional. If specified, results will be filtered based on subtitale language. This allows multiple, comma delimited values.</param>
|
||||
/// <param name="enableTotalRecordCount">Optional. Enable the total record count.</param>
|
||||
/// <param name="enableImages">Optional, include image information in output.</param>
|
||||
/// <returns>A <see cref="QueryResult{BaseItemDto}"/> with the trailers.</returns>
|
||||
|
@ -200,6 +202,8 @@ public class TrailersController : BaseJellyfinApiController
|
|||
[FromQuery] string? nameLessThan,
|
||||
[FromQuery, ModelBinder(typeof(CommaDelimitedArrayModelBinder))] Guid[] studioIds,
|
||||
[FromQuery, ModelBinder(typeof(CommaDelimitedArrayModelBinder))] Guid[] genreIds,
|
||||
[FromQuery, ModelBinder(typeof(CommaDelimitedArrayModelBinder))] string[] audioLanguages,
|
||||
[FromQuery, ModelBinder(typeof(CommaDelimitedArrayModelBinder))] string[] subtitleLanguages,
|
||||
[FromQuery] bool enableTotalRecordCount = true,
|
||||
[FromQuery] bool? enableImages = true)
|
||||
{
|
||||
|
@ -290,6 +294,8 @@ public class TrailersController : BaseJellyfinApiController
|
|||
nameLessThan,
|
||||
studioIds,
|
||||
genreIds,
|
||||
audioLanguages,
|
||||
subtitleLanguages,
|
||||
enableTotalRecordCount,
|
||||
enableImages);
|
||||
}
|
||||
|
|
|
@ -51,6 +51,8 @@ namespace MediaBrowser.Controller.Entities
|
|||
TrailerTypes = Array.Empty<TrailerType>();
|
||||
VideoTypes = Array.Empty<VideoType>();
|
||||
Years = Array.Empty<int>();
|
||||
AudioLanguage = Array.Empty<string>();
|
||||
SubtitleLanguage = Array.Empty<string>();
|
||||
}
|
||||
|
||||
public InternalItemsQuery(User? user)
|
||||
|
@ -358,6 +360,10 @@ namespace MediaBrowser.Controller.Entities
|
|||
|
||||
public string? SeriesTimerId { get; set; }
|
||||
|
||||
public string[] AudioLanguage { get; set; }
|
||||
|
||||
public string[] SubtitleLanguage { get; set; }
|
||||
|
||||
public void SetUser(User user)
|
||||
{
|
||||
MaxParentalRating = user.MaxParentalAgeRating;
|
||||
|
|
Loading…
Reference in New Issue