provide language tags as filter values

This commit is contained in:
TheMelmacian 2023-06-11 21:42:14 +02:00
parent 0be2817ccb
commit 2ec438ddde
4 changed files with 60 additions and 0 deletions

View File

@ -173,6 +173,7 @@
- [scampower3](https://github.com/scampower3)
- [Chris-Codes-It] (https://github.com/Chris-Codes-It)
- [Pithaya](https://github.com/Pithaya)
- [TheMelmacian](https://github.com/TheMelmacian)
# Emby Contributors

View File

@ -1,4 +1,5 @@
using System;
using System.Collections.Generic;
using System.Linq;
using Jellyfin.Api.Helpers;
using Jellyfin.Api.ModelBinders;
@ -7,6 +8,7 @@ using MediaBrowser.Controller.Dto;
using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Library;
using MediaBrowser.Model.Dto;
using MediaBrowser.Model.Entities;
using MediaBrowser.Model.Querying;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Http;
@ -112,6 +114,20 @@ public class FilterController : BaseJellyfinApiController
.Where(i => !string.IsNullOrWhiteSpace(i))
.Distinct(StringComparer.OrdinalIgnoreCase)
.Order()
.ToArray(),
AudioLanguages = GetMediaStreams(itemList, BaseItemKind.Movie, BaseItemKind.Episode)
.Where(mediaStream => mediaStream.Type == MediaStreamType.Audio)
.Select(mediaStream => string.IsNullOrWhiteSpace(mediaStream.Language) ? "und" : mediaStream.Language)
.Distinct(StringComparer.OrdinalIgnoreCase)
.Order()
.ToArray(),
SubtitleLanguages = GetMediaStreams(itemList, BaseItemKind.Movie, BaseItemKind.Episode)
.Where(mediaStream => mediaStream.Type == MediaStreamType.Subtitle)
.Select(mediaStream => string.IsNullOrWhiteSpace(mediaStream.Language) ? "und" : mediaStream.Language)
.Distinct(StringComparer.OrdinalIgnoreCase)
.Order()
.ToArray()
};
}
@ -214,4 +230,32 @@ public class FilterController : BaseJellyfinApiController
return filters;
}
/// <summary>
/// Extracts the MediaStreams from the list of BaseItems.
/// If an item is a Folder, MediaStreams are searched in the list of it's child items.
/// </summary>
/// <param name="itemList">The list of items for which the MediaStreams should be xtracted.</param>
/// <param name="types">Optional list of item kinds for which the MediaStreams should be extracted.</param>
/// <returns>A list of all MediaStreams which are linked to the provided items.</returns>
private IEnumerable<MediaStream> GetMediaStreams(IEnumerable<BaseItem> itemList, params BaseItemKind[] types)
{
return itemList
.Where(item => item.IsFolder || types.Length == 0 || types.Contains(item.GetBaseItemKind()))
.SelectMany(item =>
{
if (item.IsFolder)
{
return GetMediaStreams(((Folder)item).Children, types);
}
else if (item is Video)
{
return ((Video)item).GetAllLinkedMediaStreams();
}
else
{
return item.GetMediaStreams();
}
});
}
}

View File

@ -379,6 +379,15 @@ namespace MediaBrowser.Controller.Entities
.OrderBy(i => i.SortName);
}
/// <summary>
/// Gets the MediaStreams for this Video and all alternate Versions (linked and local).
/// </summary>
/// <returns>A list of all MediaStreams which are linked to this Video.</returns>
public IEnumerable<MediaStream> GetAllLinkedMediaStreams()
{
return GetAllItemsForMediaSources().SelectMany(item => item.Item.GetMediaStreams());
}
/// <summary>
/// Gets the additional parts.
/// </summary>

View File

@ -13,6 +13,8 @@ namespace MediaBrowser.Model.Querying
Tags = Array.Empty<string>();
OfficialRatings = Array.Empty<string>();
Years = Array.Empty<int>();
AudioLanguages = Array.Empty<string>();
SubtitleLanguages = Array.Empty<string>();
}
public string[] Genres { get; set; }
@ -22,5 +24,9 @@ namespace MediaBrowser.Model.Querying
public string[] OfficialRatings { get; set; }
public int[] Years { get; set; }
public string[] AudioLanguages { get; set; }
public string[] SubtitleLanguages { get; set; }
}
}