mirror of
https://github.com/jellyfin/jellyfin.git
synced 2025-12-22 16:54:46 +03:00
Readd wildcard search (#14934)
This commit is contained in:
@@ -75,6 +75,7 @@ public sealed class BaseItemRepository
|
|||||||
private static readonly IReadOnlyList<ItemValueType> _getAlbumArtistValueTypes = [ItemValueType.AlbumArtist];
|
private static readonly IReadOnlyList<ItemValueType> _getAlbumArtistValueTypes = [ItemValueType.AlbumArtist];
|
||||||
private static readonly IReadOnlyList<ItemValueType> _getStudiosValueTypes = [ItemValueType.Studios];
|
private static readonly IReadOnlyList<ItemValueType> _getStudiosValueTypes = [ItemValueType.Studios];
|
||||||
private static readonly IReadOnlyList<ItemValueType> _getGenreValueTypes = [ItemValueType.Genre];
|
private static readonly IReadOnlyList<ItemValueType> _getGenreValueTypes = [ItemValueType.Genre];
|
||||||
|
private static readonly IReadOnlyList<char> SearchWildcardTerms = ['%', '_', '[', ']', '^'];
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Initializes a new instance of the <see cref="BaseItemRepository"/> class.
|
/// Initializes a new instance of the <see cref="BaseItemRepository"/> class.
|
||||||
@@ -1693,7 +1694,15 @@ public sealed class BaseItemRepository
|
|||||||
if (!string.IsNullOrEmpty(filter.SearchTerm))
|
if (!string.IsNullOrEmpty(filter.SearchTerm))
|
||||||
{
|
{
|
||||||
var searchTerm = filter.SearchTerm.ToLower();
|
var searchTerm = filter.SearchTerm.ToLower();
|
||||||
baseQuery = baseQuery.Where(e => e.CleanName!.ToLower().Contains(searchTerm) || (e.OriginalTitle != null && e.OriginalTitle.ToLower().Contains(searchTerm)));
|
if (SearchWildcardTerms.Any(f => searchTerm.Contains(f)))
|
||||||
|
{
|
||||||
|
searchTerm = $"%{searchTerm.Trim('%')}%";
|
||||||
|
baseQuery = baseQuery.Where(e => EF.Functions.Like(e.CleanName!.ToLower(), searchTerm) || (e.OriginalTitle != null && EF.Functions.Like(e.OriginalTitle.ToLower(), searchTerm)));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
baseQuery = baseQuery.Where(e => e.CleanName!.ToLower().Contains(searchTerm) || (e.OriginalTitle != null && e.OriginalTitle.ToLower().Contains(searchTerm)));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (filter.IsFolder.HasValue)
|
if (filter.IsFolder.HasValue)
|
||||||
@@ -1904,9 +1913,17 @@ public sealed class BaseItemRepository
|
|||||||
var nameContains = filter.NameContains;
|
var nameContains = filter.NameContains;
|
||||||
if (!string.IsNullOrWhiteSpace(nameContains))
|
if (!string.IsNullOrWhiteSpace(nameContains))
|
||||||
{
|
{
|
||||||
baseQuery = baseQuery.Where(e =>
|
if (SearchWildcardTerms.Any(f => nameContains.Contains(f)))
|
||||||
e.CleanName!.Contains(nameContains)
|
{
|
||||||
|| e.OriginalTitle!.ToLower().Contains(nameContains!));
|
nameContains = $"%{nameContains.Trim('%')}%";
|
||||||
|
baseQuery = baseQuery.Where(e => EF.Functions.Like(e.CleanName, nameContains) || EF.Functions.Like(e.OriginalTitle, nameContains));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
baseQuery = baseQuery.Where(e =>
|
||||||
|
e.CleanName!.Contains(nameContains)
|
||||||
|
|| e.OriginalTitle!.ToLower().Contains(nameContains!));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!string.IsNullOrWhiteSpace(filter.NameStartsWith))
|
if (!string.IsNullOrWhiteSpace(filter.NameStartsWith))
|
||||||
|
|||||||
Reference in New Issue
Block a user