Selaa lähdekoodia

Use DistinctBy introduced in .NET 6

Bond_009 2 vuotta sitten
vanhempi
sitoutus
6481376b81

+ 1 - 2
Emby.Server.Implementations/Dto/DtoService.cs

@@ -574,8 +574,7 @@ namespace Emby.Server.Implementations.Dto
                 .Where(i => user is null ?
                     true :
                     i.IsVisible(user))
-                .GroupBy(i => i.Name, StringComparer.OrdinalIgnoreCase)
-                .Select(x => x.First())
+                .DistinctBy(x => x.Name, StringComparer.OrdinalIgnoreCase)
                 .ToDictionary(i => i.Name, StringComparer.OrdinalIgnoreCase);
 
             for (var i = 0; i < people.Count; i++)

+ 3 - 6
Emby.Server.Implementations/EntryPoints/LibraryChangedNotifier.cs

@@ -282,19 +282,16 @@ namespace Emby.Server.Implementations.EntryPoints
             {
                 // Remove dupes in case some were saved multiple times
                 var foldersAddedTo = _foldersAddedTo
-                                        .GroupBy(x => x.Id)
-                                        .Select(x => x.First())
+                                        .DistinctBy(x => x.Id)
                                         .ToList();
 
                 var foldersRemovedFrom = _foldersRemovedFrom
-                                            .GroupBy(x => x.Id)
-                                            .Select(x => x.First())
+                                            .DistinctBy(x => x.Id)
                                             .ToList();
 
                 var itemsUpdated = _itemsUpdated
                                     .Where(i => !_itemsAdded.Contains(i))
-                                    .GroupBy(x => x.Id)
-                                    .Select(x => x.First())
+                                    .DistinctBy(x => x.Id)
                                     .ToList();
 
                 SendChangeNotifications(_itemsAdded.ToList(), itemsUpdated, _itemsRemoved.ToList(), foldersAddedTo, foldersRemovedFrom, CancellationToken.None).GetAwaiter().GetResult();

+ 1 - 2
Emby.Server.Implementations/EntryPoints/UserDataChangeNotifier.cs

@@ -123,8 +123,7 @@ namespace Emby.Server.Implementations.EntryPoints
             var user = _userManager.GetUserById(userId);
 
             var dtoList = changedItems
-                .GroupBy(x => x.Id)
-                .Select(x => x.First())
+                .DistinctBy(x => x.Id)
                 .Select(i =>
                 {
                     var dto = _userDataManager.GetUserDataDto(i, user);

+ 1 - 2
Emby.Server.Implementations/IO/FileRefresher.cs

@@ -133,8 +133,7 @@ namespace Emby.Server.Implementations.IO
                 .Distinct(StringComparer.OrdinalIgnoreCase)
                 .Select(GetAffectedBaseItem)
                 .Where(item => item is not null)
-                .GroupBy(x => x!.Id) // Removed null values in the previous .Where()
-                .Select(x => x.First())!;
+                .DistinctBy(x => x!.Id)!;  // Removed null values in the previous .Where()
 
             foreach (var item in itemsToRefresh)
             {

+ 1 - 2
Emby.Server.Implementations/Images/DynamicImageProvider.cs

@@ -81,8 +81,7 @@ namespace Emby.Server.Implementations.Images
                 }
 
                 return i;
-            }).GroupBy(x => x.Id)
-            .Select(x => x.First());
+            }).DistinctBy(x => x.Id);
 
             List<BaseItem> returnItems;
             if (isUsingCollectionStrip)

+ 1 - 2
Emby.Server.Implementations/Images/PlaylistImageProvider.cs

@@ -58,8 +58,7 @@ namespace Emby.Server.Implementations.Images
                     return null;
                 })
                 .Where(i => i is not null)
-                .GroupBy(x => x.Id)
-                .Select(x => x.First())
+                .DistinctBy(x => x.Id)
                 .ToList();
         }
     }

+ 1 - 2
Emby.Server.Implementations/LiveTv/LiveTvManager.cs

@@ -2392,8 +2392,7 @@ namespace Emby.Server.Implementations.LiveTv
                 .Select(i => _libraryManager.FindByPath(i, true))
                 .Where(i => i is not null && i.IsVisibleStandalone(user))
                 .SelectMany(i => _libraryManager.GetCollectionFolders(i))
-                .GroupBy(x => x.Id)
-                .Select(x => x.First())
+                .DistinctBy(x => x.Id)
                 .OrderBy(i => i.SortName)
                 .ToList();
 

+ 5 - 10
Jellyfin.Api/Controllers/LibraryController.cs

@@ -770,8 +770,7 @@ namespace Jellyfin.Api.Controllers
                     Name = i.Name,
                     DefaultEnabled = IsSaverEnabledByDefault(i.Name, types, isNewLibrary)
                 })
-                .GroupBy(i => i.Name, StringComparer.OrdinalIgnoreCase)
-                .Select(x => x.First())
+                .DistinctBy(i => i.Name, StringComparer.OrdinalIgnoreCase)
                 .ToArray();
 
             result.MetadataReaders = plugins
@@ -781,8 +780,7 @@ namespace Jellyfin.Api.Controllers
                     Name = i.Name,
                     DefaultEnabled = true
                 })
