|
@@ -75,6 +75,7 @@ public sealed class BaseItemRepository
|
|
|
private static readonly IReadOnlyList<ItemValueType> _getAlbumArtistValueTypes = [ItemValueType.AlbumArtist];
|
|
|
private static readonly IReadOnlyList<ItemValueType> _getStudiosValueTypes = [ItemValueType.Studios];
|
|
|
private static readonly IReadOnlyList<ItemValueType> _getGenreValueTypes = [ItemValueType.Genre];
|
|
|
+ private static readonly IReadOnlyList<char> SearchWildcardTerms = ['%', '_', '[', ']', '^'];
|
|
|
|
|
|
/// <summary>
|
|
|
/// Initializes a new instance of the <see cref="BaseItemRepository"/> class.
|
|
@@ -1693,7 +1694,15 @@ public sealed class BaseItemRepository
|
|
|
if (!string.IsNullOrEmpty(filter.SearchTerm))
|
|
|
{
|
|
|
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)
|
|
@@ -1904,9 +1913,17 @@ public sealed class BaseItemRepository
|
|
|
var nameContains = filter.NameContains;
|
|
|
if (!string.IsNullOrWhiteSpace(nameContains))
|
|
|
{
|
|
|
- baseQuery = baseQuery.Where(e =>
|
|
|
- e.CleanName!.Contains(nameContains)
|
|
|
- || e.OriginalTitle!.ToLower().Contains(nameContains!));
|
|
|
+ if (SearchWildcardTerms.Any(f => nameContains.Contains(f)))
|
|
|
+ {
|
|
|
+ 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))
|