mirror of
https://github.com/jellyfin/jellyfin.git
synced 2026-04-20 17:14:42 +01:00
improve name matching
This commit is contained in:
@@ -1,6 +1,5 @@
|
||||
using System;
|
||||
using MediaBrowser.Controller.Library;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
|
||||
namespace MediaBrowser.Controller.Entities.Audio
|
||||
{
|
||||
@@ -20,11 +19,11 @@ namespace MediaBrowser.Controller.Entities.Audio
|
||||
{
|
||||
public static bool HasArtist(this IHasArtist hasArtist, string artist)
|
||||
{
|
||||
return hasArtist.Artists.Contains(artist, StringComparer.OrdinalIgnoreCase);
|
||||
return NameExtensions.EqualsAny(hasArtist.Artists, artist);
|
||||
}
|
||||
public static bool HasAnyArtist(this IHasArtist hasArtist, string artist)
|
||||
{
|
||||
return hasArtist.AllArtists.Contains(artist, StringComparer.OrdinalIgnoreCase);
|
||||
return NameExtensions.EqualsAny(hasArtist.AllArtists, artist);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
using MediaBrowser.Controller.Providers;
|
||||
using MediaBrowser.Model.Configuration;
|
||||
using MediaBrowser.Model.Entities;
|
||||
using MediaBrowser.Model.Querying;
|
||||
using MediaBrowser.Model.Users;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
@@ -283,7 +283,7 @@ namespace MediaBrowser.Controller.Entities
|
||||
var tasks = GetRecursiveChildren(parent, user, new[] { CollectionType.Music, CollectionType.MusicVideos })
|
||||
.Where(i => !i.IsFolder)
|
||||
.SelectMany(i => i.Genres)
|
||||
.Distinct(StringComparer.OrdinalIgnoreCase)
|
||||
.DistinctNames()
|
||||
.Select(i =>
|
||||
{
|
||||
try
|
||||
@@ -313,7 +313,7 @@ namespace MediaBrowser.Controller.Entities
|
||||
.Where(i => i.Genres.Contains(displayParent.Name, StringComparer.OrdinalIgnoreCase))
|
||||
.OfType<IHasAlbumArtist>()
|
||||
.SelectMany(i => i.AlbumArtists)
|
||||
.Distinct(StringComparer.OrdinalIgnoreCase)
|
||||
.DistinctNames()
|
||||
.Select(i =>
|
||||
{
|
||||
try
|
||||
@@ -337,7 +337,7 @@ namespace MediaBrowser.Controller.Entities
|
||||
.Where(i => !i.IsFolder)
|
||||
.OfType<IHasAlbumArtist>()
|
||||
.SelectMany(i => i.AlbumArtists)
|
||||
.Distinct(StringComparer.OrdinalIgnoreCase)
|
||||
.DistinctNames()
|
||||
.Select(i =>
|
||||
{
|
||||
try
|
||||
@@ -361,7 +361,7 @@ namespace MediaBrowser.Controller.Entities
|
||||
.Where(i => !i.IsFolder)
|
||||
.OfType<IHasArtist>()
|
||||
.SelectMany(i => i.Artists)
|
||||
.Distinct(StringComparer.OrdinalIgnoreCase)
|
||||
.DistinctNames()
|
||||
.Select(i =>
|
||||
{
|
||||
try
|
||||
@@ -385,7 +385,7 @@ namespace MediaBrowser.Controller.Entities
|
||||
.Where(i => !i.IsFolder)
|
||||
.OfType<IHasAlbumArtist>()
|
||||
.SelectMany(i => i.AlbumArtists)
|
||||
.Distinct(StringComparer.OrdinalIgnoreCase)
|
||||
.DistinctNames()
|
||||
.Select(i =>
|
||||
{
|
||||
try
|
||||
@@ -552,7 +552,7 @@ namespace MediaBrowser.Controller.Entities
|
||||
var tasks = GetRecursiveChildren(parent, user, new[] { CollectionType.Movies, CollectionType.BoxSets, string.Empty })
|
||||
.Where(i => i is Movie)
|
||||
.SelectMany(i => i.Genres)
|
||||
.Distinct(StringComparer.OrdinalIgnoreCase)
|
||||
.DistinctNames()
|
||||
.Select(i =>
|
||||
{
|
||||
try
|
||||
@@ -724,7 +724,7 @@ namespace MediaBrowser.Controller.Entities
|
||||
var tasks = GetRecursiveChildren(parent, user, new[] { CollectionType.TvShows, string.Empty })
|
||||
.OfType<Series>()
|
||||
.SelectMany(i => i.Genres)
|
||||
.Distinct(StringComparer.OrdinalIgnoreCase)
|
||||
.DistinctNames()
|
||||
.Select(i =>
|
||||
{
|
||||
try
|
||||
@@ -776,7 +776,7 @@ namespace MediaBrowser.Controller.Entities
|
||||
var tasks = GetRecursiveChildren(parent, user, new[] { CollectionType.Games })
|
||||
.OfType<Game>()
|
||||
.SelectMany(i => i.Genres)
|
||||
.Distinct(StringComparer.OrdinalIgnoreCase)
|
||||
.DistinctNames()
|
||||
.Select(i =>
|
||||
{
|
||||
try
|
||||
|
||||
41
MediaBrowser.Controller/Library/NameExtensions.cs
Normal file
41
MediaBrowser.Controller/Library/NameExtensions.cs
Normal file
@@ -0,0 +1,41 @@
|
||||
using MediaBrowser.Common.Extensions;
|
||||
using MoreLinq;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
|
||||
namespace MediaBrowser.Controller.Library
|
||||
{
|
||||
public static class NameExtensions
|
||||
{
|
||||
public static bool AreEqual(string name1, string name2)
|
||||
{
|
||||
name1 = NormalizeForComparison(name1);
|
||||
name2 = NormalizeForComparison(name2);
|
||||
|
||||
return string.Equals(name1, name2, StringComparison.OrdinalIgnoreCase);
|
||||
}
|
||||
|
||||
public static bool EqualsAny(IEnumerable<string> names, string name)
|
||||
{
|
||||
name = NormalizeForComparison(name);
|
||||
|
||||
return names.Any(i => string.Equals(NormalizeForComparison(i), name, StringComparison.OrdinalIgnoreCase));
|
||||
}
|
||||
|
||||
private static string NormalizeForComparison(string name)
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(name))
|
||||
{
|
||||
return string.Empty;
|
||||
}
|
||||
|
||||
return name.RemoveDiacritics();
|
||||
}
|
||||
|
||||
public static IEnumerable<string> DistinctNames(this IEnumerable<string> names)
|
||||
{
|
||||
return names.DistinctBy(NormalizeForComparison, StringComparer.OrdinalIgnoreCase);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -186,6 +186,7 @@
|
||||
<Compile Include="Library\IUserViewManager.cs" />
|
||||
<Compile Include="Library\LibraryManagerExtensions.cs" />
|
||||
<Compile Include="Library\MetadataConfigurationStore.cs" />
|
||||
<Compile Include="Library\NameExtensions.cs" />
|
||||
<Compile Include="Library\PlaybackStopEventArgs.cs" />
|
||||
<Compile Include="Library\UserDataSaveEventArgs.cs" />
|
||||
<Compile Include="LiveTv\ILiveTvItem.cs" />
|
||||
|
||||
Reference in New Issue
Block a user