Merge pull request #9787 from TheMelmacian/feature/language_filters

New filters for audio and subtitle languages
This commit is contained in:
Bond-009
2026-05-15 15:44:22 +02:00
committed by GitHub
12 changed files with 177 additions and 9 deletions

View File

@@ -111,7 +111,9 @@ public static class DescendantQueryHelper
private static HashSet<Guid> GetMatchingMediaStreamItemIds(JellyfinDbContext context, HasMediaStreamType criteria)
{
var query = context.MediaStreamInfos
.Where(ms => ms.StreamType == criteria.StreamType && ms.Language == criteria.Language);
.Where(ms => ms.StreamType == criteria.StreamType
&& (criteria.Language.Contains(ms.Language)
|| (criteria.Language.Contains("und") && string.IsNullOrEmpty(ms.Language)))); // und = undetermined
if (criteria.IsExternal.HasValue)
{

View File

@@ -1,3 +1,6 @@
#pragma warning disable SA1313 // Parameter names should begin with lower-case letter
using System.Collections.Generic;
using Jellyfin.Database.Implementations.Entities;
namespace Jellyfin.Database.Implementations.MatchCriteria;
@@ -6,9 +9,23 @@ namespace Jellyfin.Database.Implementations.MatchCriteria;
/// Matches folders containing descendants with a specific media stream type and language.
/// </summary>
/// <param name="StreamType">The type of media stream to match (Audio, Subtitle, etc.).</param>
/// <param name="Language">The language to match.</param>
/// <param name="Language">List of languages to match.</param>
/// <param name="IsExternal">If not null, filters by internal (false) or external (true) streams. Only applicable to subtitles.</param>
public sealed record HasMediaStreamType(
MediaStreamTypeEntity StreamType,
string Language,
bool? IsExternal = null) : FolderMatchCriteria;
IReadOnlyCollection<string> Language,
bool? IsExternal = null) : FolderMatchCriteria
{
/// <summary>
/// Initializes a new instance of the <see cref="HasMediaStreamType"/> class.
/// </summary>
/// <param name="StreamType">The type of media stream to match (Audio, Subtitle, etc.).</param>
/// <param name="Language">The language to match.</param>
/// <param name="IsExternal">If not null, filters by internal (false) or external (true) streams. Only applicable to subtitles.</param>
public HasMediaStreamType(
MediaStreamTypeEntity StreamType,
string Language,
bool? IsExternal = null) : this(StreamType, [Language], IsExternal)
{
}
}