-                .GroupBy(i => i.Name, StringComparer.OrdinalIgnoreCase)
-                .Select(x => x.First())
+                .DistinctBy(i => i.Name, StringComparer.OrdinalIgnoreCase)
                 .ToArray();
 
             result.SubtitleFetchers = plugins
@@ -792,8 +790,7 @@ namespace Jellyfin.Api.Controllers
                     Name = i.Name,
                     DefaultEnabled = true
                 })
-                .GroupBy(i => i.Name, StringComparer.OrdinalIgnoreCase)
-                .Select(x => x.First())
+                .DistinctBy(i => i.Name, StringComparer.OrdinalIgnoreCase)
                 .ToArray();
 
             var typeOptions = new List<LibraryTypeOptionsDto>();
@@ -814,8 +811,7 @@ namespace Jellyfin.Api.Controllers
                         Name = i.Name,
                         DefaultEnabled = IsMetadataFetcherEnabledByDefault(i.Name, type, isNewLibrary)
                     })
-                    .GroupBy(i => i.Name, StringComparer.OrdinalIgnoreCase)
-                    .Select(x => x.First())
+                    .DistinctBy(i => i.Name, StringComparer.OrdinalIgnoreCase)
                     .ToArray(),
 
                     ImageFetchers = plugins
@@ -826,8 +822,7 @@ namespace Jellyfin.Api.Controllers
                         Name = i.Name,
                         DefaultEnabled = IsImageFetcherEnabledByDefault(i.Name, type, isNewLibrary)
                     })
-                    .GroupBy(i => i.Name, StringComparer.OrdinalIgnoreCase)
-                    .Select(x => x.First())
+                    .DistinctBy(i => i.Name, StringComparer.OrdinalIgnoreCase)
                     .ToArray(),
 
                     SupportedImageTypes = plugins

+ 2 - 4
Jellyfin.Api/Controllers/MoviesController.cs

@@ -200,8 +200,7 @@ namespace Jellyfin.Api.Controllers
                         IsMovie = true,
                         EnableGroupByMetadataKey = true,
                         DtoOptions = dtoOptions
-                    }).GroupBy(i => i.GetProviderId(MediaBrowser.Model.Entities.MetadataProvider.Imdb) ?? Guid.NewGuid().ToString("N", CultureInfo.InvariantCulture))
-                    .Select(x => x.First())
+                    }).DistinctBy(i => i.GetProviderId(MediaBrowser.Model.Entities.MetadataProvider.Imdb) ?? Guid.NewGuid().ToString("N", CultureInfo.InvariantCulture))
                     .Take(itemLimit)
                     .ToList();
 
@@ -240,8 +239,7 @@ namespace Jellyfin.Api.Controllers
                     IsMovie = true,
                     EnableGroupByMetadataKey = true,
                     DtoOptions = dtoOptions
-                }).GroupBy(i => i.GetProviderId(MediaBrowser.Model.Entities.MetadataProvider.Imdb) ?? Guid.NewGuid().ToString("N", CultureInfo.InvariantCulture))
-                    .Select(x => x.First())
+                }).DistinctBy(i => i.GetProviderId(MediaBrowser.Model.Entities.MetadataProvider.Imdb) ?? Guid.NewGuid().ToString("N", CultureInfo.InvariantCulture))
                     .Take(itemLimit)
                     .ToList();
 

+ 1 - 2
MediaBrowser.Controller/Entities/CollectionFolder.cs

@@ -355,8 +355,7 @@ namespace MediaBrowser.Controller.Entities
             return PhysicalLocations
                     .Where(i => !FileSystem.AreEqual(i, Path))
                     .SelectMany(i => GetPhysicalParents(i, rootChildren))
-                    .GroupBy(x => x.Id)
-                    .Select(x => x.First());
+                    .DistinctBy(x => x.Id);
         }
 
         private IEnumerable<Folder> GetPhysicalParents(string path, List<Folder> rootChildren)

+ 1 - 1
MediaBrowser.Controller/Entities/TV/Series.cs

@@ -283,7 +283,7 @@ namespace MediaBrowser.Controller.Entities.TV
             // This depends on settings for that series
             // When this happens, remove the duplicate from season 0
 
-            return allEpisodes.GroupBy(i => i.Id).Select(x => x.First()).Reverse();
+            return allEpisodes.DistinctBy(i => i.Id).Reverse();
         }
 
         public async Task RefreshAllMetadata(MetadataRefreshOptions refreshOptions, IProgress<double> progress, CancellationToken cancellationToken)

+ 1 - 2
MediaBrowser.Controller/Library/NameExtensions.cs

@@ -10,8 +10,7 @@ namespace MediaBrowser.Controller.Library
     public static class NameExtensions
     {
         public static IEnumerable<string> DistinctNames(this IEnumerable<string> names)
-            => names.GroupBy(RemoveDiacritics, StringComparer.OrdinalIgnoreCase)
-                .Select(x => x.First());
+            => names.DistinctBy(RemoveDiacritics, StringComparer.OrdinalIgnoreCase);
 
         private static string RemoveDiacritics(string? name)
         {