浏览代码

Merge pull request #8511 from Bond-009/isnull

Bond-009 2 年之前
父节点
当前提交
f3c57e6a0a
共有 100 个文件被更改,包括 698 次插入698 次删除
  1. 2 2
      Emby.Dlna/ContentDirectory/ContentDirectoryService.cs
  2. 1 1
      Emby.Dlna/ContentDirectory/ControlHandler.cs
  3. 16 16
      Emby.Dlna/Didl/DidlBuilder.cs
  4. 7 7
      Emby.Dlna/DlnaManager.cs
  5. 1 1
      Emby.Dlna/Eventing/DlnaEventManager.cs
  6. 7 7
      Emby.Dlna/Main/DlnaEntryPoint.cs
  7. 74 74
      Emby.Dlna/PlayTo/Device.cs
  8. 16 16
      Emby.Dlna/PlayTo/PlayToController.cs
  9. 2 2
      Emby.Dlna/PlayTo/PlayToManager.cs
  10. 2 2
      Emby.Dlna/PlayTo/PlaylistItemFactory.cs
  11. 3 3
      Emby.Dlna/PlayTo/TransportCommands.cs
  12. 1 1
      Emby.Dlna/Service/BaseControlHandler.cs
  13. 4 4
      Emby.Dlna/Ssdp/DeviceDiscovery.cs
  14. 1 1
      Emby.Drawing/ImageProcessor.cs
  15. 2 2
      Emby.Naming/AudioBook/AudioBookListResolver.cs
  16. 1 1
      Emby.Naming/AudioBook/AudioBookNameParser.cs
  17. 2 2
      Emby.Naming/ExternalFiles/ExternalPathParser.cs
  18. 1 1
      Emby.Naming/TV/EpisodePathParser.cs
  19. 1 1
      Emby.Naming/TV/SeriesPathParser.cs
  20. 1 1
      Emby.Naming/Video/ExtraRuleResolver.cs
  21. 3 3
      Emby.Naming/Video/VideoListResolver.cs
  22. 1 1
      Emby.Naming/Video/VideoResolver.cs
  23. 1 1
      Emby.Notifications/NotificationEntryPoint.cs
  24. 2 2
      Emby.Notifications/NotificationManager.cs
  25. 5 5
      Emby.Photos/PhotoProvider.cs
  26. 3 3
      Emby.Server.Implementations/AppBase/BaseConfigurationManager.cs
  27. 1 1
      Emby.Server.Implementations/AppBase/ConfigurationHelper.cs
  28. 4 4
      Emby.Server.Implementations/ApplicationHost.cs
  29. 14 14
      Emby.Server.Implementations/Channels/ChannelManager.cs
  30. 3 3
      Emby.Server.Implementations/Collections/CollectionImageProvider.cs
  31. 7 7
      Emby.Server.Implementations/Collections/CollectionManager.cs
  32. 1 1
      Emby.Server.Implementations/Data/BaseSqliteRepository.cs
  33. 1 1
      Emby.Server.Implementations/Data/CleanDatabaseScheduledTask.cs
  34. 1 1
      Emby.Server.Implementations/Data/SqliteExtensions.cs
  35. 58 58
      Emby.Server.Implementations/Data/SqliteItemRepository.cs
  36. 1 1
      Emby.Server.Implementations/Data/TypeMapper.cs
  37. 41 41
      Emby.Server.Implementations/Dto/DtoService.cs
  38. 5 5
      Emby.Server.Implementations/EntryPoints/LibraryChangedNotifier.cs
  39. 5 5
      Emby.Server.Implementations/EntryPoints/UserDataChangeNotifier.cs
  40. 2 2
      Emby.Server.Implementations/HttpServer/WebSocketConnection.cs
  41. 6 6
      Emby.Server.Implementations/IO/FileRefresher.cs
  42. 1 1
      Emby.Server.Implementations/IO/LibraryMonitor.cs
  43. 5 5
      Emby.Server.Implementations/IO/ManagedFileSystem.cs
  44. 1 1
      Emby.Server.Implementations/IO/StreamHelper.cs
  45. 5 5
      Emby.Server.Implementations/Images/BaseDynamicImageProvider.cs
  46. 3 3
      Emby.Server.Implementations/Images/DynamicImageProvider.cs
  47. 3 3
      Emby.Server.Implementations/Images/PlaylistImageProvider.cs
  48. 2 2
      Emby.Server.Implementations/Library/CoreResolutionIgnoreRule.cs
  49. 82 82
      Emby.Server.Implementations/Library/LibraryManager.cs
  50. 4 4
      Emby.Server.Implementations/Library/LiveStreamHelper.cs
  51. 15 15
      Emby.Server.Implementations/Library/MediaSourceManager.cs
  52. 1 1
      Emby.Server.Implementations/Library/MediaStreamSelector.cs
  53. 5 5
      Emby.Server.Implementations/Library/ResolverHelper.cs
  54. 5 5
      Emby.Server.Implementations/Library/Resolvers/Audio/AudioResolver.cs
  55. 2 2
      Emby.Server.Implementations/Library/Resolvers/BaseVideoResolver.cs
  56. 1 1
      Emby.Server.Implementations/Library/Resolvers/Books/BookResolver.cs
  57. 1 1
      Emby.Server.Implementations/Library/Resolvers/ExtraResolver.cs
  58. 1 1
      Emby.Server.Implementations/Library/Resolvers/GenericFolderResolver.cs
  59. 10 10
      Emby.Server.Implementations/Library/Resolvers/Movies/MovieResolver.cs
  60. 6 6
      Emby.Server.Implementations/Library/Resolvers/TV/EpisodeResolver.cs
  61. 1 1
      Emby.Server.Implementations/Library/Resolvers/TV/SeasonResolver.cs
  62. 3 3
      Emby.Server.Implementations/Library/Resolvers/TV/SeriesResolver.cs
  63. 1 1
      Emby.Server.Implementations/Library/UserDataManager.cs
  64. 5 5
      Emby.Server.Implementations/Library/UserViewManager.cs
  65. 1 1
      Emby.Server.Implementations/Library/Validators/CollectionPostScanTask.cs
  66. 1 1
      Emby.Server.Implementations/LiveTv/EmbyTV/DirectRecorder.cs
  67. 41 41
      Emby.Server.Implementations/LiveTv/EmbyTV/EmbyTV.cs
  68. 1 1
      Emby.Server.Implementations/LiveTv/EmbyTV/EncodedRecorder.cs
  69. 2 2
      Emby.Server.Implementations/LiveTv/EmbyTV/ItemDataProvider.cs
  70. 1 1
      Emby.Server.Implementations/LiveTv/EmbyTV/RecordingHelper.cs
  71. 1 1
      Emby.Server.Implementations/LiveTv/EmbyTV/TimerManager.cs
  72. 20 20
      Emby.Server.Implementations/LiveTv/Listings/SchedulesDirect.cs
  73. 3 3
      Emby.Server.Implementations/LiveTv/Listings/XmlTvListingsProvider.cs
  74. 23 23
      Emby.Server.Implementations/LiveTv/LiveTvDtoService.cs
  75. 23 23
      Emby.Server.Implementations/LiveTv/LiveTvManager.cs
  76. 2 2
      Emby.Server.Implementations/LiveTv/LiveTvMediaSourceProvider.cs
  77. 2 2
      Emby.Server.Implementations/LiveTv/TunerHosts/BaseTunerHost.cs
  78. 4 4
      Emby.Server.Implementations/LiveTv/TunerHosts/HdHomerun/HdHomerunHost.cs
  79. 1 1
      Emby.Server.Implementations/LiveTv/TunerHosts/HdHomerun/HdHomerunManager.cs
  80. 1 1
      Emby.Server.Implementations/LiveTv/TunerHosts/LiveStream.cs
  81. 2 2
      Emby.Server.Implementations/Localization/LocalizationManager.cs
  82. 1 1
      Emby.Server.Implementations/MediaEncoder/EncodingManager.cs
  83. 2 2
      Emby.Server.Implementations/Net/UdpSocket.cs
  84. 3 3
      Emby.Server.Implementations/Playlists/PlaylistManager.cs
  85. 1 1
      Emby.Server.Implementations/Playlists/PlaylistsFolder.cs
  86. 9 9
      Emby.Server.Implementations/Plugins/PluginManager.cs
  87. 11 11
      Emby.Server.Implementations/ScheduledTasks/ScheduledTaskWorker.cs
  88. 3 3
      Emby.Server.Implementations/ScheduledTasks/TaskManager.cs
  89. 1 1
      Emby.Server.Implementations/ScheduledTasks/Tasks/ChapterImagesTask.cs
  90. 2 2
      Emby.Server.Implementations/ScheduledTasks/Triggers/IntervalTrigger.cs
  91. 38 38
      Emby.Server.Implementations/Session/SessionManager.cs
  92. 3 3
      Emby.Server.Implementations/Session/SessionWebSocketListener.cs
  93. 1 1
      Emby.Server.Implementations/Session/WebSocketController.cs
  94. 3 3
      Emby.Server.Implementations/Sorting/AiredEpisodeOrderComparer.cs
  95. 1 1
      Emby.Server.Implementations/Sorting/DatePlayedComparer.cs
  96. 1 1
      Emby.Server.Implementations/Sorting/PlayCountComparer.cs
  97. 1 1
      Emby.Server.Implementations/Sorting/PremiereDateComparer.cs
  98. 1 1
      Emby.Server.Implementations/Sorting/ProductionYearComparer.cs
  99. 3 3
      Emby.Server.Implementations/SyncPlay/Group.cs
  100. 11 11
      Emby.Server.Implementations/SyncPlay/SyncPlayManager.cs

+ 2 - 2
Emby.Dlna/ContentDirectory/ContentDirectoryService.cs

@@ -141,7 +141,7 @@ namespace Emby.Dlna.ContentDirectory
             {
                 var user = _userManager.GetUserById(Guid.Parse(profile.UserId));
 
-                if (user != null)
+                if (user is not null)
                 {
                     return user;
                 }
@@ -153,7 +153,7 @@ namespace Emby.Dlna.ContentDirectory
             {
                 var user = _userManager.GetUserById(Guid.Parse(userId));
 
-                if (user != null)
+                if (user is not null)
                 {
                     return user;
                 }

+ 1 - 1
Emby.Dlna/ContentDirectory/ControlHandler.cs

@@ -1048,7 +1048,7 @@ namespace Emby.Dlna.ContentDirectory
                     ParentId = parent?.Id ?? Guid.Empty,
                     GroupItems = true
                 },
-                query.DtoOptions).Select(i => i.Item1 ?? i.Item2.FirstOrDefault()).Where(i => i != null).ToArray();
+                query.DtoOptions).Select(i => i.Item1 ?? i.Item2.FirstOrDefault()).Where(i => i is not null).ToArray();
 
             return ToResult(query.StartIndex, items);
         }

+ 16 - 16
Emby.Dlna/Didl/DidlBuilder.cs

@@ -153,7 +153,7 @@ namespace Emby.Dlna.Didl
             writer.WriteAttributeString("restricted", "1");
             writer.WriteAttributeString("id", clientId);
 
-            if (context != null)
+            if (context is not null)
             {
                 writer.WriteAttributeString("parentID", GetClientId(context, contextStubType));
             }
@@ -191,7 +191,7 @@ namespace Emby.Dlna.Didl
 
         private void AddVideoResource(XmlWriter writer, BaseItem video, string deviceId, Filter filter, StreamInfo streamInfo = null)
         {
-            if (streamInfo == null)
+            if (streamInfo is null)
             {
                 var sources = _mediaSourceManager.GetStaticMediaSources(video, true, _user);
 
@@ -263,7 +263,7 @@ namespace Emby.Dlna.Didl
                 .FirstOrDefault(i => string.Equals(info.Format, i.Format, StringComparison.OrdinalIgnoreCase)
                                     && i.Method == SubtitleDeliveryMethod.External);
 
-            if (subtitleProfile == null)
+            if (subtitleProfile is null)
             {
                 return false;
             }
@@ -392,7 +392,7 @@ namespace Emby.Dlna.Didl
 
             var filename = url.Substring(0, url.IndexOf('?', StringComparison.Ordinal));
 
-            var mimeType = mediaProfile == null || string.IsNullOrEmpty(mediaProfile.MimeType)
+            var mimeType = mediaProfile is null || string.IsNullOrEmpty(mediaProfile.MimeType)
                ? MimeTypes.GetMimeType(filename)
                : mediaProfile.MimeType;
 
@@ -533,7 +533,7 @@ namespace Emby.Dlna.Didl
         {
             writer.WriteStartElement(string.Empty, "res", NsDidl);
 
-            if (streamInfo == null)
+            if (streamInfo is null)
             {
                 var sources = _mediaSourceManager.GetStaticMediaSources(audio, true, _user);
 
@@ -598,7 +598,7 @@ namespace Emby.Dlna.Didl
 
             var filename = url.Substring(0, url.IndexOf('?', StringComparison.Ordinal));
 
-            var mimeType = mediaProfile == null || string.IsNullOrEmpty(mediaProfile.MimeType)
+            var mimeType = mediaProfile is null || string.IsNullOrEmpty(mediaProfile.MimeType)
                 ? MimeTypes.GetMimeType(filename)
                 : mediaProfile.MimeType;
 
@@ -652,7 +652,7 @@ namespace Emby.Dlna.Didl
             {
                 writer.WriteAttributeString("id", clientId);
 
-                if (context != null)
+                if (context is not null)
                 {
                     writer.WriteAttributeString("parentID", GetClientId(context, null));
                 }
@@ -695,13 +695,13 @@ namespace Emby.Dlna.Didl
             }
 
             // Not a samsung device
-            if (secAttribute == null)
+            if (secAttribute is null)
             {
                 return;
             }
 
             var userdata = _userDataManager.GetUserData(user, item);
-            var playbackPositionTicks = (streamInfo != null && streamInfo.StartPositionTicks > 0) ? streamInfo.StartPositionTicks : userdata.PlaybackPositionTicks;
+            var playbackPositionTicks = (streamInfo is not null && streamInfo.StartPositionTicks > 0) ? streamInfo.StartPositionTicks : userdata.PlaybackPositionTicks;
 
             if (playbackPositionTicks > 0)
             {
@@ -909,14 +909,14 @@ namespace Emby.Dlna.Didl
                     AddValue(writer, "dc", "creator", artist, NsDc);
 
                     // If it doesn't support album artists (musicvideo), then tag as both
-                    if (hasAlbumArtists == null)
+                    if (hasAlbumArtists is null)
                     {
                         AddAlbumArtist(writer, artist);
                     }
                 }
             }
 
-            if (hasAlbumArtists != null)
+            if (hasAlbumArtists is not null)
             {
                 foreach (var albumArtist in hasAlbumArtists.AlbumArtists)
                 {
@@ -973,7 +973,7 @@ namespace Emby.Dlna.Didl
         {
             ImageDownloadInfo imageInfo = GetImageInfo(item);
 
-            if (imageInfo == null)
+            if (imageInfo is null)
             {
                 return;
             }
@@ -1036,7 +1036,7 @@ namespace Emby.Dlna.Didl
         {
             var imageInfo = GetImageInfo(item);
 
-            if (imageInfo == null)
+            if (imageInfo is null)
             {
                 return;
             }
@@ -1093,7 +1093,7 @@ namespace Emby.Dlna.Didl
             if (item is Audio audioItem)
             {
                 var album = audioItem.AlbumEntity;
-                return album != null && album.HasImage(ImageType.Primary)
+                return album is not null && album.HasImage(ImageType.Primary)
                     ? GetImageInfo(album, ImageType.Primary)
                     : null;
             }
@@ -1106,7 +1106,7 @@ namespace Emby.Dlna.Didl
 
             // For other item types check parents, but be aware that image retrieved from a parent may be not suitable for this media item.
             var parentWithImage = GetFirstParentWithImageBelowUserRoot(item);
-            if (parentWithImage != null)
+            if (parentWithImage is not null)
             {
                 return GetImageInfo(parentWithImage, ImageType.Primary);
             }
@@ -1116,7 +1116,7 @@ namespace Emby.Dlna.Didl
 
         private BaseItem GetFirstParentWithImageBelowUserRoot(BaseItem item)
         {
-            if (item == null)
+            if (item is null)
             {
                 return null;
             }

+ 7 - 7
Emby.Dlna/DlnaManager.cs

@@ -105,9 +105,9 @@ namespace Emby.Dlna
             ArgumentNullException.ThrowIfNull(deviceInfo);
 
             var profile = GetProfiles()
-                .FirstOrDefault(i => i.Identification != null && IsMatch(deviceInfo, i.Identification));
+                .FirstOrDefault(i => i.Identification is not null && IsMatch(deviceInfo, i.Identification));
 
-            if (profile == null)
+            if (profile is null)
             {
                 _logger.LogInformation("No matching device profile found. The default will need to be used. \n{@Profile}", deviceInfo);
             }
@@ -171,8 +171,8 @@ namespace Emby.Dlna
         {
             ArgumentNullException.ThrowIfNull(headers);
 
-            var profile = GetProfiles().FirstOrDefault(i => i.Identification != null && IsMatch(headers, i.Identification));
-            if (profile == null)
+            var profile = GetProfiles().FirstOrDefault(i => i.Identification is not null && IsMatch(headers, i.Identification));
+            if (profile is null)
             {
                 _logger.LogDebug("No matching device profile found. {@Headers}", headers);
             }
@@ -224,7 +224,7 @@ namespace Emby.Dlna
                 return _fileSystem.GetFilePaths(path)
                     .Where(i => string.Equals(Path.GetExtension(i), ".xml", StringComparison.OrdinalIgnoreCase))
                     .Select(i => ParseProfileFile(i, type))
-                    .Where(i => i != null)
+                    .Where(i => i is not null)
                     .ToList()!; // We just filtered out all the nulls
             }
             catch (IOException)
@@ -272,7 +272,7 @@ namespace Emby.Dlna
 
             var info = GetProfileInfosInternal().FirstOrDefault(i => string.Equals(i.Info.Id, id, StringComparison.OrdinalIgnoreCase));
 
-            if (info == null)
+            if (info is null)
             {
                 return null;
             }
@@ -470,7 +470,7 @@ namespace Emby.Dlna
 
             var resource = GetType().Namespace + ".Images." + filename.ToLowerInvariant();
             var stream = _assembly.GetManifestResourceStream(resource);
-            if (stream == null)
+            if (stream is null)
             {
                 return null;
             }

+ 1 - 1
Emby.Dlna/Eventing/DlnaEventManager.cs

@@ -35,7 +35,7 @@ namespace Emby.Dlna.Eventing
         public EventSubscriptionResponse RenewEventSubscription(string subscriptionId, string notificationType, string requestedTimeoutString, string callbackUrl)
         {
             var subscription = GetSubscription(subscriptionId, false);
-            if (subscription != null)
+            if (subscription is not null)
             {
                 subscription.TimeoutSeconds = ParseTimeout(requestedTimeoutString) ?? 300;
                 int timeoutSeconds = subscription.TimeoutSeconds;

+ 7 - 7
Emby.Dlna/Main/DlnaEntryPoint.cs

@@ -199,7 +199,7 @@ namespace Emby.Dlna.Main
         {
             try
             {
-                if (_communicationsServer == null)
+                if (_communicationsServer is null)
                 {
                     var enableMultiSocketBinding = OperatingSystem.IsWindows() ||
                                                    OperatingSystem.IsLinux();
@@ -222,7 +222,7 @@ namespace Emby.Dlna.Main
         {
             try
             {
-                if (communicationsServer != null)
+                if (communicationsServer is not null)
                 {
                     ((DeviceDiscovery)_deviceDiscovery).Start(communicationsServer);
                 }
@@ -253,7 +253,7 @@ namespace Emby.Dlna.Main
                 return;
             }
 
-            if (_publisher != null)
+            if (_publisher is not null)
             {
                 return;
             }
@@ -382,7 +382,7 @@ namespace Emby.Dlna.Main
         {
             lock (_syncLock)
             {
-                if (_manager != null)
+                if (_manager is not null)
                 {
                     return;
                 }
@@ -417,7 +417,7 @@ namespace Emby.Dlna.Main
         {
             lock (_syncLock)
             {
-                if (_manager != null)
+                if (_manager is not null)
                 {
                     try
                     {
@@ -436,7 +436,7 @@ namespace Emby.Dlna.Main
 
         public void DisposeDevicePublisher()
         {
-            if (_publisher != null)
+            if (_publisher is not null)
             {
                 _logger.LogInformation("Disposing SsdpDevicePublisher");
                 _publisher.Dispose();
@@ -456,7 +456,7 @@ namespace Emby.Dlna.Main
             DisposePlayToManager();
             DisposeDeviceDiscovery();
 
-            if (_communicationsServer != null)
+            if (_communicationsServer is not null)
             {
                 _logger.LogInformation("Disposing SsdpCommunicationsServer");
                 _communicationsServer.Dispose();

+ 74 - 74
Emby.Dlna/PlayTo/Device.cs

@@ -220,14 +220,14 @@ namespace Emby.Dlna.PlayTo
             var rendererCommands = await GetRenderingProtocolAsync(cancellationToken).ConfigureAwait(false);
 
             var command = rendererCommands?.ServiceActions.FirstOrDefault(c => c.Name == "SetMute");
-            if (command == null)
+            if (command is null)
             {
                 return false;
             }
 
             var service = GetServiceRenderingControl();
 
-            if (service == null)
+            if (service is null)
             {
                 return false;
             }
@@ -260,14 +260,14 @@ namespace Emby.Dlna.PlayTo
             var rendererCommands = await GetRenderingProtocolAsync(cancellationToken).ConfigureAwait(false);
 
             var command = rendererCommands?.ServiceActions.FirstOrDefault(c => c.Name == "SetVolume");
-            if (command == null)
+            if (command is null)
             {
                 return;
             }
 
             var service = GetServiceRenderingControl();
 
-            if (service == null)
+            if (service is null)
             {
                 throw new InvalidOperationException("Unable to find service");
             }
@@ -291,14 +291,14 @@ namespace Emby.Dlna.PlayTo
             var avCommands = await GetAVProtocolAsync(cancellationToken).ConfigureAwait(false);
 
             var command = avCommands?.ServiceActions.FirstOrDefault(c => c.Name == "Seek");
-            if (command == null)
+            if (command is null)
             {
                 return;
             }
 
             var service = GetAvTransportService();
 
-            if (service == null)
+            if (service is null)
             {
                 throw new InvalidOperationException("Unable to find service");
             }
@@ -324,7 +324,7 @@ namespace Emby.Dlna.PlayTo
             _logger.LogDebug("{0} - SetAvTransport Uri: {1} DlnaHeaders: {2}", Properties.Name, url, header);
 
             var command = avCommands?.ServiceActions.FirstOrDefault(c => c.Name == "SetAVTransportURI");
-            if (command == null)
+            if (command is null)
             {
                 return;
             }
@@ -337,7 +337,7 @@ namespace Emby.Dlna.PlayTo
 
             var service = GetAvTransportService();
 
-            if (service == null)
+            if (service is null)
             {
                 throw new InvalidOperationException("Unable to find service");
             }
@@ -381,7 +381,7 @@ namespace Emby.Dlna.PlayTo
             _logger.LogDebug("{PropertyName} - SetNextAvTransport Uri: {Url} DlnaHeaders: {Header}", Properties.Name, url, header);
 
             var command = avCommands.ServiceActions.FirstOrDefault(c => string.Equals(c.Name, "SetNextAVTransportURI", StringComparison.OrdinalIgnoreCase));
-            if (command == null)
+            if (command is null)
             {
                 return;
             }
@@ -394,7 +394,7 @@ namespace Emby.Dlna.PlayTo
 
             var service = GetAvTransportService();
 
-            if (service == null)
+            if (service is null)
             {
                 throw new InvalidOperationException("Unable to find service");
             }
@@ -418,13 +418,13 @@ namespace Emby.Dlna.PlayTo
         private Task SetPlay(TransportCommands avCommands, CancellationToken cancellationToken)
         {
             var command = avCommands.ServiceActions.FirstOrDefault(c => c.Name == "Play");
-            if (command == null)
+            if (command is null)
             {
                 return Task.CompletedTask;
             }
 
             var service = GetAvTransportService();
-            if (service == null)
+            if (service is null)
             {
                 throw new InvalidOperationException("Unable to find service");
             }
@@ -440,7 +440,7 @@ namespace Emby.Dlna.PlayTo
         public async Task SetPlay(CancellationToken cancellationToken)
         {
             var avCommands = await GetAVProtocolAsync(cancellationToken).ConfigureAwait(false);
-            if (avCommands == null)
+            if (avCommands is null)
             {
                 return;
             }
@@ -455,7 +455,7 @@ namespace Emby.Dlna.PlayTo
             var avCommands = await GetAVProtocolAsync(cancellationToken).ConfigureAwait(false);
 
             var command = avCommands?.ServiceActions.FirstOrDefault(c => c.Name == "Stop");
-            if (command == null)
+            if (command is null)
             {
                 return;
             }
@@ -479,7 +479,7 @@ namespace Emby.Dlna.PlayTo
             var avCommands = await GetAVProtocolAsync(cancellationToken).ConfigureAwait(false);
 
             var command = avCommands?.ServiceActions.FirstOrDefault(c => c.Name == "Pause");
-            if (command == null)
+            if (command is null)
             {
                 return;
             }
@@ -513,7 +513,7 @@ namespace Emby.Dlna.PlayTo
 
                 var avCommands = await GetAVProtocolAsync(cancellationToken).ConfigureAwait(false);
 
-                if (avCommands == null)
+                if (avCommands is null)
                 {
                     return;
                 }
@@ -538,12 +538,12 @@ namespace Emby.Dlna.PlayTo
 
                         var currentObject = tuple.Track;
 
-                        if (tuple.Success && currentObject == null)
+                        if (tuple.Success && currentObject is null)
                         {
                             currentObject = await GetMediaInfo(avCommands, cancellationToken).ConfigureAwait(false);
                         }
 
-                        if (currentObject != null)
+                        if (currentObject is not null)
                         {
                             UpdateMediaInfo(currentObject, transportState.Value);
                         }
@@ -585,7 +585,7 @@ namespace Emby.Dlna.PlayTo
                 if (_connectFailureCount >= 3)
                 {
                     var action = OnDeviceUnavailable;
-                    if (action != null)
+                    if (action is not null)
                     {
                         _logger.LogDebug("Disposing device due to loss of connection");
                         action();
@@ -607,14 +607,14 @@ namespace Emby.Dlna.PlayTo
             var rendererCommands = await GetRenderingProtocolAsync(cancellationToken).ConfigureAwait(false);
 
             var command = rendererCommands?.ServiceActions.FirstOrDefault(c => c.Name == "GetVolume");
-            if (command == null)
+            if (command is null)
             {
                 return;
             }
 
             var service = GetServiceRenderingControl();
 
-            if (service == null)
+            if (service is null)
             {
                 return;
             }
@@ -626,12 +626,12 @@ namespace Emby.Dlna.PlayTo
                 rendererCommands.BuildPost(command, service.ServiceType),
                 cancellationToken: cancellationToken).ConfigureAwait(false);
 
-            if (result == null || result.Document == null)
+            if (result is null || result.Document is null)
             {
                 return;
             }
 
-            var volume = result.Document.Descendants(UPnpNamespaces.RenderingControl + "GetVolumeResponse").Select(i => i.Element("CurrentVolume")).FirstOrDefault(i => i != null);
+            var volume = result.Document.Descendants(UPnpNamespaces.RenderingControl + "GetVolumeResponse").Select(i => i.Element("CurrentVolume")).FirstOrDefault(i => i is not null);
             var volumeValue = volume?.Value;
 
             if (string.IsNullOrWhiteSpace(volumeValue))
@@ -657,14 +657,14 @@ namespace Emby.Dlna.PlayTo
             var rendererCommands = await GetRenderingProtocolAsync(cancellationToken).ConfigureAwait(false);
 
             var command = rendererCommands?.ServiceActions.FirstOrDefault(c => c.Name == "GetMute");
-            if (command == null)
+            if (command is null)
             {
                 return;
             }
 
             var service = GetServiceRenderingControl();
 
-            if (service == null)
+            if (service is null)
             {
                 return;
             }
@@ -676,14 +676,14 @@ namespace Emby.Dlna.PlayTo
                 rendererCommands.BuildPost(command, service.ServiceType),
                 cancellationToken: cancellationToken).ConfigureAwait(false);
 
-            if (result == null || result.Document == null)
+            if (result is null || result.Document is null)
             {
                 return;
             }
 
             var valueNode = result.Document.Descendants(UPnpNamespaces.RenderingControl + "GetMuteResponse")
                                             .Select(i => i.Element("CurrentMute"))
-                                            .FirstOrDefault(i => i != null);
+                                            .FirstOrDefault(i => i is not null);
 
             IsMuted = string.Equals(valueNode?.Value, "1", StringComparison.OrdinalIgnoreCase);
         }
@@ -691,13 +691,13 @@ namespace Emby.Dlna.PlayTo
         private async Task<TransportState?> GetTransportInfo(TransportCommands avCommands, CancellationToken cancellationToken)
         {
             var command = avCommands.ServiceActions.FirstOrDefault(c => c.Name == "GetTransportInfo");
-            if (command == null)
+            if (command is null)
             {
                 return null;
             }
 
             var service = GetAvTransportService();
-            if (service == null)
+            if (service is null)
             {
                 return null;
             }
@@ -709,17 +709,17 @@ namespace Emby.Dlna.PlayTo
                 avCommands.BuildPost(command, service.ServiceType),
                 cancellationToken: cancellationToken).ConfigureAwait(false);
 
-            if (result == null || result.Document == null)
+            if (result is null || result.Document is null)
             {
                 return null;
             }
 
             var transportState =
-                result.Document.Descendants(UPnpNamespaces.AvTransport + "GetTransportInfoResponse").Select(i => i.Element("CurrentTransportState")).FirstOrDefault(i => i != null);
+                result.Document.Descendants(UPnpNamespaces.AvTransport + "GetTransportInfoResponse").Select(i => i.Element("CurrentTransportState")).FirstOrDefault(i => i is not null);
 
             var transportStateValue = transportState?.Value;
 
-            if (transportStateValue != null
+            if (transportStateValue is not null
                 && Enum.TryParse(transportStateValue, true, out TransportState state))
             {
                 return state;
@@ -731,19 +731,19 @@ namespace Emby.Dlna.PlayTo
         private async Task<UBaseObject> GetMediaInfo(TransportCommands avCommands, CancellationToken cancellationToken)
         {
             var command = avCommands.ServiceActions.FirstOrDefault(c => c.Name == "GetMediaInfo");
-            if (command == null)
+            if (command is null)
             {
                 return null;
             }
 
             var service = GetAvTransportService();
-            if (service == null)
+            if (service is null)
             {
                 throw new InvalidOperationException("Unable to find service");
             }
 
             var rendererCommands = await GetRenderingProtocolAsync(cancellationToken).ConfigureAwait(false);
-            if (rendererCommands == null)
+            if (rendererCommands is null)
             {
                 return null;
             }
@@ -755,14 +755,14 @@ namespace Emby.Dlna.PlayTo
                 rendererCommands.BuildPost(command, service.ServiceType),
                 cancellationToken: cancellationToken).ConfigureAwait(false);
 
-            if (result == null || result.Document == null)
+            if (result is null || result.Document is null)
             {
                 return null;
             }
 
             var track = result.Document.Descendants("CurrentURIMetaData").FirstOrDefault();
 
-            if (track == null)
+            if (track is null)
             {
                 return null;
             }
@@ -778,7 +778,7 @@ namespace Emby.Dlna.PlayTo
 
             track = result.Document.Descendants("CurrentURI").FirstOrDefault();
 
-            if (track == null)
+            if (track is null)
             {
                 return null;
             }
@@ -801,21 +801,21 @@ namespace Emby.Dlna.PlayTo
         private async Task<(bool Success, UBaseObject Track)> GetPositionInfo(TransportCommands avCommands, CancellationToken cancellationToken)
         {
             var command = avCommands.ServiceActions.FirstOrDefault(c => c.Name == "GetPositionInfo");
-            if (command == null)
+            if (command is null)
             {
                 return (false, null);
             }
 
             var service = GetAvTransportService();
 
-            if (service == null)
+            if (service is null)
             {
                 throw new InvalidOperationException("Unable to find service");
             }
 
             var rendererCommands = await GetRenderingProtocolAsync(cancellationToken).ConfigureAwait(false);
 
-            if (rendererCommands == null)
+            if (rendererCommands is null)
             {
                 return (false, null);
             }
@@ -827,15 +827,15 @@ namespace Emby.Dlna.PlayTo
                 rendererCommands.BuildPost(command, service.ServiceType),
                 cancellationToken: cancellationToken).ConfigureAwait(false);
 
-            if (result == null || result.Document == null)
+            if (result is null || result.Document is null)
             {
                 return (false, null);
             }
 
-            var trackUriElem = result.Document.Descendants(UPnpNamespaces.AvTransport + "GetPositionInfoResponse").Select(i => i.Element("TrackURI")).FirstOrDefault(i => i != null);
+            var trackUriElem = result.Document.Descendants(UPnpNamespaces.AvTransport + "GetPositionInfoResponse").Select(i => i.Element("TrackURI")).FirstOrDefault(i => i is not null);
             var trackUri = trackUriElem?.Value;
 
-            var durationElem = result.Document.Descendants(UPnpNamespaces.AvTransport + "GetPositionInfoResponse").Select(i => i.Element("TrackDuration")).FirstOrDefault(i => i != null);
+            var durationElem = result.Document.Descendants(UPnpNamespaces.AvTransport + "GetPositionInfoResponse").Select(i => i.Element("TrackDuration")).FirstOrDefault(i => i is not null);
             var duration = durationElem?.Value;
 
             if (!string.IsNullOrWhiteSpace(duration)
@@ -848,7 +848,7 @@ namespace Emby.Dlna.PlayTo
                 Duration = null;
             }
 
-            var positionElem = result.Document.Descendants(UPnpNamespaces.AvTransport + "GetPositionInfoResponse").Select(i => i.Element("RelTime")).FirstOrDefault(i => i != null);
+            var positionElem = result.Document.Descendants(UPnpNamespaces.AvTransport + "GetPositionInfoResponse").Select(i => i.Element("RelTime")).FirstOrDefault(i => i is not null);
             var position = positionElem?.Value;
 
             if (!string.IsNullOrWhiteSpace(position) && !string.Equals(position, "NOT_IMPLEMENTED", StringComparison.OrdinalIgnoreCase))
@@ -858,7 +858,7 @@ namespace Emby.Dlna.PlayTo
 
             var track = result.Document.Descendants("TrackMetaData").FirstOrDefault();
 
-            if (track == null)
+            if (track is null)
             {
                 // If track is null, some vendors do this, use GetMediaInfo instead.
                 return (true, null);
@@ -882,7 +882,7 @@ namespace Emby.Dlna.PlayTo
                 _logger.LogError(ex, "Uncaught exception while parsing xml");
             }
 
-            if (uPnpResponse == null)
+            if (uPnpResponse is null)
             {
                 _logger.LogError("Failed to parse xml: \n {Xml}", trackString);
                 return (true, null);
@@ -959,11 +959,11 @@ namespace Emby.Dlna.PlayTo
 
             var resElement = container.Element(UPnpNamespaces.Res);
 
-            if (resElement != null)
+            if (resElement is not null)
             {
                 var info = resElement.Attribute(UPnpNamespaces.ProtocolInfo);
 
-                if (info != null && !string.IsNullOrWhiteSpace(info.Value))
+                if (info is not null && !string.IsNullOrWhiteSpace(info.Value))
                 {
                     return info.Value.Split(':');
                 }
@@ -974,7 +974,7 @@ namespace Emby.Dlna.PlayTo
 
         private async Task<TransportCommands> GetAVProtocolAsync(CancellationToken cancellationToken)
         {
-            if (AvCommands != null)
+            if (AvCommands is not null)
             {
                 return AvCommands;
             }
@@ -985,7 +985,7 @@ namespace Emby.Dlna.PlayTo
             }
 
             var avService = GetAvTransportService();
-            if (avService == null)
+            if (avService is null)
             {
                 return null;
             }
@@ -995,7 +995,7 @@ namespace Emby.Dlna.PlayTo
             var httpClient = new DlnaHttpClient(_logger, _httpClientFactory);
 
             var document = await httpClient.GetDataAsync(url, cancellationToken).ConfigureAwait(false);
-            if (document == null)
+            if (document is null)
             {
                 return null;
             }
@@ -1006,7 +1006,7 @@ namespace Emby.Dlna.PlayTo
 
         private async Task<TransportCommands> GetRenderingProtocolAsync(CancellationToken cancellationToken)
         {
-            if (RendererCommands != null)
+            if (RendererCommands is not null)
             {
                 return RendererCommands;
             }
@@ -1017,7 +1017,7 @@ namespace Emby.Dlna.PlayTo
             }
 
             var avService = GetServiceRenderingControl();
-            if (avService == null)
+            if (avService is null)
             {
                 throw new ArgumentException("Device AvService is null");
             }
@@ -1027,7 +1027,7 @@ namespace Emby.Dlna.PlayTo
             var httpClient = new DlnaHttpClient(_logger, _httpClientFactory);
             _logger.LogDebug("Dlna Device.GetRenderingProtocolAsync");
             var document = await httpClient.GetDataAsync(url, cancellationToken).ConfigureAwait(false);
-            if (document == null)
+            if (document is null)
             {
                 return null;
             }
@@ -1062,7 +1062,7 @@ namespace Emby.Dlna.PlayTo
             var ssdpHttpClient = new DlnaHttpClient(logger, httpClientFactory);
 
             var document = await ssdpHttpClient.GetDataAsync(url.ToString(), cancellationToken).ConfigureAwait(false);
-            if (document == null)
+            if (document is null)
             {
                 return null;
             }
@@ -1070,13 +1070,13 @@ namespace Emby.Dlna.PlayTo
             var friendlyNames = new List<string>();
 
             var name = document.Descendants(UPnpNamespaces.Ud.GetName("friendlyName")).FirstOrDefault();
-            if (name != null && !string.IsNullOrWhiteSpace(name.Value))
+            if (name is not null && !string.IsNullOrWhiteSpace(name.Value))
             {
                 friendlyNames.Add(name.Value);
             }
 
             var room = document.Descendants(UPnpNamespaces.Ud.GetName("roomName")).FirstOrDefault();
-            if (room != null && !string.IsNullOrWhiteSpace(room.Value))
+            if (room is not null && !string.IsNullOrWhiteSpace(room.Value))
             {
                 friendlyNames.Add(room.Value);
             }
@@ -1088,74 +1088,74 @@ namespace Emby.Dlna.PlayTo
             };
 
             var model = document.Descendants(UPnpNamespaces.Ud.GetName("modelName")).FirstOrDefault();
-            if (model != null)
+            if (model is not null)
             {
                 deviceProperties.ModelName = model.Value;
             }
 
             var modelNumber = document.Descendants(UPnpNamespaces.Ud.GetName("modelNumber")).FirstOrDefault();
-            if (modelNumber != null)
+            if (modelNumber is not null)
             {
                 deviceProperties.ModelNumber = modelNumber.Value;
             }
 
             var uuid = document.Descendants(UPnpNamespaces.Ud.GetName("UDN")).FirstOrDefault();
-            if (uuid != null)
+            if (uuid is not null)
             {
                 deviceProperties.UUID = uuid.Value;
             }
 
             var manufacturer = document.Descendants(UPnpNamespaces.Ud.GetName("manufacturer")).FirstOrDefault();
-            if (manufacturer != null)
+            if (manufacturer is not null)
             {
                 deviceProperties.Manufacturer = manufacturer.Value;
             }
 
             var manufacturerUrl = document.Descendants(UPnpNamespaces.Ud.GetName("manufacturerURL")).FirstOrDefault();
-            if (manufacturerUrl != null)
+            if (manufacturerUrl is not null)
             {
                 deviceProperties.ManufacturerUrl = manufacturerUrl.Value;
             }
 
             var presentationUrl = document.Descendants(UPnpNamespaces.Ud.GetName("presentationURL")).FirstOrDefault();
-            if (presentationUrl != null)
+            if (presentationUrl is not null)
             {
                 deviceProperties.PresentationUrl = presentationUrl.Value;
             }
 
             var modelUrl = document.Descendants(UPnpNamespaces.Ud.GetName("modelURL")).FirstOrDefault();
-            if (modelUrl != null)
+            if (modelUrl is not null)
             {
                 deviceProperties.ModelUrl = modelUrl.Value;
             }
 
             var serialNumber = document.Descendants(UPnpNamespaces.Ud.GetName("serialNumber")).FirstOrDefault();
-            if (serialNumber != null)
+            if (serialNumber is not null)
             {
                 deviceProperties.SerialNumber = serialNumber.Value;
             }
 
             var modelDescription = document.Descendants(UPnpNamespaces.Ud.GetName("modelDescription")).FirstOrDefault();
-            if (modelDescription != null)
+            if (modelDescription is not null)
             {
                 deviceProperties.ModelDescription = modelDescription.Value;
             }
 
             var icon = document.Descendants(UPnpNamespaces.Ud.GetName("icon")).FirstOrDefault();
-            if (icon != null)
+            if (icon is not null)
             {
                 deviceProperties.Icon = CreateIcon(icon);
             }
 
             foreach (var services in document.Descendants(UPnpNamespaces.Ud.GetName("serviceList")))
             {
-                if (services == null)
+                if (services is null)
                 {
                     continue;
                 }
 
                 var servicesList = services.Descendants(UPnpNamespaces.Ud.GetName("service"));
-                if (servicesList == null)
+                if (servicesList is null)
                 {
                     continue;
                 }
@@ -1164,7 +1164,7 @@ namespace Emby.Dlna.PlayTo
                 {
                     var service = Create(element);
 
-                    if (service != null)
+                    if (service is not null)
                     {
                         deviceProperties.Services.Add(service);
                     }
@@ -1212,14 +1212,14 @@ namespace Emby.Dlna.PlayTo
             var previousMediaInfo = CurrentMediaInfo;
             CurrentMediaInfo = mediaInfo;
 
-            if (mediaInfo == null)
+            if (mediaInfo is null)
             {
-                if (previousMediaInfo != null)
+                if (previousMediaInfo is not null)
                 {
                     OnPlaybackStop(previousMediaInfo);
                 }
             }
-            else if (previousMediaInfo == null)
+            else if (previousMediaInfo is null)
             {
                 if (state != TransportState.STOPPED)
                 {

+ 16 - 16
Emby.Dlna/PlayTo/PlayToController.cs

@@ -84,7 +84,7 @@ namespace Emby.Dlna.PlayTo
             _mediaEncoder = mediaEncoder;
         }
 
-        public bool IsSessionActive => !_disposed && _device != null;
+        public bool IsSessionActive => !_disposed && _device is not null;
 
         public bool SupportsMediaControl => IsSessionActive;
 
@@ -156,7 +156,7 @@ namespace Emby.Dlna.PlayTo
             try
             {
                 var streamInfo = StreamParams.ParseFromUrl(e.OldMediaInfo.Url, _libraryManager, _mediaSourceManager);
-                if (streamInfo.Item != null)
+                if (streamInfo.Item is not null)
                 {
                     var positionTicks = GetProgressPositionTicks(streamInfo);
 
@@ -164,7 +164,7 @@ namespace Emby.Dlna.PlayTo
                 }
 
                 streamInfo = StreamParams.ParseFromUrl(e.NewMediaInfo.Url, _libraryManager, _mediaSourceManager);
-                if (streamInfo.Item == null)
+                if (streamInfo.Item is null)
                 {
                     return;
                 }
@@ -199,7 +199,7 @@ namespace Emby.Dlna.PlayTo
             {
                 var streamInfo = StreamParams.ParseFromUrl(e.MediaInfo.Url, _libraryManager, _mediaSourceManager);
 
-                if (streamInfo.Item == null)
+                if (streamInfo.Item is null)
                 {
                     return;
                 }
@@ -210,7 +210,7 @@ namespace Emby.Dlna.PlayTo
 
                 var mediaSource = await streamInfo.GetMediaSource(CancellationToken.None).ConfigureAwait(false);
 
-                var duration = mediaSource == null
+                var duration = mediaSource is null
                     ? _device.Duration?.Ticks
                     : mediaSource.RunTimeTicks;
 
@@ -268,7 +268,7 @@ namespace Emby.Dlna.PlayTo
             {
                 var info = StreamParams.ParseFromUrl(e.MediaInfo.Url, _libraryManager, _mediaSourceManager);
 
-                if (info.Item != null)
+                if (info.Item is not null)
                 {
                     var progress = GetProgressInfo(info);
 
@@ -299,7 +299,7 @@ namespace Emby.Dlna.PlayTo
 
                 var info = StreamParams.ParseFromUrl(mediaUrl, _libraryManager, _mediaSourceManager);
 
-                if (info.Item != null)
+                if (info.Item is not null)
                 {
                     var progress = GetProgressInfo(info);
 
@@ -441,11 +441,11 @@ namespace Emby.Dlna.PlayTo
         {
             var media = _device.CurrentMediaInfo;
 
-            if (media != null)
+            if (media is not null)
             {
                 var info = StreamParams.ParseFromUrl(media.Url, _libraryManager, _mediaSourceManager);
 
-                if (info.Item != null && !EnableClientSideSeek(info))
+                if (info.Item is not null && !EnableClientSideSeek(info))
                 {
                     var user = _session.UserId.Equals(default)
                         ? null
@@ -760,11 +760,11 @@ namespace Emby.Dlna.PlayTo
         {
             var media = _device.CurrentMediaInfo;
 
-            if (media != null)
+            if (media is not null)
             {
                 var info = StreamParams.ParseFromUrl(media.Url, _libraryManager, _mediaSourceManager);
 
-                if (info.Item != null)
+                if (info.Item is not null)
                 {
                     var newPosition = GetProgressPositionTicks(info) ?? 0;
 
@@ -791,11 +791,11 @@ namespace Emby.Dlna.PlayTo
         {
             var media = _device.CurrentMediaInfo;
 
-            if (media != null)
+            if (media is not null)
             {
                 var info = StreamParams.ParseFromUrl(media.Url, _libraryManager, _mediaSourceManager);
 
-                if (info.Item != null)
+                if (info.Item is not null)
                 {
                     var newPosition = GetProgressPositionTicks(info) ?? 0;
 
@@ -865,7 +865,7 @@ namespace Emby.Dlna.PlayTo
                 throw new ObjectDisposedException(GetType().Name);
             }
 
-            if (_device == null)
+            if (_device is null)
             {
                 return Task.CompletedTask;
             }
@@ -916,7 +916,7 @@ namespace Emby.Dlna.PlayTo
 
             public async Task<MediaSourceInfo> GetMediaSource(CancellationToken cancellationToken)
             {
-                if (_mediaSource != null)
+                if (_mediaSource is not null)
                 {
                     return _mediaSource;
                 }
@@ -926,7 +926,7 @@ namespace Emby.Dlna.PlayTo
                     return null;
                 }
 
-                if (_mediaSourceManager != null)
+                if (_mediaSourceManager is not null)
                 {
                     _mediaSource = await _mediaSourceManager.GetMediaSource(Item, MediaSourceId, LiveStreamId, false, cancellationToken).ConfigureAwait(false);
                 }

+ 2 - 2
Emby.Dlna/PlayTo/PlayToManager.cs

@@ -176,10 +176,10 @@ namespace Emby.Dlna.PlayTo
 
             var controller = sessionInfo.SessionControllers.OfType<PlayToController>().FirstOrDefault();
 
-            if (controller == null)
+            if (controller is null)
             {
                 var device = await Device.CreateuPnpDeviceAsync(uri, _httpClientFactory, _logger, cancellationToken).ConfigureAwait(false);
-                if (device == null)
+                if (device is null)
                 {
                     _logger.LogError("Ignoring device as xml response is invalid.");
                     return;

+ 2 - 2
Emby.Dlna/PlayTo/PlaylistItemFactory.cs

@@ -29,7 +29,7 @@ namespace Emby.Dlna.PlayTo
             var directPlay = profile.DirectPlayProfiles
                 .FirstOrDefault(i => i.Type == DlnaProfileType.Photo && IsSupported(i, item));
 
-            if (directPlay != null)
+            if (directPlay is not null)
             {
                 playlistItem.StreamInfo.PlayMethod = PlayMethod.DirectStream;
                 playlistItem.StreamInfo.Container = Path.GetExtension(item.Path);
@@ -40,7 +40,7 @@ namespace Emby.Dlna.PlayTo
             var transcodingProfile = profile.TranscodingProfiles
                 .FirstOrDefault(i => i.Type == DlnaProfileType.Photo);
 
-            if (transcodingProfile != null)
+            if (transcodingProfile is not null)
             {
                 playlistItem.StreamInfo.PlayMethod = PlayMethod.Transcode;
                 playlistItem.StreamInfo.Container = "." + transcodingProfile.Container.TrimStart('.');

+ 3 - 3
Emby.Dlna/PlayTo/TransportCommands.cs

@@ -31,7 +31,7 @@ namespace Emby.Dlna.PlayTo
 
             var stateValues = document.Descendants(UPnpNamespaces.ServiceStateTable).FirstOrDefault();
 
-            if (stateValues != null)
+            if (stateValues is not null)
             {
                 foreach (var container in stateValues.Elements(UPnpNamespaces.Svc + "stateVariable"))
                 {
@@ -77,7 +77,7 @@ namespace Emby.Dlna.PlayTo
             var element = container.Descendants(UPnpNamespaces.Svc + "allowedValueList")
                 .FirstOrDefault();
 
-            if (element != null)
+            if (element is not null)
             {
                 var values = element.Descendants(UPnpNamespaces.Svc + "allowedValue");
 
@@ -167,7 +167,7 @@ namespace Emby.Dlna.PlayTo
         {
             var state = StateVariables.FirstOrDefault(a => string.Equals(a.Name, argument.RelatedStateVariable, StringComparison.OrdinalIgnoreCase));
 
-            if (state != null)
+            if (state is not null)
             {
                 var sendValue = state.AllowedValues.FirstOrDefault(a => string.Equals(a, commandParameter, StringComparison.OrdinalIgnoreCase)) ??
                     (state.AllowedValues.Count > 0 ? state.AllowedValues[0] : value);

+ 1 - 1
Emby.Dlna/Service/BaseControlHandler.cs

@@ -173,7 +173,7 @@ namespace Emby.Dlna.Service
                 }
             }
 
-            if (localName != null && namespaceURI != null)
+            if (localName is not null && namespaceURI is not null)
             {
                 return new ControlRequestInfo(localName, namespaceURI);
             }

+ 4 - 4
Emby.Dlna/Ssdp/DeviceDiscovery.cs

@@ -71,7 +71,7 @@ namespace Emby.Dlna.Ssdp
         {
             lock (_syncLock)
             {
-                if (_listenerCount > 0 && _deviceLocator == null && _commsServer != null)
+                if (_listenerCount > 0 && _deviceLocator is null && _commsServer is not null)
                 {
                     _deviceLocator = new SsdpDeviceLocator(_commsServer);
 
@@ -97,7 +97,7 @@ namespace Emby.Dlna.Ssdp
         {
             var originalHeaders = e.DiscoveredDevice.ResponseHeaders;
 
-            var headerDict = originalHeaders == null ? new Dictionary<string, KeyValuePair<string, IEnumerable<string>>>() : originalHeaders.ToDictionary(i => i.Key, StringComparer.OrdinalIgnoreCase);
+            var headerDict = originalHeaders is null ? new Dictionary<string, KeyValuePair<string, IEnumerable<string>>>() : originalHeaders.ToDictionary(i => i.Key, StringComparer.OrdinalIgnoreCase);
 
             var headers = headerDict.ToDictionary(i => i.Key, i => i.Value.Value.FirstOrDefault(), StringComparer.OrdinalIgnoreCase);
 
@@ -116,7 +116,7 @@ namespace Emby.Dlna.Ssdp
         {
             var originalHeaders = e.DiscoveredDevice.ResponseHeaders;
 
-            var headerDict = originalHeaders == null ? new Dictionary<string, KeyValuePair<string, IEnumerable<string>>>() : originalHeaders.ToDictionary(i => i.Key, StringComparer.OrdinalIgnoreCase);
+            var headerDict = originalHeaders is null ? new Dictionary<string, KeyValuePair<string, IEnumerable<string>>>() : originalHeaders.ToDictionary(i => i.Key, StringComparer.OrdinalIgnoreCase);
 
             var headers = headerDict.ToDictionary(i => i.Key, i => i.Value.Value.FirstOrDefault(), StringComparer.OrdinalIgnoreCase);
 
@@ -136,7 +136,7 @@ namespace Emby.Dlna.Ssdp
             if (!_disposed)
             {
                 _disposed = true;
-                if (_deviceLocator != null)
+                if (_deviceLocator is not null)
                 {
                     _deviceLocator.Dispose();
                     _deviceLocator = null;

+ 1 - 1
Emby.Drawing/ImageProcessor.cs

@@ -436,7 +436,7 @@ namespace Emby.Drawing
         /// <inheritdoc />
         public string? GetImageCacheTag(User user)
         {
-            if (user.ProfileImage == null)
+            if (user.ProfileImage is null)
             {
                 return null;
             }

+ 2 - 2
Emby.Naming/AudioBook/AudioBookListResolver.cs

@@ -69,13 +69,13 @@ namespace Emby.Naming.AudioBook
             extras = new List<AudioBookFileInfo>();
             alternativeVersions = new List<AudioBookFileInfo>();
 
-            var haveChaptersOrPages = stackFiles.Any(x => x.ChapterNumber != null || x.PartNumber != null);
+            var haveChaptersOrPages = stackFiles.Any(x => x.ChapterNumber is not null || x.PartNumber is not null);
             var groupedBy = stackFiles.GroupBy(file => new { file.ChapterNumber, file.PartNumber });
             var nameWithReplacedDots = nameParserResult.Name.Replace(' ', '.');
 
             foreach (var group in groupedBy)
             {
-                if (group.Key.ChapterNumber == null && group.Key.PartNumber == null)
+                if (group.Key.ChapterNumber is null && group.Key.PartNumber is null)
                 {
                     if (group.Count() > 1 || haveChaptersOrPages)
                     {

+ 1 - 1
Emby.Naming/AudioBook/AudioBookNameParser.cs

@@ -33,7 +33,7 @@ namespace Emby.Naming.AudioBook
                 var match = new Regex(expression, RegexOptions.IgnoreCase).Match(name);
                 if (match.Success)
                 {
-                    if (result.Name == null)
+                    if (result.Name is null)
                     {
                         var value = match.Groups["name"];
                         if (value.Success)

+ 2 - 2
Emby.Naming/ExternalFiles/ExternalPathParser.cs

@@ -94,12 +94,12 @@ namespace Emby.Naming.ExternalFiles
                     // Try to translate to three character code
                     var culture = _localizationManager.FindLanguageInfo(currentSliceWithoutSeparator);
 
-                    if (culture != null && pathInfo.Language == null)
+                    if (culture is not null && pathInfo.Language is null)
                     {
                         pathInfo.Language = culture.ThreeLetterISOLanguageName;
                         extraString = extraString.Replace(currentSlice, string.Empty, StringComparison.OrdinalIgnoreCase);
                     }
-                    else if (culture != null && pathInfo.Language == "hin")
+                    else if (culture is not null && pathInfo.Language == "hin")
                     {
                         // Hindi language code "hi" collides with a hearing impaired flag - use as Hindi only if no other language is set
                         pathInfo.IsHearingImpaired = true;

+ 1 - 1
Emby.Naming/TV/EpisodePathParser.cs

@@ -76,7 +76,7 @@ namespace Emby.Naming.TV
                 }
             }
 
-            if (result != null && fillExtendedInfo)
+            if (result is not null && fillExtendedInfo)
             {
                 FillAdditional(path, result);
 

+ 1 - 1
Emby.Naming/TV/SeriesPathParser.cs

@@ -28,7 +28,7 @@ namespace Emby.Naming.TV
                 }
             }
 
-            if (result != null)
+            if (result is not null)
             {
                 if (!string.IsNullOrEmpty(result.SeriesName))
                 {

+ 1 - 1
Emby.Naming/Video/ExtraRuleResolver.cs

@@ -76,7 +76,7 @@ namespace Emby.Naming.Video
                     }
                 }
 
-                if (result.ExtraType != null)
+                if (result.ExtraType is not null)
                 {
                     return result;
                 }

+ 3 - 3
Emby.Naming/Video/VideoListResolver.cs

@@ -26,7 +26,7 @@ namespace Emby.Naming.Video
             // Filter out all extras, otherwise they could cause stacks to not be resolved
             // See the unit test TestStackedWithTrailer
             var nonExtras = videoInfos
-                .Where(i => i.ExtraType == null)
+                .Where(i => i.ExtraType is null)
                 .Select(i => new FileSystemMetadata { FullName = i.Path, IsDirectory = i.IsDirectory });
 
             var stackResult = StackResolver.Resolve(nonExtras, namingOptions).ToList();
@@ -42,7 +42,7 @@ namespace Emby.Naming.Video
                     continue;
                 }
 
-                if (current.ExtraType == null)
+                if (current.ExtraType is null)
                 {
                     standaloneMedia.Add(current);
                 }
@@ -109,7 +109,7 @@ namespace Emby.Naming.Video
             for (var i = 0; i < videos.Count; i++)
             {
                 var video = videos[i];
-                if (video.ExtraType != null)
+                if (video.ExtraType is not null)
                 {
                     continue;
                 }

+ 1 - 1
Emby.Naming/Video/VideoResolver.cs

@@ -87,7 +87,7 @@ namespace Emby.Naming.Video
                 name = cleanDateTimeResult.Name;
                 year = cleanDateTimeResult.Year;
 
-                if (extraResult.ExtraType == null
+                if (extraResult.ExtraType is null
                     && TryCleanString(name, namingOptions, out var newName))
                 {
                     name = newName;

+ 1 - 1
Emby.Notifications/NotificationEntryPoint.cs

@@ -141,7 +141,7 @@ namespace Emby.Notifications
 
             lock (_libraryChangedSyncLock)
             {
-                if (_libraryUpdateTimer == null)
+                if (_libraryUpdateTimer is null)
                 {
                     _libraryUpdateTimer = new Timer(
                         LibraryUpdateTimerCallback,

+ 2 - 2
Emby.Notifications/NotificationManager.cs

@@ -68,7 +68,7 @@ namespace Emby.Notifications
 
             var users = GetUserIds(request, options)
                 .Select(i => _userManager.GetUserById(i))
-                .Where(i => relatedItem == null || relatedItem.IsVisibleStandalone(i))
+                .Where(i => relatedItem is null || relatedItem.IsVisibleStandalone(i))
                 .ToArray();
 
             var title = request.Name;
@@ -113,7 +113,7 @@ namespace Emby.Notifications
                 }
             }
 
-            if (options != null && !string.IsNullOrEmpty(request.NotificationType))
+            if (options is not null && !string.IsNullOrEmpty(request.NotificationType))
             {
                 var config = GetConfiguration();
 

+ 5 - 5
Emby.Photos/PhotoProvider.cs

@@ -49,7 +49,7 @@ namespace Emby.Photos
             if (item.IsFileProtocol)
             {
                 var file = directoryService.GetFile(item.Path);
-                return file != null && file.LastWriteTimeUtc != item.DateModified;
+                return file is not null && file.LastWriteTimeUtc != item.DateModified;
             }
 
             return false;
@@ -70,20 +70,20 @@ namespace Emby.Photos
                         if (file.GetTag(TagTypes.TiffIFD) is IFDTag tag)
                         {
                             var structure = tag.Structure;
-                            if (structure != null
+                            if (structure is not null
                                 && structure.GetEntry(0, (ushort)IFDEntryTag.ExifIFD) is SubIFDEntry exif)
                             {
                                 var exifStructure = exif.Structure;
-                                if (exifStructure != null)
+                                if (exifStructure is not null)
                                 {
                                     var entry = exifStructure.GetEntry(0, (ushort)ExifEntryTag.ApertureValue) as RationalIFDEntry;
-                                    if (entry != null)
+                                    if (entry is not null)
                                     {
                                         item.Aperture = (double)entry.Value.Numerator / entry.Value.Denominator;
                                     }
 
                                     entry = exifStructure.GetEntry(0, (ushort)ExifEntryTag.ShutterSpeedValue) as RationalIFDEntry;
-                                    if (entry != null)
+                                    if (entry is not null)
                                     {
                                         item.ShutterSpeed = (double)entry.Value.Numerator / entry.Value.Denominator;
                                     }

+ 3 - 3
Emby.Server.Implementations/AppBase/BaseConfigurationManager.cs

@@ -131,7 +131,7 @@ namespace Emby.Server.Implementations.AppBase
             {
                 _configuration = value;
 
-                _configurationLoaded = value != null;
+                _configurationLoaded = value is not null;
             }
         }
 
@@ -144,7 +144,7 @@ namespace Emby.Server.Implementations.AppBase
         {
             IConfigurationFactory factory = Activator.CreateInstance<T>();
 
-            if (_configurationFactories == null)
+            if (_configurationFactories is null)
             {
                 _configurationFactories = new[] { factory };
             }
@@ -306,7 +306,7 @@ namespace Emby.Server.Implementations.AppBase
                         configurationManager._configurationStores,
                         i => string.Equals(i.Key, k, StringComparison.OrdinalIgnoreCase));
 
-                    if (configurationInfo == null)
+                    if (configurationInfo is null)
                     {
                         throw new ResourceNotFoundException("Configuration with key " + k + " not found.");
                     }

+ 1 - 1
Emby.Server.Implementations/AppBase/ConfigurationHelper.cs

@@ -43,7 +43,7 @@ namespace Emby.Server.Implementations.AppBase
             Span<byte> newBytes = stream.GetBuffer().AsSpan(0, (int)stream.Length);
 
             // If the file didn't exist before, or if something has changed, re-save
-            if (buffer == null || !newBytes.SequenceEqual(buffer))
+            if (buffer is null || !newBytes.SequenceEqual(buffer))
             {
                 var directory = Path.GetDirectoryName(path) ?? throw new ArgumentException($"Provided path ({path}) is not valid.", nameof(path));
 

+ 4 - 4
Emby.Server.Implementations/ApplicationHost.cs

@@ -196,7 +196,7 @@ namespace Emby.Server.Implementations
         /// <summary>
         /// Gets a value indicating whether this instance can self restart.
         /// </summary>
-        public bool CanSelfRestart => _startupOptions.RestartPath != null;
+        public bool CanSelfRestart => _startupOptions.RestartPath is not null;
 
         public bool CoreStartupHasCompleted { get; private set; }
 
@@ -311,7 +311,7 @@ namespace Emby.Server.Implementations
         public X509Certificate2 Certificate { get; private set; }
 
         /// <inheritdoc/>
-        public bool ListenWithHttps => Certificate != null && ConfigurationManager.GetNetworkConfiguration().EnableHttps;
+        public bool ListenWithHttps => Certificate is not null && ConfigurationManager.GetNetworkConfiguration().EnableHttps;
 
         public string FriendlyName =>
             string.IsNullOrEmpty(ConfigurationManager.Configuration.ServerName)
@@ -403,7 +403,7 @@ namespace Emby.Server.Implementations
             // Convert to list so this isn't executed for each iteration
             var parts = GetExportTypes<T>()
                 .Select(CreateInstanceSafe)
-                .Where(i => i != null)
+                .Where(i => i is not null)
                 .Cast<T>()
                 .ToList();
 
@@ -424,7 +424,7 @@ namespace Emby.Server.Implementations
             // Convert to list so this isn't executed for each iteration
             var parts = GetExportTypes<T>()
                 .Select(i => defaultFunc(i))
-                .Where(i => i != null)
+                .Where(i => i is not null)
                 .Cast<T>()
                 .ToList();
 

+ 14 - 14
Emby.Server.Implementations/Channels/ChannelManager.cs

@@ -129,7 +129,7 @@ namespace Emby.Server.Implementations.Channels
         public Task DeleteItem(BaseItem item)
         {
             var internalChannel = _libraryManager.GetItemById(item.ChannelId);
-            if (internalChannel == null)
+            if (internalChannel is null)
             {
                 throw new ArgumentException(nameof(item.ChannelId));
             }
@@ -227,7 +227,7 @@ namespace Emby.Server.Implementations.Channels
                     .ToList();
             }
 
-            if (user != null)
+            if (user is not null)
             {
                 channels = channels.Where(i =>
                 {
@@ -253,7 +253,7 @@ namespace Emby.Server.Implementations.Channels
             if (query.StartIndex.HasValue || query.Limit.HasValue)
             {
                 int startIndex = query.StartIndex ?? 0;
-                int count = query.Limit == null ? totalCount - startIndex : Math.Min(query.Limit.Value, totalCount - startIndex);
+                int count = query.Limit is null ? totalCount - startIndex : Math.Min(query.Limit.Value, totalCount - startIndex);
                 all = all.GetRange(startIndex, count);
             }
 
@@ -355,7 +355,7 @@ namespace Emby.Server.Implementations.Channels
         {
             var path = Path.Combine(item.GetInternalMetadataPath(), "channelmediasourceinfos.json");
 
-            if (mediaSources == null || mediaSources.Count == 0)
+            if (mediaSources is null || mediaSources.Count == 0)
             {
                 try
                 {
@@ -447,7 +447,7 @@ namespace Emby.Server.Implementations.Channels
 
             var item = _libraryManager.GetItemById(id) as Channel;
 
-            if (item == null)
+            if (item is null)
             {
                 item = new Channel
                 {
@@ -739,7 +739,7 @@ namespace Emby.Server.Implementations.Channels
             query.GroupByPresentationUniqueKey = false;
 
             // null if came from cache
-            if (itemsResult != null)
+            if (itemsResult is not null)
             {
                 var items = itemsResult.Items;
                 var itemsLen = items.Count;
@@ -761,7 +761,7 @@ namespace Emby.Server.Implementations.Channels
                 foreach (var deadId in deadIds)
                 {
                     var deadItem = _libraryManager.GetItemById(deadId);
-                    if (deadItem != null)
+                    if (deadItem is not null)
                     {
                         _libraryManager.DeleteItem(
                             deadItem,
@@ -813,7 +813,7 @@ namespace Emby.Server.Implementations.Channels
                 {
                     await using FileStream jsonStream = AsyncFile.OpenRead(cachePath);
                     var cachedResult = await JsonSerializer.DeserializeAsync<ChannelItemResult>(jsonStream, _jsonOptions, cancellationToken).ConfigureAwait(false);
-                    if (cachedResult != null)
+                    if (cachedResult is not null)
                     {
                         return null;
                     }
@@ -836,7 +836,7 @@ namespace Emby.Server.Implementations.Channels
                     {
                         await using FileStream jsonStream = AsyncFile.OpenRead(cachePath);
                         var cachedResult = await JsonSerializer.DeserializeAsync<ChannelItemResult>(jsonStream, _jsonOptions, cancellationToken).ConfigureAwait(false);
-                        if (cachedResult != null)
+                        if (cachedResult is not null)
                         {
                             return null;
                         }
@@ -861,7 +861,7 @@ namespace Emby.Server.Implementations.Channels
 
                 var result = await channel.GetChannelItems(query, cancellationToken).ConfigureAwait(false);
 
-                if (result == null)
+                if (result is null)
                 {
                     throw new InvalidOperationException("Channel returned a null result from GetChannelItems");
                 }
@@ -955,7 +955,7 @@ namespace Emby.Server.Implementations.Channels
                 _logger.LogError(ex, "Error retrieving channel item from database");
             }
 
-            if (item == null)
+            if (item is null)
             {
                 item = new T();
                 isNew = true;
@@ -1156,7 +1156,7 @@ namespace Emby.Server.Implementations.Channels
             {
                 _libraryManager.CreateItem(item, parentFolder);
 
-                if (info.People != null && info.People.Count > 0)
+                if (info.People is not null && info.People.Count > 0)
                 {
                     _libraryManager.UpdatePeople(item, info.People);
                 }
@@ -1193,7 +1193,7 @@ namespace Emby.Server.Implementations.Channels
             var result = GetAllChannels()
                 .FirstOrDefault(i => GetInternalChannelId(i.Name).Equals(channel.ChannelId) || string.Equals(i.Name, channel.Name, StringComparison.OrdinalIgnoreCase));
 
-            if (result == null)
+            if (result is null)
             {
                 throw new ResourceNotFoundException("No channel provider found for channel " + channel.Name);
             }
@@ -1206,7 +1206,7 @@ namespace Emby.Server.Implementations.Channels
             var result = GetAllChannels()
                 .FirstOrDefault(i => internalChannelId.Equals(GetInternalChannelId(i.Name)));
 
-            if (result == null)
+            if (result is null)
             {
                 throw new ResourceNotFoundException("No channel provider found for channel id " + internalChannelId);
             }

+ 3 - 3
Emby.Server.Implementations/Collections/CollectionImageProvider.cs

@@ -59,7 +59,7 @@ namespace Emby.Server.Implementations.Collections
                     var episode = subItem as Episode;
 
                     var series = episode?.Series;
-                    if (series != null && series.HasImage(ImageType.Primary))
+                    if (series is not null && series.HasImage(ImageType.Primary))
                     {
                         return series;
                     }
@@ -71,7 +71,7 @@ namespace Emby.Server.Implementations.Collections
 
                     var parent = subItem.GetOwner() ?? subItem.GetParent();
 
-                    if (parent != null && parent.HasImage(ImageType.Primary))
+                    if (parent is not null && parent.HasImage(ImageType.Primary))
                     {
                         if (parent is MusicAlbum)
                         {
@@ -81,7 +81,7 @@ namespace Emby.Server.Implementations.Collections
 
                     return null;
                 })
-                .Where(i => i != null)
+                .Where(i => i is not null)
                 .GroupBy(x => x!.Id) // We removed the null values
                 .Select(x => x.First())
                 .ToList()!; // Again... the list doesn't contain any null values

+ 7 - 7
Emby.Server.Implementations/Collections/CollectionManager.cs

@@ -81,7 +81,7 @@ namespace Emby.Server.Implementations.Collections
         internal async Task<Folder?> EnsureLibraryFolder(string path, bool createIfNeeded)
         {
             var existingFolder = FindFolders(path).FirstOrDefault();
-            if (existingFolder != null)
+            if (existingFolder is not null)
             {
                 return existingFolder;
             }
@@ -121,7 +121,7 @@ namespace Emby.Server.Implementations.Collections
         {
             var folder = GetCollectionsFolder(false).GetAwaiter().GetResult();
 
-            return folder == null
+            return folder is null
                 ? Enumerable.Empty<BoxSet>()
                 : folder.GetChildren(user, true).OfType<BoxSet>();
         }
@@ -138,7 +138,7 @@ namespace Emby.Server.Implementations.Collections
 
             var parentFolder = await GetCollectionsFolder(true).ConfigureAwait(false);
 
-            if (parentFolder == null)
+            if (parentFolder is null)
             {
                 throw new ArgumentException(nameof(parentFolder));
             }
@@ -216,7 +216,7 @@ namespace Emby.Server.Implementations.Collections
             {
                 var item = _libraryManager.GetItemById(id);
 
-                if (item == null)
+                if (item is null)
                 {
                     throw new ArgumentException("No item exists with the supplied Id");
                 }
@@ -265,9 +265,9 @@ namespace Emby.Server.Implementations.Collections
             {
                 var childItem = _libraryManager.GetItemById(guidId);
 
-                var child = collection.LinkedChildren.FirstOrDefault(i => (i.ItemId.HasValue && i.ItemId.Value.Equals(guidId)) || (childItem != null && string.Equals(childItem.Path, i.Path, StringComparison.OrdinalIgnoreCase)));
+                var child = collection.LinkedChildren.FirstOrDefault(i => (i.ItemId.HasValue && i.ItemId.Value.Equals(guidId)) || (childItem is not null && string.Equals(childItem.Path, i.Path, StringComparison.OrdinalIgnoreCase)));
 
-                if (child == null)
+                if (child is null)
                 {
                     _logger.LogWarning("No collection title exists with the supplied Id");
                     continue;
@@ -275,7 +275,7 @@ namespace Emby.Server.Implementations.Collections
 
                 list.Add(child);
 
-                if (childItem != null)
+                if (childItem is not null)
                 {
                     itemList.Add(childItem);
                 }

+ 1 - 1
Emby.Server.Implementations/Data/BaseSqliteRepository.cs

@@ -101,7 +101,7 @@ namespace Emby.Server.Implementations.Data
         protected ManagedConnection GetConnection(bool readOnly = false)
         {
             WriteLock.Wait();
-            if (WriteConnection != null)
+            if (WriteConnection is not null)
             {
                 return new ManagedConnection(WriteConnection, WriteLock);
             }

+ 1 - 1
Emby.Server.Implementations/Data/CleanDatabaseScheduledTask.cs

@@ -44,7 +44,7 @@ namespace Emby.Server.Implementations.Data
 
                 var item = _libraryManager.GetItemById(itemId);
 
-                if (item != null)
+                if (item is not null)
                 {
                     _logger.LogInformation("Cleaning item {0} type: {1} path: {2}", item.Name, item.GetType().Name, item.Path ?? string.Empty);
 

+ 1 - 1
Emby.Server.Implementations/Data/SqliteExtensions.cs

@@ -253,7 +253,7 @@ namespace Emby.Server.Implementations.Data
         {
             if (statement.BindParameters.TryGetValue(name, out IBindParameter bindParam))
             {
-                if (value == null)
+                if (value is null)
                 {
                     bindParam.BindNull();
                 }

+ 58 - 58
Emby.Server.Implementations/Data/SqliteItemRepository.cs

@@ -691,7 +691,7 @@ namespace Emby.Server.Implementations.Data
 
         private string GetPathToSave(string path)
         {
-            if (path == null)
+            if (path is null)
             {
                 return null;
             }
@@ -890,7 +890,7 @@ namespace Emby.Server.Implementations.Data
 
             saveItemStatement.TryBind("@UnratedType", item.GetBlockUnratedType().ToString());
 
-            if (topParent == null)
+            if (topParent is null)
             {
                 saveItemStatement.TryBindNull("@TopParentId");
             }
@@ -1146,7 +1146,7 @@ namespace Emby.Server.Implementations.Data
             {
                 var image = ItemImageInfoFromValueString(part);
 
-                if (image != null)
+                if (image is not null)
                 {
                     result[position++] = image;
                 }
@@ -1414,7 +1414,7 @@ namespace Emby.Server.Implementations.Data
 
             var type = _typeMapper.GetType(typeString);
 
-            if (type == null)
+            if (type is null)
             {
                 return null;
             }
@@ -1433,7 +1433,7 @@ namespace Emby.Server.Implementations.Data
                 }
             }
 
-            if (item == null)
+            if (item is null)
             {
                 try
                 {
@@ -1444,7 +1444,7 @@ namespace Emby.Server.Implementations.Data
                 }
             }
 
-            if (item == null)
+            if (item is null)
             {
                 return null;
             }
@@ -1825,7 +1825,7 @@ namespace Emby.Server.Implementations.Data
             var hasSeries = item as IHasSeries;
             if (hasSeriesFields)
             {
-                if (hasSeries != null)
+                if (hasSeries is not null)
                 {
                     if (reader.TryGetGuid(index, out var seriesId))
                     {
@@ -1938,7 +1938,7 @@ namespace Emby.Server.Implementations.Data
 
             if (HasField(query, ItemFields.SeriesPresentationUniqueKey))
             {
-                if (hasSeries != null)
+                if (hasSeries is not null)
                 {
                     if (reader.TryGetString(index, out var seriesPresentationUniqueKey))
                     {
@@ -2151,7 +2151,7 @@ namespace Emby.Server.Implementations.Data
 
         private static bool EnableJoinUserData(InternalItemsQuery query)
         {
-            if (query.User == null)
+            if (query.User is null)
             {
                 return false;
             }
@@ -2205,7 +2205,7 @@ namespace Emby.Server.Implementations.Data
 
         private bool HasProgramAttributes(InternalItemsQuery query)
         {
-            if (query.ParentType != null && _programExcludeParentTypes.Contains(query.ParentType.Value))
+            if (query.ParentType is not null && _programExcludeParentTypes.Contains(query.ParentType.Value))
             {
                 return false;
             }
@@ -2220,7 +2220,7 @@ namespace Emby.Server.Implementations.Data
 
         private bool HasServiceName(InternalItemsQuery query)
         {
-            if (query.ParentType != null && _programExcludeParentTypes.Contains(query.ParentType.Value))
+            if (query.ParentType is not null && _programExcludeParentTypes.Contains(query.ParentType.Value))
             {
                 return false;
             }
@@ -2235,7 +2235,7 @@ namespace Emby.Server.Implementations.Data
 
         private bool HasStartDate(InternalItemsQuery query)
         {
-            if (query.ParentType != null && _programExcludeParentTypes.Contains(query.ParentType.Value))
+            if (query.ParentType is not null && _programExcludeParentTypes.Contains(query.ParentType.Value))
             {
                 return false;
             }
@@ -2270,7 +2270,7 @@ namespace Emby.Server.Implementations.Data
 
         private bool HasArtistFields(InternalItemsQuery query)
         {
-            if (query.ParentType != null && _artistExcludeParentTypes.Contains(query.ParentType.Value))
+            if (query.ParentType is not null && _artistExcludeParentTypes.Contains(query.ParentType.Value))
             {
                 return false;
             }
@@ -2392,7 +2392,7 @@ namespace Emby.Server.Implementations.Data
                 columns.Add("UserDatas.rating");
             }
 
-            if (query.SimilarTo != null)
+            if (query.SimilarTo is not null)
             {
                 var item = query.SimilarTo;
 
@@ -2497,7 +2497,7 @@ namespace Emby.Server.Implementations.Data
         {
             var item = query.SimilarTo;
 
-            if (item == null)
+            if (item is null)
             {
                 return;
             }
@@ -2681,7 +2681,7 @@ namespace Emby.Server.Implementations.Data
                     foreach (var row in statement.ExecuteQuery())
                     {
                         var item = GetItem(row, query, hasProgramAttributes, hasEpisodeAttributes, hasServiceName, hasStartDate, hasTrailerTypes, hasArtistFields, hasSeriesFields);
-                        if (item != null)
+                        if (item is not null)
                         {
                             items.Add(item);
                         }
@@ -2923,7 +2923,7 @@ namespace Emby.Server.Implementations.Data
                                 foreach (var row in statement.ExecuteQuery())
                                 {
                                     var item = GetItem(row, query, hasProgramAttributes, hasEpisodeAttributes, hasServiceName, hasStartDate, hasTrailerTypes, hasArtistFields, hasSeriesFields);
-                                    if (item != null)
+                                    if (item is not null)
                                     {
                                         list.Add(item);
                                     }
@@ -2966,7 +2966,7 @@ namespace Emby.Server.Implementations.Data
         private string GetOrderByText(InternalItemsQuery query)
         {
             var orderBy = query.OrderBy;
-            bool hasSimilar = query.SimilarTo != null;
+            bool hasSimilar = query.SimilarTo is not null;
             bool hasSearch = !string.IsNullOrEmpty(query.SearchTerm);
 
             if (hasSimilar || hasSearch)
@@ -3396,7 +3396,7 @@ namespace Emby.Server.Implementations.Data
                 }
             }
 
-            if (query.SimilarTo != null && query.MinSimilarityScore > 0)
+            if (query.SimilarTo is not null && query.MinSimilarityScore > 0)
             {
                 whereClauses.Add("SimilarityScore > " + (query.MinSimilarityScore - 1).ToString(CultureInfo.InvariantCulture));
             }
@@ -3683,7 +3683,7 @@ namespace Emby.Server.Implementations.Data
                         .Append(paramName)
                         .Append("))) OR ");
 
-                    if (statement != null)
+                    if (statement is not null)
                     {
                         query.PersonIds[i].TryWriteBytes(idBytes);
                         statement.TryBind(paramName, idBytes);
@@ -3734,7 +3734,7 @@ namespace Emby.Server.Implementations.Data
             if (!string.IsNullOrWhiteSpace(nameContains))
             {
                 whereClauses.Add("(CleanName like @NameContains or OriginalTitle like @NameContains)");
-                if (statement != null)
+                if (statement is not null)
                 {
                     nameContains = FixUnicodeChars(nameContains);
 
@@ -3865,7 +3865,7 @@ namespace Emby.Server.Implementations.Data
                     var paramName = "@ArtistIds" + index;
 
                     clauses.Add("(guid in (select itemid from ItemValues where CleanValue = (select CleanName from TypedBaseItems where guid=" + paramName + ") and Type<=1))");
-                    if (statement != null)
+                    if (statement is not null)
                     {
                         statement.TryBind(paramName, artistId);
                     }
@@ -3886,7 +3886,7 @@ namespace Emby.Server.Implementations.Data
                     var paramName = "@ArtistIds" + index;
 
                     clauses.Add("(guid in (select itemid from ItemValues where CleanValue = (select CleanName from TypedBaseItems where guid=" + paramName + ") and Type=1))");
-                    if (statement != null)
+                    if (statement is not null)
                     {
                         statement.TryBind(paramName, artistId);
                     }
@@ -3907,7 +3907,7 @@ namespace Emby.Server.Implementations.Data
                     var paramName = "@ArtistIds" + index;
 
                     clauses.Add("((select CleanName from TypedBaseItems where guid=" + paramName + ") in (select CleanValue from ItemValues where ItemId=Guid and Type=0) AND (select CleanName from TypedBaseItems where guid=" + paramName + ") not in (select CleanValue from ItemValues where ItemId=Guid and Type=1))");
-                    if (statement != null)
+                    if (statement is not null)
                     {
                         statement.TryBind(paramName, artistId);
                     }
@@ -3928,7 +3928,7 @@ namespace Emby.Server.Implementations.Data
                     var paramName = "@AlbumIds" + index;
 
                     clauses.Add("Album in (select Name from typedbaseitems where guid=" + paramName + ")");
-                    if (statement != null)
+                    if (statement is not null)
                     {
                         statement.TryBind(paramName, albumId);
                     }
@@ -3949,7 +3949,7 @@ namespace Emby.Server.Implementations.Data
                     var paramName = "@ExcludeArtistId" + index;
 
                     clauses.Add("(guid not in (select itemid from ItemValues where CleanValue = (select CleanName from TypedBaseItems where guid=" + paramName + ") and Type<=1))");
-                    if (statement != null)
+                    if (statement is not null)
                     {
                         statement.TryBind(paramName, artistId);
                     }
@@ -3970,7 +3970,7 @@ namespace Emby.Server.Implementations.Data
                     var paramName = "@GenreId" + index;
 
                     clauses.Add("(guid in (select itemid from ItemValues where CleanValue = (select CleanName from TypedBaseItems where guid=" + paramName + ") and Type=2))");
-                    if (statement != null)
+                    if (statement is not null)
                     {
                         statement.TryBind(paramName, genreId);
                     }
@@ -3989,7 +3989,7 @@ namespace Emby.Server.Implementations.Data
                 foreach (var item in query.Genres)
                 {
                     clauses.Add("@Genre" + index + " in (select CleanValue from ItemValues where ItemId=Guid and Type=2)");
-                    if (statement != null)
+                    if (statement is not null)
                     {
                         statement.TryBind("@Genre" + index, GetCleanValue(item));
                     }
@@ -4008,7 +4008,7 @@ namespace Emby.Server.Implementations.Data
                 foreach (var item in tags)
                 {
                     clauses.Add("@Tag" + index + " in (select CleanValue from ItemValues where ItemId=Guid and Type=4)");
-                    if (statement != null)
+                    if (statement is not null)
                     {
                         statement.TryBind("@Tag" + index, GetCleanValue(item));
                     }
@@ -4027,7 +4027,7 @@ namespace Emby.Server.Implementations.Data
                 foreach (var item in excludeTags)
                 {
                     clauses.Add("@ExcludeTag" + index + " not in (select CleanValue from ItemValues where ItemId=Guid and Type=4)");
-                    if (statement != null)
+                    if (statement is not null)
                     {
                         statement.TryBind("@ExcludeTag" + index, GetCleanValue(item));
                     }
@@ -4049,7 +4049,7 @@ namespace Emby.Server.Implementations.Data
 
                     clauses.Add("(guid in (select itemid from ItemValues where CleanValue = (select CleanName from TypedBaseItems where guid=" + paramName + ") and Type=3))");
 
-                    if (statement != null)
+                    if (statement is not null)
                     {
                         statement.TryBind(paramName, studioId);
                     }
@@ -4068,7 +4068,7 @@ namespace Emby.Server.Implementations.Data
                 foreach (var item in query.OfficialRatings)
                 {
                     clauses.Add("OfficialRating=@OfficialRating" + index);
-                    if (statement != null)
+                    if (statement is not null)
                     {
                         statement.TryBind("@OfficialRating" + index, item);
                     }
@@ -4083,7 +4083,7 @@ namespace Emby.Server.Implementations.Data
             if (query.MinParentalRating.HasValue)
             {
                 whereClauses.Add("InheritedParentalRatingValue>=@MinParentalRating");
-                if (statement != null)
+                if (statement is not null)
                 {
                     statement.TryBind("@MinParentalRating", query.MinParentalRating.Value);
                 }
@@ -4092,7 +4092,7 @@ namespace Emby.Server.Implementations.Data
             if (query.MaxParentalRating.HasValue)
             {
                 whereClauses.Add("InheritedParentalRatingValue<=@MaxParentalRating");
-                if (statement != null)
+                if (statement is not null)
                 {
                     statement.TryBind("@MaxParentalRating", query.MaxParentalRating.Value);
                 }
@@ -4149,7 +4149,7 @@ namespace Emby.Server.Implementations.Data
             if (!string.IsNullOrWhiteSpace(query.HasNoAudioTrackWithLanguage))
             {
                 whereClauses.Add("((select language from MediaStreams where MediaStreams.ItemId=A.Guid and MediaStreams.StreamType='Audio' and MediaStreams.Language=@HasNoAudioTrackWithLanguage limit 1) is null)");
-                if (statement != null)
+                if (statement is not null)
                 {
                     statement.TryBind("@HasNoAudioTrackWithLanguage", query.HasNoAudioTrackWithLanguage);
                 }
@@ -4158,7 +4158,7 @@ namespace Emby.Server.Implementations.Data
             if (!string.IsNullOrWhiteSpace(query.HasNoInternalSubtitleTrackWithLanguage))
             {
                 whereClauses.Add("((select language from MediaStreams where MediaStreams.ItemId=A.Guid and MediaStreams.StreamType='Subtitle' and MediaStreams.IsExternal=0 and MediaStreams.Language=@HasNoInternalSubtitleTrackWithLanguage limit 1) is null)");
-                if (statement != null)
+                if (statement is not null)
                 {
                     statement.TryBind("@HasNoInternalSubtitleTrackWithLanguage", query.HasNoInternalSubtitleTrackWithLanguage);
                 }
@@ -4167,7 +4167,7 @@ namespace Emby.Server.Implementations.Data
             if (!string.IsNullOrWhiteSpace(query.HasNoExternalSubtitleTrackWithLanguage))
             {
                 whereClauses.Add("((select language from MediaStreams where MediaStreams.ItemId=A.Guid and MediaStreams.StreamType='Subtitle' and MediaStreams.IsExternal=1 and MediaStreams.Language=@HasNoExternalSubtitleTrackWithLanguage limit 1) is null)");
-                if (statement != null)
+                if (statement is not null)
                 {
                     statement.TryBind("@HasNoExternalSubtitleTrackWithLanguage", query.HasNoExternalSubtitleTrackWithLanguage);
                 }
@@ -4176,7 +4176,7 @@ namespace Emby.Server.Implementations.Data
             if (!string.IsNullOrWhiteSpace(query.HasNoSubtitleTrackWithLanguage))
             {
                 whereClauses.Add("((select language from MediaStreams where MediaStreams.ItemId=A.Guid and MediaStreams.StreamType='Subtitle' and MediaStreams.Language=@HasNoSubtitleTrackWithLanguage limit 1) is null)");
-                if (statement != null)
+                if (statement is not null)
                 {
                     statement.TryBind("@HasNoSubtitleTrackWithLanguage", query.HasNoSubtitleTrackWithLanguage);
                 }
@@ -4229,7 +4229,7 @@ namespace Emby.Server.Implementations.Data
             if (query.Years.Length == 1)
             {
                 whereClauses.Add("ProductionYear=@Years");
-                if (statement != null)
+                if (statement is not null)
                 {
                     statement.TryBind("@Years", query.Years[0].ToString(CultureInfo.InvariantCulture));
                 }
@@ -4245,7 +4245,7 @@ namespace Emby.Server.Implementations.Data
             if (isVirtualItem.HasValue)
             {
                 whereClauses.Add("IsVirtualItem=@IsVirtualItem");
-                if (statement != null)
+                if (statement is not null)
                 {
                     statement.TryBind("@IsVirtualItem", isVirtualItem.Value);
                 }
@@ -4279,7 +4279,7 @@ namespace Emby.Server.Implementations.Data
             if (queryMediaTypes.Length == 1)
             {
                 whereClauses.Add("MediaType=@MediaTypes");
-                if (statement != null)
+                if (statement is not null)
                 {
                     statement.TryBind("@MediaTypes", queryMediaTypes[0]);
                 }
@@ -4299,7 +4299,7 @@ namespace Emby.Server.Implementations.Data
                 foreach (var id in query.ItemIds)
                 {
                     includeIds.Add("Guid = @IncludeId" + index);
-                    if (statement != null)
+                    if (statement is not null)
                     {
                         statement.TryBind("@IncludeId" + index, id);
                     }
@@ -4318,7 +4318,7 @@ namespace Emby.Server.Implementations.Data
                 foreach (var id in query.ExcludeItemIds)
                 {
                     excludeIds.Add("Guid <> @ExcludeId" + index);
-                    if (statement != null)
+                    if (statement is not null)
                     {
                         statement.TryBind("@ExcludeId" + index, id);
                     }
@@ -4329,7 +4329,7 @@ namespace Emby.Server.Implementations.Data
                 whereClauses.Add(string.Join(" AND ", excludeIds));
             }
 
-            if (query.ExcludeProviderIds != null && query.ExcludeProviderIds.Count > 0)
+            if (query.ExcludeProviderIds is not null && query.ExcludeProviderIds.Count > 0)
             {
                 var excludeIds = new List<string>();
 
@@ -4343,7 +4343,7 @@ namespace Emby.Server.Implementations.Data
 
                     var paramName = "@ExcludeProviderId" + index;
                     excludeIds.Add("(ProviderIds is null or ProviderIds not like " + paramName + ")");
-                    if (statement != null)
+                    if (statement is not null)
                     {
                         statement.TryBind(paramName, "%" + pair.Key + "=" + pair.Value + "%");
                     }
@@ -4359,7 +4359,7 @@ namespace Emby.Server.Implementations.Data
                 }
             }
 
-            if (query.HasAnyProviderId != null && query.HasAnyProviderId.Count > 0)
+            if (query.HasAnyProviderId is not null && query.HasAnyProviderId.Count > 0)
             {
                 var hasProviderIds = new List<string>();
 
@@ -4386,7 +4386,7 @@ namespace Emby.Server.Implementations.Data
                     hasProviderIds.Add("ProviderIds like " + paramName);
 
                     // this replaces the placeholder with a value, here: %key=val%
-                    if (statement != null)
+                    if (statement is not null)
                     {
                         statement.TryBind(paramName, "%" + pair.Key + "=" + pair.Value + "%");
                     }
@@ -4468,7 +4468,7 @@ namespace Emby.Server.Implementations.Data
             {
                 whereClauses.Add("Guid in (select itemId from AncestorIds where AncestorId=@AncestorId)");
 
-                if (statement != null)
+                if (statement is not null)
                 {
                     statement.TryBind("@AncestorId", query.AncestorIds[0]);
                 }
@@ -4484,7 +4484,7 @@ namespace Emby.Server.Implementations.Data
             {
                 var inClause = "select guid from TypedBaseItems where PresentationUniqueKey=@AncestorWithPresentationUniqueKey";
                 whereClauses.Add(string.Format(CultureInfo.InvariantCulture, "Guid in (select itemId from AncestorIds where AncestorId in ({0}))", inClause));
-                if (statement != null)
+                if (statement is not null)
                 {
                     statement.TryBind("@AncestorWithPresentationUniqueKey", query.AncestorWithPresentationUniqueKey);
                 }
@@ -4494,7 +4494,7 @@ namespace Emby.Server.Implementations.Data
             {
                 whereClauses.Add("SeriesPresentationUniqueKey=@SeriesPresentationUniqueKey");
 
-                if (statement != null)
+                if (statement is not null)
                 {
                     statement.TryBind("@SeriesPresentationUniqueKey", query.SeriesPresentationUniqueKey);
                 }
@@ -4503,7 +4503,7 @@ namespace Emby.Server.Implementations.Data
             if (query.BlockUnratedItems.Length == 1)
             {
                 whereClauses.Add("(InheritedParentalRatingValue > 0 or UnratedType <> @UnratedType)");
-                if (statement != null)
+                if (statement is not null)
                 {
                     statement.TryBind("@UnratedType", query.BlockUnratedItems[0].ToString());
                 }
@@ -4522,7 +4522,7 @@ namespace Emby.Server.Implementations.Data
             if (query.ExcludeInheritedTags.Length > 0)
             {
                 var paramName = "@ExcludeInheritedTags";
-                if (statement == null)
+                if (statement is null)
                 {
                     int index = 0;
                     string excludedTags = string.Join(',', query.ExcludeInheritedTags.Select(_ => paramName + index++));
@@ -4732,7 +4732,7 @@ namespace Emby.Server.Implementations.Data
                 return false;
             }
 
-            if (query.User == null)
+            if (query.User is null)
             {
                 return false;
             }
@@ -4916,7 +4916,7 @@ where AncestorIdText not null and ItemValues.Value not null and ItemValues.Type
         {
             var whereClauses = new List<string>();
 
-            if (query.User != null && query.IsFavorite.HasValue)
+            if (query.User is not null && query.IsFavorite.HasValue)
             {
                 whereClauses.Add(@"p.Name IN (
 SELECT Name FROM TypedBaseItems WHERE UserDataKey IN (
@@ -5293,7 +5293,7 @@ AND Type = @InternalPersonType)");
                 .Append(" group by PresentationUniqueKey");
 
             if (query.OrderBy.Count != 0
-                || query.SimilarTo != null
+                || query.SimilarTo is not null
                 || !string.IsNullOrEmpty(query.SearchTerm))
             {
                 stringBuilder.Append(GetOrderByText(query));
@@ -5361,7 +5361,7 @@ AND Type = @InternalPersonType)");
                                     statement.TryBind("@UserId", query.User.InternalId);
                                 }
 
-                                if (typeSubQuery != null)
+                                if (typeSubQuery is not null)
                                 {
                                     GetWhereClauses(typeSubQuery, null);
                                 }
@@ -5382,7 +5382,7 @@ AND Type = @InternalPersonType)");
                                 foreach (var row in statement.ExecuteQuery())
                                 {
                                     var item = GetItem(row, query, hasProgramAttributes, hasEpisodeAttributes, hasServiceName, hasStartDate, hasTrailerTypes, hasArtistFields, hasSeriesFields);
-                                    if (item != null)
+                                    if (item is not null)
                                     {
                                         var countStartColumn = columns.Count - 1;
 
@@ -5402,7 +5402,7 @@ AND Type = @InternalPersonType)");
                                     statement.TryBind("@UserId", query.User.InternalId);
                                 }
 
-                                if (typeSubQuery != null)
+                                if (typeSubQuery is not null)
                                 {
                                     GetWhereClauses(typeSubQuery, null);
                                 }

+ 1 - 1
Emby.Server.Implementations/Data/TypeMapper.cs

@@ -30,7 +30,7 @@ namespace Emby.Server.Implementations.Data
 
             return _typeMap.GetOrAdd(typeName, k => AppDomain.CurrentDomain.GetAssemblies()
                 .Select(a => a.GetType(k))
-                .FirstOrDefault(t => t != null));
+                .FirstOrDefault(t => t is not null));
         }
     }
 }

+ 41 - 41
Emby.Server.Implementations/Dto/DtoService.cs

@@ -213,7 +213,7 @@ namespace Emby.Server.Implementations.Dto
                 dto.DisplayPreferencesId = item.DisplayPreferencesId.ToString("N", CultureInfo.InvariantCulture);
             }
 
-            if (user != null)
+            if (user is not null)
             {
                 AttachUserSpecificInfo(dto, item, user, options);
             }
@@ -235,14 +235,14 @@ namespace Emby.Server.Implementations.Dto
 
             if (options.ContainsField(ItemFields.CanDelete))
             {
-                dto.CanDelete = user == null
+                dto.CanDelete = user is null
                     ? item.CanDelete()
                     : item.CanDelete(user);
             }
 
             if (options.ContainsField(ItemFields.CanDownload))
             {
-                dto.CanDownload = user == null
+                dto.CanDownload = user is null
                     ? item.CanDownload()
                     : item.CanDownload(user);
             }
@@ -254,7 +254,7 @@ namespace Emby.Server.Implementations.Dto
 
             var liveTvManager = LivetvManager;
             var activeRecording = liveTvManager.GetActiveRecordingInfo(item.Path);
-            if (activeRecording != null)
+            if (activeRecording is not null)
             {
                 dto.Type = BaseItemKind.Recording;
                 dto.CanDownload = false;
@@ -317,7 +317,7 @@ namespace Emby.Server.Implementations.Dto
         {
             var dto = GetBaseItemDtoInternal(item, options, user);
 
-            if (taggedItems != null && options.ContainsField(ItemFields.ItemCounts))
+            if (taggedItems is not null && options.ContainsField(ItemFields.ItemCounts))
             {
                 SetItemByNameInfo(item, dto, taggedItems);
             }
@@ -417,7 +417,7 @@ namespace Emby.Server.Implementations.Dto
 
             if (options.ContainsField(ItemFields.BasicSyncInfo))
             {
-                var userCanSync = user != null && user.HasPermission(PermissionKind.EnableContentDownloading);
+                var userCanSync = user is not null && user.HasPermission(PermissionKind.EnableContentDownloading);
                 if (userCanSync && item.SupportsExternalTransfer)
                 {
                     dto.SupportsSync = true;
@@ -460,7 +460,7 @@ namespace Emby.Server.Implementations.Dto
 
             var album = item.AlbumEntity;
 
-            if (album != null)
+            if (album is not null)
             {
                 dto.Album = album.Name;
                 dto.AlbumId = album.Id;
@@ -491,7 +491,7 @@ namespace Emby.Server.Implementations.Dto
         {
             return images
                 .Select(p => GetImageCacheTag(item, p))
-                .Where(i => i != null)
+                .Where(i => i is not null)
                 .ToArray();
         }
 
@@ -570,8 +570,8 @@ namespace Emby.Server.Implementations.Dto
                         _logger.LogError(ex, "Error getting person {Name}", c);
                         return null;
                     }
-                }).Where(i => i != null)
-                .Where(i => user == null ?
+                }).Where(i => i is not null)
+                .Where(i => user is null ?
                     true :
                     i.IsVisible(user))
                 .GroupBy(i => i.Name, StringComparer.OrdinalIgnoreCase)
@@ -593,13 +593,13 @@ namespace Emby.Server.Implementations.Dto
                 {
                     baseItemPerson.PrimaryImageTag = GetTagAndFillBlurhash(dto, entity, ImageType.Primary);
                     baseItemPerson.Id = entity.Id;
-                    if (dto.ImageBlurHashes != null)
+                    if (dto.ImageBlurHashes is not null)
                     {
                         // Only add BlurHash for the person's image.
                         baseItemPerson.ImageBlurHashes = new Dictionary<ImageType, Dictionary<string, string>>();
                         foreach (var (imageType, blurHash) in dto.ImageBlurHashes)
                         {
-                            if (blurHash != null)
+                            if (blurHash is not null)
                             {
                                 baseItemPerson.ImageBlurHashes[imageType] = new Dictionary<string, string>();
                                 foreach (var (imageId, blurHashValue) in blurHash)
@@ -662,7 +662,7 @@ namespace Emby.Server.Implementations.Dto
         private string GetTagAndFillBlurhash(BaseItemDto dto, BaseItem item, ImageType imageType, int imageIndex = 0)
         {
             var image = item.GetImageInfo(imageType, imageIndex);
-            if (image != null)
+            if (image is not null)
             {
                 return GetTagAndFillBlurhash(dto, item, image);
             }
@@ -782,7 +782,7 @@ namespace Emby.Server.Implementations.Dto
                     {
                         var tag = GetTagAndFillBlurhash(dto, item, image);
 
-                        if (tag != null)
+                        if (tag is not null)
                         {
                             dto.ImageTags[image.Type] = tag;
                         }
@@ -917,7 +917,7 @@ namespace Emby.Server.Implementations.Dto
 
                 var albumParent = audio.AlbumEntity;
 
-                if (albumParent != null)
+                if (albumParent is not null)
                 {
                     dto.AlbumId = albumParent.Id;
                     dto.AlbumPrimaryImageTag = GetTagAndFillBlurhash(dto, albumParent, ImageType.Primary);
@@ -967,7 +967,7 @@ namespace Emby.Server.Implementations.Dto
                         {
                             EnableImages = false
                         });
-                        if (artist != null)
+                        if (artist is not null)
                         {
                             return new NameGuidPair
                             {
@@ -977,7 +977,7 @@ namespace Emby.Server.Implementations.Dto
                         }
 
                         return null;
-                    }).Where(i => i != null).ToArray();
+                    }).Where(i => i is not null).ToArray();
             }
 
             if (item is IHasAlbumArtist hasAlbumArtist)
@@ -1016,7 +1016,7 @@ namespace Emby.Server.Implementations.Dto
                         {
                             EnableImages = false
                         });
-                        if (artist != null)
+                        if (artist is not null)
                         {
                             return new NameGuidPair
                             {
@@ -1026,7 +1026,7 @@ namespace Emby.Server.Implementations.Dto
                         }
 
                         return null;
-                    }).Where(i => i != null).ToArray();
+                    }).Where(i => i is not null).ToArray();
             }
 
             // Add video info
@@ -1073,7 +1073,7 @@ namespace Emby.Server.Implementations.Dto
                 {
                     MediaStream[] mediaStreams;
 
-                    if (dto.MediaSources != null && dto.MediaSources.Length > 0)
+                    if (dto.MediaSources is not null && dto.MediaSources.Length > 0)
                     {
                         if (item.SourceType == SourceType.Channel)
                         {
@@ -1140,10 +1140,10 @@ namespace Emby.Server.Implementations.Dto
                 // if (options.ContainsField(ItemFields.SeriesPrimaryImage))
                 {
                     episodeSeries ??= episode.Series;
-                    if (episodeSeries != null)
+                    if (episodeSeries is not null)
                     {
                         dto.SeriesPrimaryImageTag = GetTagAndFillBlurhash(dto, episodeSeries, ImageType.Primary);
-                        if (dto.ImageTags == null || !dto.ImageTags.ContainsKey(ImageType.Primary))
+                        if (dto.ImageTags is null || !dto.ImageTags.ContainsKey(ImageType.Primary))
                         {
                             AttachPrimaryImageAspectRatio(dto, episodeSeries);
                         }
@@ -1153,7 +1153,7 @@ namespace Emby.Server.Implementations.Dto
                 if (options.ContainsField(ItemFields.SeriesStudio))
                 {
                     episodeSeries ??= episode.Series;
-                    if (episodeSeries != null)
+                    if (episodeSeries is not null)
                     {
                         dto.SeriesStudio = episodeSeries.Studios.FirstOrDefault();
                     }
@@ -1179,7 +1179,7 @@ namespace Emby.Server.Implementations.Dto
                 if (options.ContainsField(ItemFields.SeriesStudio))
                 {
                     series ??= season.Series;
-                    if (series != null)
+                    if (series is not null)
                     {
                         dto.SeriesStudio = series.Studios.FirstOrDefault();
                     }
@@ -1190,10 +1190,10 @@ namespace Emby.Server.Implementations.Dto
                 // if (options.ContainsField(ItemFields.SeriesPrimaryImage))
                 {
                     series ??= season.Series;
-                    if (series != null)
+                    if (series is not null)
                     {
                         dto.SeriesPrimaryImageTag = GetTagAndFillBlurhash(dto, series, ImageType.Primary);
-                        if (dto.ImageTags == null || !dto.ImageTags.ContainsKey(ImageType.Primary))
+                        if (dto.ImageTags is null || !dto.ImageTags.ContainsKey(ImageType.Primary))
                         {
                             AttachPrimaryImageAspectRatio(dto, series);
                         }
@@ -1256,7 +1256,7 @@ namespace Emby.Server.Implementations.Dto
             if (item.SourceType == SourceType.Channel)
             {
                 var channel = _libraryManager.GetItemById(item.ChannelId);
-                if (channel != null)
+                if (channel is not null)
                 {
                     dto.ChannelName = channel.Name;
                 }
@@ -1268,7 +1268,7 @@ namespace Emby.Server.Implementations.Dto
             if (currentItem is MusicAlbum musicAlbum)
             {
                 var artist = musicAlbum.GetMusicArtist(new DtoOptions(false));
-                if (artist != null)
+                if (artist is not null)
                 {
                     return artist;
                 }
@@ -1276,7 +1276,7 @@ namespace Emby.Server.Implementations.Dto
 
             var parent = currentItem.DisplayParent ?? currentItem.GetOwner() ?? currentItem.GetParent();
 
-            if (parent == null && originalItem is not UserRootFolder && originalItem is not UserView && originalItem is not AggregateFolder && originalItem is not ICollectionFolder && originalItem is not Channel)
+            if (parent is null && originalItem is not UserRootFolder && originalItem is not UserView && originalItem is not AggregateFolder && originalItem is not ICollectionFolder && originalItem is not Channel)
             {
                 parent = _libraryManager.GetCollectionFolders(originalItem).FirstOrDefault();
             }
@@ -1309,53 +1309,53 @@ namespace Emby.Server.Implementations.Dto
 
             var imageTags = dto.ImageTags;
 
-            while ((!(imageTags != null && imageTags.ContainsKey(ImageType.Logo)) && logoLimit > 0)
-                || (!(imageTags != null && imageTags.ContainsKey(ImageType.Art)) && artLimit > 0)
-                || (!(imageTags != null && imageTags.ContainsKey(ImageType.Thumb)) && thumbLimit > 0)
+            while ((!(imageTags is not null && imageTags.ContainsKey(ImageType.Logo)) && logoLimit > 0)
+                || (!(imageTags is not null && imageTags.ContainsKey(ImageType.Art)) && artLimit > 0)
+                || (!(imageTags is not null && imageTags.ContainsKey(ImageType.Thumb)) && thumbLimit > 0)
                 || parent is Series)
             {
                 parent ??= isFirst ? GetImageDisplayParent(item, item) ?? owner : parent;
-                if (parent == null)
+                if (parent is null)
                 {
                     break;
                 }
 
                 var allImages = parent.ImageInfos;
 
-                if (logoLimit > 0 && !(imageTags != null && imageTags.ContainsKey(ImageType.Logo)) && dto.ParentLogoItemId is null)
+                if (logoLimit > 0 && !(imageTags is not null && imageTags.ContainsKey(ImageType.Logo)) && dto.ParentLogoItemId is null)
                 {
                     var image = allImages.FirstOrDefault(i => i.Type == ImageType.Logo);
 
-                    if (image != null)
+                    if (image is not null)
                     {
                         dto.ParentLogoItemId = parent.Id;
                         dto.ParentLogoImageTag = GetTagAndFillBlurhash(dto, parent, image);
                     }
                 }
 
-                if (artLimit > 0 && !(imageTags != null && imageTags.ContainsKey(ImageType.Art)) && dto.ParentArtItemId is null)
+                if (artLimit > 0 && !(imageTags is not null && imageTags.ContainsKey(ImageType.Art)) && dto.ParentArtItemId is null)
                 {
                     var image = allImages.FirstOrDefault(i => i.Type == ImageType.Art);
 
-                    if (image != null)
+                    if (image is not null)
                     {
                         dto.ParentArtItemId = parent.Id;
                         dto.ParentArtImageTag = GetTagAndFillBlurhash(dto, parent, image);
                     }
                 }
 
-                if (thumbLimit > 0 && !(imageTags != null && imageTags.ContainsKey(ImageType.Thumb)) && (dto.ParentThumbItemId is null || parent is Series) && parent is not ICollectionFolder && parent is not UserView)
+                if (thumbLimit > 0 && !(imageTags is not null && imageTags.ContainsKey(ImageType.Thumb)) && (dto.ParentThumbItemId is null || parent is Series) && parent is not ICollectionFolder && parent is not UserView)
                 {
                     var image = allImages.FirstOrDefault(i => i.Type == ImageType.Thumb);
 
-                    if (image != null)
+                    if (image is not null)
                     {
                         dto.ParentThumbItemId = parent.Id;
                         dto.ParentThumbImageTag = GetTagAndFillBlurhash(dto, parent, image);
                     }
                 }
 
-                if (backdropLimit > 0 && !((dto.BackdropImageTags != null && dto.BackdropImageTags.Length > 0) || (dto.ParentBackdropImageTags != null && dto.ParentBackdropImageTags.Length > 0)))
+                if (backdropLimit > 0 && !((dto.BackdropImageTags is not null && dto.BackdropImageTags.Length > 0) || (dto.ParentBackdropImageTags is not null && dto.ParentBackdropImageTags.Length > 0)))
                 {
                     var images = allImages.Where(i => i.Type == ImageType.Backdrop).Take(backdropLimit).ToList();
 
@@ -1403,7 +1403,7 @@ namespace Emby.Server.Implementations.Dto
         {
             var imageInfo = item.GetImageInfo(ImageType.Primary, 0);
 
-            if (imageInfo == null)
+            if (imageInfo is null)
             {
                 return null;
             }

+ 5 - 5
Emby.Server.Implementations/EntryPoints/LibraryChangedNotifier.cs

@@ -191,7 +191,7 @@ namespace Emby.Server.Implementations.EntryPoints
 
             lock (_libraryChangedSyncLock)
             {
-                if (LibraryUpdateTimer == null)
+                if (LibraryUpdateTimer is null)
                 {
                     LibraryUpdateTimer = new Timer(
                         LibraryUpdateTimerCallback,
@@ -227,7 +227,7 @@ namespace Emby.Server.Implementations.EntryPoints
 
             lock (_libraryChangedSyncLock)
             {
-                if (LibraryUpdateTimer == null)
+                if (LibraryUpdateTimer is null)
                 {
                     LibraryUpdateTimer = new Timer(LibraryUpdateTimerCallback, null, LibraryUpdateDuration, Timeout.Infinite);
                 }
@@ -254,7 +254,7 @@ namespace Emby.Server.Implementations.EntryPoints
 
             lock (_libraryChangedSyncLock)
             {
-                if (LibraryUpdateTimer == null)
+                if (LibraryUpdateTimer is null)
                 {
                     LibraryUpdateTimer = new Timer(LibraryUpdateTimerCallback, null, LibraryUpdateDuration, Timeout.Infinite);
                 }
@@ -299,7 +299,7 @@ namespace Emby.Server.Implementations.EntryPoints
 
                 SendChangeNotifications(_itemsAdded.ToList(), itemsUpdated, _itemsRemoved.ToList(), foldersAddedTo, foldersRemovedFrom, CancellationToken.None).GetAwaiter().GetResult();
 
-                if (LibraryUpdateTimer != null)
+                if (LibraryUpdateTimer is not null)
                 {
                     LibraryUpdateTimer.Dispose();
                     LibraryUpdateTimer = null;
@@ -475,7 +475,7 @@ namespace Emby.Server.Implementations.EntryPoints
         {
             if (dispose)
             {
-                if (LibraryUpdateTimer != null)
+                if (LibraryUpdateTimer is not null)
                 {
                     LibraryUpdateTimer.Dispose();
                     LibraryUpdateTimer = null;

+ 5 - 5
Emby.Server.Implementations/EntryPoints/UserDataChangeNotifier.cs

@@ -51,7 +51,7 @@ namespace Emby.Server.Implementations.EntryPoints
 
             lock (_syncLock)
             {
-                if (_updateTimer == null)
+                if (_updateTimer is null)
                 {
                     _updateTimer = new Timer(
                         UpdateTimerCallback,
@@ -75,11 +75,11 @@ namespace Emby.Server.Implementations.EntryPoints
                 var baseItem = e.Item;
 
                 // Go up one level for indicators
-                if (baseItem != null)
+                if (baseItem is not null)
                 {
                     var parent = baseItem.GetOwner() ?? baseItem.GetParent();
 
-                    if (parent != null)
+                    if (parent is not null)
                     {
                         keys.Add(parent);
                     }
@@ -97,7 +97,7 @@ namespace Emby.Server.Implementations.EntryPoints
 
                 SendNotifications(changes, CancellationToken.None).GetAwaiter().GetResult();
 
-                if (_updateTimer != null)
+                if (_updateTimer is not null)
                 {
                     _updateTimer.Dispose();
                     _updateTimer = null;
@@ -145,7 +145,7 @@ namespace Emby.Server.Implementations.EntryPoints
 
         public void Dispose()
         {
-            if (_updateTimer != null)
+            if (_updateTimer is not null)
             {
                 _updateTimer.Dispose();
                 _updateTimer = null;

+ 2 - 2
Emby.Server.Implementations/HttpServer/WebSocketConnection.cs

@@ -164,7 +164,7 @@ namespace Emby.Server.Implementations.HttpServer
             ReadResult result = await reader.ReadAsync().ConfigureAwait(false);
             ReadOnlySequence<byte> buffer = result.Buffer;
 
-            if (OnReceive == null)
+            if (OnReceive is null)
             {
                 // Tell the PipeReader how much of the buffer we have consumed
                 reader.AdvanceTo(buffer.End);
@@ -185,7 +185,7 @@ namespace Emby.Server.Implementations.HttpServer
                 return;
             }
 
-            if (stub == null)
+            if (stub is null)
             {
                 _logger.LogError("Error processing web socket message");
                 return;

+ 6 - 6
Emby.Server.Implementations/IO/FileRefresher.cs

@@ -80,7 +80,7 @@ namespace Emby.Server.Implementations.IO
                     return;
                 }
 
-                if (_timer == null)
+                if (_timer is null)
                 {
                     _timer = new Timer(OnTimerCallback, null, TimeSpan.FromSeconds(_configurationManager.Configuration.LibraryMonitorDelay), TimeSpan.FromMilliseconds(-1));
                 }
@@ -138,7 +138,7 @@ namespace Emby.Server.Implementations.IO
             IEnumerable<BaseItem> itemsToRefresh = paths
                 .Distinct(StringComparer.OrdinalIgnoreCase)
                 .Select(GetAffectedBaseItem)
-                .Where(item => item != null)
+                .Where(item => item is not null)
                 .GroupBy(x => x!.Id) // Removed null values in the previous .Where()
                 .Select(x => x.First())!;
 
@@ -178,21 +178,21 @@ namespace Emby.Server.Implementations.IO
         {
             BaseItem? item = null;
 
-            while (item == null && !string.IsNullOrEmpty(path))
+            while (item is null && !string.IsNullOrEmpty(path))
             {
                 item = _libraryManager.FindByPath(path, null);
 
                 path = System.IO.Path.GetDirectoryName(path) ?? string.Empty;
             }
 
-            if (item != null)
+            if (item is not null)
             {
                 // If the item has been deleted find the first valid parent that still exists
                 while (!Directory.Exists(item.Path) && !File.Exists(item.Path))
                 {
                     item = item.GetOwner() ?? item.GetParent();
 
-                    if (item == null)
+                    if (item is null)
                     {
                         break;
                     }
@@ -206,7 +206,7 @@ namespace Emby.Server.Implementations.IO
         {
             lock (_timerLock)
             {
-                if (_timer != null)
+                if (_timer is not null)
                 {
                     _timer.Dispose();
                     _timer = null;

+ 1 - 1
Emby.Server.Implementations/IO/LibraryMonitor.cs

@@ -115,7 +115,7 @@ namespace Emby.Server.Implementations.IO
 
             var options = _libraryManager.GetLibraryOptions(item);
 
-            if (options != null)
+            if (options is not null)
             {
                 return options.EnableRealtimeMonitor;
             }

+ 5 - 5
Emby.Server.Implementations/IO/ManagedFileSystem.cs

@@ -149,7 +149,7 @@ namespace Emby.Server.Implementations.IO
             var extension = Path.GetExtension(shortcutPath);
             var handler = _shortcutHandlers.Find(i => string.Equals(extension, i.Extension, StringComparison.OrdinalIgnoreCase));
 
-            if (handler != null)
+            if (handler is not null)
             {
                 handler.Create(shortcutPath, target);
             }
@@ -621,14 +621,14 @@ namespace Emby.Server.Implementations.IO
 
             // On linux and osx the search pattern is case sensitive
             // If we're OK with case-sensitivity, and we're only filtering for one extension, then use the native method
-            if ((enableCaseSensitiveExtensions || _isEnvironmentCaseInsensitive) && extensions != null && extensions.Count == 1)
+            if ((enableCaseSensitiveExtensions || _isEnvironmentCaseInsensitive) && extensions is not null && extensions.Count == 1)
             {
                 return ToMetadata(new DirectoryInfo(path).EnumerateFiles("*" + extensions[0], enumerationOptions));
             }
 
             var files = new DirectoryInfo(path).EnumerateFiles("*", enumerationOptions);
 
-            if (extensions != null && extensions.Count > 0)
+            if (extensions is not null && extensions.Count > 0)
             {
                 files = files.Where(i =>
                 {
@@ -678,14 +678,14 @@ namespace Emby.Server.Implementations.IO
 
             // On linux and osx the search pattern is case sensitive
             // If we're OK with case-sensitivity, and we're only filtering for one extension, then use the native method
-            if ((enableCaseSensitiveExtensions || _isEnvironmentCaseInsensitive) && extensions != null && extensions.Length == 1)
+            if ((enableCaseSensitiveExtensions || _isEnvironmentCaseInsensitive) && extensions is not null && extensions.Length == 1)
             {
                 return Directory.EnumerateFiles(path, "*" + extensions[0], enumerationOptions);
             }
 
             var files = Directory.EnumerateFiles(path, "*", enumerationOptions);
 
-            if (extensions != null && extensions.Length > 0)
+            if (extensions is not null && extensions.Length > 0)
             {
                 files = files.Where(i =>
                 {

+ 1 - 1
Emby.Server.Implementations/IO/StreamHelper.cs

@@ -23,7 +23,7 @@ namespace Emby.Server.Implementations.IO
 
                     await destination.WriteAsync(buffer.AsMemory(0, read), cancellationToken).ConfigureAwait(false);
 
-                    if (onStarted != null)
+                    if (onStarted is not null)
                     {
                         onStarted();
                         onStarted = null;

+ 5 - 5
Emby.Server.Implementations/Images/BaseDynamicImageProvider.cs

@@ -81,7 +81,7 @@ namespace Emby.Server.Implementations.Images
         {
             var image = item.GetImageInfo(imageType, 0);
 
-            if (image != null)
+            if (image is not null)
             {
                 if (!image.IsLocalFile)
                 {
@@ -143,20 +143,20 @@ namespace Emby.Server.Implementations.Images
                     if (useBackdrop)
                     {
                         var backdrop = i.GetImageInfo(ImageType.Backdrop, 0);
-                        if (backdrop != null && backdrop.IsLocalFile)
+                        if (backdrop is not null && backdrop.IsLocalFile)
                         {
                             return backdrop.Path;
                         }
                     }
 
                     var image = i.GetImageInfo(ImageType.Primary, 0);
-                    if (image != null && image.IsLocalFile)
+                    if (image is not null && image.IsLocalFile)
                     {
                         return image.Path;
                     }
 
                     image = i.GetImageInfo(ImageType.Thumb, 0);
-                    if (image != null && image.IsLocalFile)
+                    if (image is not null && image.IsLocalFile)
                     {
                         return image.Path;
                     }
@@ -268,7 +268,7 @@ namespace Emby.Server.Implementations.Images
         {
             var image = item.GetImageInfo(type, 0);
 
-            if (image != null)
+            if (image is not null)
             {
                 if (!image.IsLocalFile)
                 {

+ 3 - 3
Emby.Server.Implementations/Images/DynamicImageProvider.cs

@@ -52,7 +52,7 @@ namespace Emby.Server.Implementations.Images
                 if (i is Episode episode)
                 {
                     var series = episode.Series;
-                    if (series != null)
+                    if (series is not null)
                     {
                         return series;
                     }
@@ -63,7 +63,7 @@ namespace Emby.Server.Implementations.Images
                 if (i is Season season)
                 {
                     var series = season.Series;
-                    if (series != null)
+                    if (series is not null)
                     {
                         return series;
                     }
@@ -74,7 +74,7 @@ namespace Emby.Server.Implementations.Images
                 if (i is Audio audio)
                 {
                     var album = audio.AlbumEntity;
-                    if (album != null && album.HasImage(ImageType.Primary))
+                    if (album is not null && album.HasImage(ImageType.Primary))
                     {
                         return album;
                     }

+ 3 - 3
Emby.Server.Implementations/Images/PlaylistImageProvider.cs

@@ -34,7 +34,7 @@ namespace Emby.Server.Implementations.Images
                     if (subItem is Episode episode)
                     {
                         var series = episode.Series;
-                        if (series != null && series.HasImage(ImageType.Primary))
+                        if (series is not null && series.HasImage(ImageType.Primary))
                         {
                             return series;
                         }
@@ -47,7 +47,7 @@ namespace Emby.Server.Implementations.Images
 
                     var parent = subItem.GetOwner() ?? subItem.GetParent();
 
-                    if (parent != null && parent.HasImage(ImageType.Primary))
+                    if (parent is not null && parent.HasImage(ImageType.Primary))
                     {
                         if (parent is MusicAlbum)
                         {
@@ -57,7 +57,7 @@ namespace Emby.Server.Implementations.Images
 
                     return null;
                 })
-                .Where(i => i != null)
+                .Where(i => i is not null)
                 .GroupBy(x => x.Id)
                 .Select(x => x.First())
                 .ToList();

+ 2 - 2
Emby.Server.Implementations/Library/CoreResolutionIgnoreRule.cs

@@ -52,7 +52,7 @@ namespace Emby.Server.Implementations.Library
 
             if (fileInfo.IsDirectory)
             {
-                if (parent != null)
+                if (parent is not null)
                 {
                     // Ignore extras folders but allow it at the collection level
                     if (_namingOptions.AllExtrasTypesFolderNames.ContainsKey(filename)
@@ -65,7 +65,7 @@ namespace Emby.Server.Implementations.Library
             }
             else
             {
-                if (parent != null)
+                if (parent is not null)
                 {
                     // Don't resolve these into audio files
                     if (Path.GetFileNameWithoutExtension(filename.AsSpan()).Equals(BaseItem.ThemeSongFileName, StringComparison.Ordinal)

+ 82 - 82
Emby.Server.Implementations/Library/LibraryManager.cs

@@ -176,7 +176,7 @@ namespace Emby.Server.Implementations.Library
         {
             get
             {
-                if (_rootFolder == null)
+                if (_rootFolder is null)
                 {
                     lock (_rootFolderSyncLock)
                     {
@@ -465,9 +465,9 @@ namespace Emby.Server.Implementations.Library
         private BaseItem ResolveItem(ItemResolveArgs args, IItemResolver[] resolvers)
         {
             var item = (resolvers ?? EntityResolvers).Select(r => Resolve(args, r))
-                .FirstOrDefault(i => i != null);
+                .FirstOrDefault(i => i is not null);
 
-            if (item != null)
+            if (item is not null)
             {
                 ResolverHelper.SetInitialItemValues(item, args, _fileSystem, this);
             }
@@ -536,7 +536,7 @@ namespace Emby.Server.Implementations.Library
 
             var fullPath = fileInfo.FullName;
 
-            if (string.IsNullOrEmpty(collectionType) && parent != null)
+            if (string.IsNullOrEmpty(collectionType) && parent is not null)
             {
                 collectionType = GetContentTypeOverride(fullPath, true);
             }
@@ -572,7 +572,7 @@ namespace Emby.Server.Implementations.Library
                 }
                 catch (Exception ex)
                 {
-                    if (parent != null && parent.IsPhysicalRoot)
+                    if (parent is not null && parent.IsPhysicalRoot)
                     {
                         _logger.LogError(ex, "Error in GetFilteredFileSystemEntries isPhysicalRoot: {0} IsVf: {1}", isPhysicalRoot, isVf);
 
@@ -654,9 +654,9 @@ namespace Emby.Server.Implementations.Library
         {
             var fileList = files.Where(i => !IgnoreFile(i, parent)).ToList();
 
-            if (parent != null)
+            if (parent is not null)
             {
-                var multiItemResolvers = resolvers == null ? MultiItemResolvers : resolvers.OfType<IMultiItemResolver>().ToArray();
+                var multiItemResolvers = resolvers is null ? MultiItemResolvers : resolvers.OfType<IMultiItemResolver>().ToArray();
 
                 foreach (var resolver in multiItemResolvers)
                 {
@@ -697,7 +697,7 @@ namespace Emby.Server.Implementations.Library
                     _logger.LogError(ex, "Error resolving path {Path}", file.FullName);
                 }
 
-                if (result != null)
+                if (result is not null)
                 {
                     yield return result;
                 }
@@ -750,7 +750,7 @@ namespace Emby.Server.Implementations.Library
 
             var dbItem = GetItemById(folder.Id) as BasePluginFolder;
 
-            if (dbItem != null && string.Equals(dbItem.Path, folder.Path, StringComparison.OrdinalIgnoreCase))
+            if (dbItem is not null && string.Equals(dbItem.Path, folder.Path, StringComparison.OrdinalIgnoreCase))
             {
                 folder = dbItem;
             }
@@ -770,11 +770,11 @@ namespace Emby.Server.Implementations.Library
 
         public Folder GetUserRootFolder()
         {
-            if (_userRootFolder == null)
+            if (_userRootFolder is null)
             {
                 lock (_userRootFolderSyncLock)
                 {
-                    if (_userRootFolder == null)
+                    if (_userRootFolder is null)
                     {
                         var userRootPath = _configurationManager.ApplicationPaths.DefaultUserViewsPath;
 
@@ -792,7 +792,7 @@ namespace Emby.Server.Implementations.Library
                             _logger.LogError(ex, "Error creating UserRootFolder {Path}", newItemId);
                         }
 
-                        if (tmpItem == null)
+                        if (tmpItem is null)
                         {
                             _logger.LogDebug("Creating new userRootFolder with DeepCopy");
                             tmpItem = ((Folder)ResolvePath(_fileSystem.GetDirectoryInfo(userRootPath))).DeepCopy<Folder, UserRootFolder>();
@@ -952,7 +952,7 @@ namespace Emby.Server.Implementations.Library
                 .Cast<T>()
                 .FirstOrDefault();
 
-                if (existing != null)
+                if (existing is not null)
                 {
                     return existing;
                 }
@@ -961,7 +961,7 @@ namespace Emby.Server.Implementations.Library
             var path = getPathFn(name);
             var id = GetItemByNameId<T>(path);
             var item = GetItemById(id) as T;
-            if (item == null)
+            if (item is null)
             {
                 item = new T
                 {
@@ -1181,7 +1181,7 @@ namespace Emby.Server.Implementations.Library
                             return null;
                         }
                     })
-                    .Where(i => i != null)
+                    .Where(i => i is not null)
                     .OrderBy(i => i)
                     .ToArray(),
 
@@ -1190,17 +1190,17 @@ namespace Emby.Server.Implementations.Library
 
             var libraryFolder = allCollectionFolders.FirstOrDefault(i => string.Equals(i.Path, dir, StringComparison.OrdinalIgnoreCase));
 
-            if (libraryFolder != null && libraryFolder.HasImage(ImageType.Primary))
+            if (libraryFolder is not null && libraryFolder.HasImage(ImageType.Primary))
             {
                 info.PrimaryImageItemId = libraryFolder.Id.ToString("N", CultureInfo.InvariantCulture);
             }
 
-            if (libraryFolder != null)
+            if (libraryFolder is not null)
             {
                 info.ItemId = libraryFolder.Id.ToString("N", CultureInfo.InvariantCulture);
                 info.LibraryOptions = GetLibraryOptions(libraryFolder);
 
-                if (refreshQueue != null)
+                if (refreshQueue is not null)
                 {
                     info.RefreshProgress = libraryFolder.GetRefreshProgress();
 
@@ -1245,7 +1245,7 @@ namespace Emby.Server.Implementations.Library
 
             item = RetrieveItem(id);
 
-            if (item != null)
+            if (item is not null)
             {
                 RegisterItem(item);
             }
@@ -1258,13 +1258,13 @@ namespace Emby.Server.Implementations.Library
             if (query.Recursive && !query.ParentId.Equals(default))
             {
                 var parent = GetItemById(query.ParentId);
-                if (parent != null)
+                if (parent is not null)
                 {
                     SetTopParentIdsOrAncestors(query, new List<BaseItem> { parent });
                 }
             }
 
-            if (query.User != null)
+            if (query.User is not null)
             {
                 AddUserToQuery(query, query.User, allowExternalContent);
             }
@@ -1282,13 +1282,13 @@ namespace Emby.Server.Implementations.Library
             if (query.Recursive && !query.ParentId.Equals(default))
             {
                 var parent = GetItemById(query.ParentId);
-                if (parent != null)
+                if (parent is not null)
                 {
                     SetTopParentIdsOrAncestors(query, new List<BaseItem> { parent });
                 }
             }
 
-            if (query.User != null)
+            if (query.User is not null)
             {
                 AddUserToQuery(query, query.User);
             }
@@ -1302,7 +1302,7 @@ namespace Emby.Server.Implementations.Library
 
             if (query.AncestorIds.Length == 0 && query.TopParentIds.Length == 0)
             {
-                if (query.User != null)
+                if (query.User is not null)
                 {
                     AddUserToQuery(query, query.User);
                 }
@@ -1313,7 +1313,7 @@ namespace Emby.Server.Implementations.Library
 
         public QueryResult<BaseItem> QueryItems(InternalItemsQuery query)
         {
-            if (query.User != null)
+            if (query.User is not null)
             {
                 AddUserToQuery(query, query.User);
             }
@@ -1331,7 +1331,7 @@ namespace Emby.Server.Implementations.Library
 
         public List<Guid> GetItemIds(InternalItemsQuery query)
         {
-            if (query.User != null)
+            if (query.User is not null)
             {
                 AddUserToQuery(query, query.User);
             }
@@ -1341,7 +1341,7 @@ namespace Emby.Server.Implementations.Library
 
         public QueryResult<(BaseItem Item, ItemCounts ItemCounts)> GetStudios(InternalItemsQuery query)
         {
-            if (query.User != null)
+            if (query.User is not null)
             {
                 AddUserToQuery(query, query.User);
             }
@@ -1352,7 +1352,7 @@ namespace Emby.Server.Implementations.Library
 
         public QueryResult<(BaseItem Item, ItemCounts ItemCounts)> GetGenres(InternalItemsQuery query)
         {
-            if (query.User != null)
+            if (query.User is not null)
             {
                 AddUserToQuery(query, query.User);
             }
@@ -1363,7 +1363,7 @@ namespace Emby.Server.Implementations.Library
 
         public QueryResult<(BaseItem Item, ItemCounts ItemCounts)> GetMusicGenres(InternalItemsQuery query)
         {
-            if (query.User != null)
+            if (query.User is not null)
             {
                 AddUserToQuery(query, query.User);
             }
@@ -1374,7 +1374,7 @@ namespace Emby.Server.Implementations.Library
 
         public QueryResult<(BaseItem Item, ItemCounts ItemCounts)> GetAllArtists(InternalItemsQuery query)
         {
-            if (query.User != null)
+            if (query.User is not null)
             {
                 AddUserToQuery(query, query.User);
             }
@@ -1385,7 +1385,7 @@ namespace Emby.Server.Implementations.Library
 
         public QueryResult<(BaseItem Item, ItemCounts ItemCounts)> GetArtists(InternalItemsQuery query)
         {
-            if (query.User != null)
+            if (query.User is not null)
             {
                 AddUserToQuery(query, query.User);
             }
@@ -1426,7 +1426,7 @@ namespace Emby.Server.Implementations.Library
 
         public QueryResult<(BaseItem Item, ItemCounts ItemCounts)> GetAlbumArtists(InternalItemsQuery query)
         {
-            if (query.User != null)
+            if (query.User is not null)
             {
                 AddUserToQuery(query, query.User);
             }
@@ -1440,13 +1440,13 @@ namespace Emby.Server.Implementations.Library
             if (query.Recursive && !query.ParentId.Equals(default))
             {
                 var parent = GetItemById(query.ParentId);
-                if (parent != null)
+                if (parent is not null)
                 {
                     SetTopParentIdsOrAncestors(query, new List<BaseItem> { parent });
                 }
             }
 
-            if (query.User != null)
+            if (query.User is not null)
             {
                 AddUserToQuery(query, query.User);
             }
@@ -1524,7 +1524,7 @@ namespace Emby.Server.Implementations.Library
                 if (!view.DisplayParentId.Equals(default))
                 {
                     var displayParent = GetItemById(view.DisplayParentId);
-                    if (displayParent != null)
+                    if (displayParent is not null)
                     {
                         return GetTopParentIdsForQuery(displayParent, user);
                     }
@@ -1535,7 +1535,7 @@ namespace Emby.Server.Implementations.Library
                 if (!view.ParentId.Equals(default))
                 {
                     var displayParent = GetItemById(view.ParentId);
-                    if (displayParent != null)
+                    if (displayParent is not null)
                     {
                         return GetTopParentIdsForQuery(displayParent, user);
                     }
@@ -1544,7 +1544,7 @@ namespace Emby.Server.Implementations.Library
                 }
 
                 // Handle grouping
-                if (user != null && !string.IsNullOrEmpty(view.ViewType) && UserView.IsEligibleForGrouping(view.ViewType)
+                if (user is not null && !string.IsNullOrEmpty(view.ViewType) && UserView.IsEligibleForGrouping(view.ViewType)
                     && user.GetPreference(PreferenceKind.GroupedFolders).Length > 0)
                 {
                     return GetUserRootFolder()
@@ -1564,7 +1564,7 @@ namespace Emby.Server.Implementations.Library
             }
 
             var topParent = item.GetTopParent();
-            if (topParent != null)
+            if (topParent is not null)
             {
                 return new[] { topParent.Id };
             }
@@ -1589,7 +1589,7 @@ namespace Emby.Server.Implementations.Library
             return items
                 .SelectMany(i => i.ToArray())
                 .Select(ResolveIntro)
-                .Where(i => i != null);
+                .Where(i => i is not null);
         }
 
         /// <summary>
@@ -1627,7 +1627,7 @@ namespace Emby.Server.Implementations.Library
                 // Get an existing item by Id
                 video = GetItemById(info.ItemId.Value) as Video;
 
-                if (video == null)
+                if (video is null)
                 {
                     _logger.LogError("Unable to locate item with Id {ID}.", info.ItemId.Value);
                 }
@@ -1639,7 +1639,7 @@ namespace Emby.Server.Implementations.Library
                     // Try to resolve the path into a video
                     video = ResolvePath(_fileSystem.GetFileSystemInfo(info.Path)) as Video;
 
-                    if (video == null)
+                    if (video is null)
                     {
                         _logger.LogError("Intro resolver returned null for {Path}.", info.Path);
                     }
@@ -1648,7 +1648,7 @@ namespace Emby.Server.Implementations.Library
                         // Pull the saved db item that will include metadata
                         var dbItem = GetItemById(video.Id) as Video;
 
-                        if (dbItem != null)
+                        if (dbItem is not null)
                         {
                             video = dbItem;
                         }
@@ -1685,7 +1685,7 @@ namespace Emby.Server.Implementations.Library
 
             IOrderedEnumerable<BaseItem> orderedItems = null;
 
-            foreach (var orderBy in sortBy.Select(o => GetComparer(o, user)).Where(c => c != null))
+            foreach (var orderBy in sortBy.Select(o => GetComparer(o, user)).Where(c => c is not null))
             {
                 if (isFirst)
                 {
@@ -1711,7 +1711,7 @@ namespace Emby.Server.Implementations.Library
             foreach (var (name, sortOrder) in orderBy)
             {
                 var comparer = GetComparer(name, user);
-                if (comparer == null)
+                if (comparer is null)
                 {
                     continue;
                 }
@@ -1781,7 +1781,7 @@ namespace Emby.Server.Implementations.Library
                 RegisterItem(item);
             }
 
-            if (ItemAdded != null)
+            if (ItemAdded is not null)
             {
                 foreach (var item in items)
                 {
@@ -1811,7 +1811,7 @@ namespace Emby.Server.Implementations.Library
 
         private bool ImageNeedsRefresh(ItemImageInfo image)
         {
-            if (image.Path != null && image.IsLocalFile)
+            if (image.Path is not null && image.IsLocalFile)
             {
                 if (image.Width == 0 || image.Height == 0 || string.IsNullOrEmpty(image.BlurHash))
                 {
@@ -1829,7 +1829,7 @@ namespace Emby.Server.Implementations.Library
                 }
             }
 
-            return image.Path != null && !image.IsLocalFile;
+            return image.Path is not null && !image.IsLocalFile;
         }
 
         /// <inheritdoc />
@@ -1838,7 +1838,7 @@ namespace Emby.Server.Implementations.Library
             ArgumentNullException.ThrowIfNull(item);
 
             var outdated = forceUpdate
-                ? item.ImageInfos.Where(i => i.Path != null).ToArray()
+                ? item.ImageInfos.Where(i => i.Path is not null).ToArray()
                 : item.ImageInfos.Where(ImageNeedsRefresh).ToArray();
             // Skip image processing if current or live tv source
             if (outdated.Length == 0 || item.SourceType != SourceType.Library)
@@ -1923,7 +1923,7 @@ namespace Emby.Server.Implementations.Library
 
             _itemRepository.SaveItems(items, cancellationToken);
 
-            if (ItemUpdated != null)
+            if (ItemUpdated is not null)
             {
                 foreach (var item in items)
                 {
@@ -1975,7 +1975,7 @@ namespace Emby.Server.Implementations.Library
         /// <param name="parent">The parent item.</param>
         public void ReportItemRemoved(BaseItem item, BaseItem parent)
         {
-            if (ItemRemoved != null)
+            if (ItemRemoved is not null)
             {
                 try
                 {
@@ -2006,11 +2006,11 @@ namespace Emby.Server.Implementations.Library
 
         public List<Folder> GetCollectionFolders(BaseItem item)
         {
-            while (item != null)
+            while (item is not null)
             {
                 var parent = item.GetParent();
 
-                if (parent == null || parent is AggregateFolder)
+                if (parent is null || parent is AggregateFolder)
                 {
                     break;
                 }
@@ -2018,7 +2018,7 @@ namespace Emby.Server.Implementations.Library
                 item = parent;
             }
 
-            if (item == null)
+            if (item is null)
             {
                 return new List<Folder>();
             }
@@ -2028,11 +2028,11 @@ namespace Emby.Server.Implementations.Library
 
         public List<Folder> GetCollectionFolders(BaseItem item, List<Folder> allUserRootChildren)
         {
-            while (item != null)
+            while (item is not null)
             {
                 var parent = item.GetParent();
 
-                if (parent == null || parent is AggregateFolder)
+                if (parent is null || parent is AggregateFolder)
                 {
                     break;
                 }
@@ -2040,7 +2040,7 @@ namespace Emby.Server.Implementations.Library
                 item = parent;
             }
 
-            if (item == null)
+            if (item is null)
             {
                 return new List<Folder>();
             }
@@ -2064,7 +2064,7 @@ namespace Emby.Server.Implementations.Library
                     .Find(folder => folder is CollectionFolder) as CollectionFolder;
             }
 
-            return collectionFolder == null ? new LibraryOptions() : collectionFolder.GetLibraryOptions();
+            return collectionFolder is null ? new LibraryOptions() : collectionFolder.GetLibraryOptions();
         }
 
         public string GetContentType(BaseItem item)
@@ -2129,7 +2129,7 @@ namespace Emby.Server.Implementations.Library
 
         private string GetTopFolderContentType(BaseItem item)
         {
-            if (item == null)
+            if (item is null)
             {
                 return null;
             }
@@ -2137,7 +2137,7 @@ namespace Emby.Server.Implementations.Library
             while (!item.ParentId.Equals(default))
             {
                 var parent = item.GetParent();
-                if (parent == null || parent is AggregateFolder)
+                if (parent is null || parent is AggregateFolder)
                 {
                     break;
                 }
@@ -2177,7 +2177,7 @@ namespace Emby.Server.Implementations.Library
 
             var refresh = false;
 
-            if (item == null || !string.Equals(item.Path, path, StringComparison.OrdinalIgnoreCase))
+            if (item is null || !string.Equals(item.Path, path, StringComparison.OrdinalIgnoreCase))
             {
                 Directory.CreateDirectory(path);
 
@@ -2225,7 +2225,7 @@ namespace Emby.Server.Implementations.Library
 
             var isNew = false;
 
-            if (item == null)
+            if (item is null)
             {
                 Directory.CreateDirectory(path);
 
@@ -2251,7 +2251,7 @@ namespace Emby.Server.Implementations.Library
             if (!refresh && !item.DisplayParentId.Equals(default))
             {
                 var displayParent = GetItemById(item.DisplayParentId);
-                refresh = displayParent != null && displayParent.DateLastSaved > item.DateLastRefreshed;
+                refresh = displayParent is not null && displayParent.DateLastSaved > item.DateLastRefreshed;
             }
 
             if (refresh)
@@ -2289,7 +2289,7 @@ namespace Emby.Server.Implementations.Library
 
             var isNew = false;
 
-            if (item == null)
+            if (item is null)
             {
                 Directory.CreateDirectory(path);
 
@@ -2315,7 +2315,7 @@ namespace Emby.Server.Implementations.Library
             if (!refresh && !item.DisplayParentId.Equals(default))
             {
                 var displayParent = GetItemById(item.DisplayParentId);
-                refresh = displayParent != null && displayParent.DateLastSaved > item.DateLastRefreshed;
+                refresh = displayParent is not null && displayParent.DateLastSaved > item.DateLastRefreshed;
             }
 
             if (refresh)
@@ -2362,7 +2362,7 @@ namespace Emby.Server.Implementations.Library
 
             var isNew = false;
 
-            if (item == null)
+            if (item is null)
             {
                 Directory.CreateDirectory(path);
 
@@ -2394,7 +2394,7 @@ namespace Emby.Server.Implementations.Library
             if (!refresh && !item.DisplayParentId.Equals(default))
             {
                 var displayParent = GetItemById(item.DisplayParentId);
-                refresh = displayParent != null && displayParent.DateLastSaved > item.DateLastRefreshed;
+                refresh = displayParent is not null && displayParent.DateLastSaved > item.DateLastRefreshed;
             }
 
             if (refresh)
@@ -2441,7 +2441,7 @@ namespace Emby.Server.Implementations.Library
         public bool FillMissingEpisodeNumbersFromPath(Episode episode, bool forceRefresh)
         {
             var series = episode.Series;
-            bool? isAbsoluteNaming = series != null && string.Equals(series.DisplayOrder, "absolute", StringComparison.OrdinalIgnoreCase);
+            bool? isAbsoluteNaming = series is not null && string.Equals(series.DisplayOrder, "absolute", StringComparison.OrdinalIgnoreCase);
             if (!isAbsoluteNaming.Value)
             {
                 // In other words, no filter applied
@@ -2459,10 +2459,10 @@ namespace Emby.Server.Implementations.Library
                 episodeInfo = resolver.Resolve(episode.Path, isFolder, null, null, isAbsoluteNaming);
                 // Resolve from parent folder if it's not the Season folder
                 var parent = episode.GetParent();
-                if (episodeInfo == null && parent.GetType() == typeof(Folder))
+                if (episodeInfo is null && parent.GetType() == typeof(Folder))
                 {
                     episodeInfo = resolver.Resolve(parent.Path, true, null, null, isAbsoluteNaming);
-                    if (episodeInfo != null)
+                    if (episodeInfo is not null)
                     {
                         // add the container
                         episodeInfo.Container = Path.GetExtension(episode.Path)?.TrimStart('.');
@@ -2582,7 +2582,7 @@ namespace Emby.Server.Implementations.Library
             {
                 var season = episode.Season;
 
-                if (season != null)
+                if (season is not null)
                 {
                     episode.ParentIndexNumber = season.IndexNumber;
                 }
@@ -2620,7 +2620,7 @@ namespace Emby.Server.Implementations.Library
         public IEnumerable<BaseItem> FindExtras(BaseItem owner, IReadOnlyList<FileSystemMetadata> fileSystemChildren, IDirectoryService directoryService)
         {
             var ownerVideoInfo = VideoResolver.Resolve(owner.Path, owner.IsFolder, _namingOptions);
-            if (ownerVideoInfo == null)
+            if (ownerVideoInfo is null)
             {
                 yield break;
             }
@@ -2640,7 +2640,7 @@ namespace Emby.Server.Implementations.Library
                         }
 
                         var extra = GetExtra(file, extraType.Value);
-                        if (extra != null)
+                        if (extra is not null)
                         {
                             yield return extra;
                         }
@@ -2649,7 +2649,7 @@ namespace Emby.Server.Implementations.Library
                 else if (!current.IsDirectory && _extraResolver.TryGetExtraTypeForOwner(current.FullName, ownerVideoInfo, out var extraType))
                 {
                     var extra = GetExtra(current, extraType.Value);
-                    if (extra != null)
+                    if (extra is not null)
                     {
                         yield return extra;
                     }
@@ -2666,7 +2666,7 @@ namespace Emby.Server.Implementations.Library
 
                 // Try to retrieve it from the db. If we don't find it, use the resolved version
                 var itemById = GetItemById(extra.Id);
-                if (itemById != null)
+                if (itemById is not null)
                 {
                     extra = itemById;
                 }
@@ -2681,10 +2681,10 @@ namespace Emby.Server.Implementations.Library
         public string GetPathAfterNetworkSubstitution(string path, BaseItem ownerItem)
         {
             string newPath;
-            if (ownerItem != null)
+            if (ownerItem is not null)
             {
                 var libraryOptions = GetLibraryOptions(ownerItem);
-                if (libraryOptions != null)
+                if (libraryOptions is not null)
                 {
                     foreach (var pathInfo in libraryOptions.PathInfos)
                     {
@@ -2753,8 +2753,8 @@ namespace Emby.Server.Implementations.Library
                     return null;
                 }
             })
-            .Where(i => i != null)
-            .Where(i => query.User == null ?
+            .Where(i => i is not null)
+            .Where(i => query.User is null ?
                 true :
                 i.IsVisible(query.User))
             .ToList();
@@ -2838,10 +2838,10 @@ namespace Emby.Server.Implementations.Library
             }
 
             var mediaPathInfos = options.PathInfos;
-            if (mediaPathInfos != null)
+            if (mediaPathInfos is not null)
             {
                 var invalidpath = mediaPathInfos.FirstOrDefault(i => !Directory.Exists(i.Path));
-                if (invalidpath != null)
+                if (invalidpath is not null)
                 {
                     throw new ArgumentException("The specified path does not exist: " + invalidpath.Path + ".");
                 }
@@ -2853,7 +2853,7 @@ namespace Emby.Server.Implementations.Library
             {
                 Directory.CreateDirectory(virtualFolderPath);
 
-                if (collectionType != null)
+                if (collectionType is not null)
                 {
                     var path = Path.Combine(virtualFolderPath, collectionType.ToString().ToLowerInvariant() + ".collection");
 
@@ -2862,7 +2862,7 @@ namespace Emby.Server.Implementations.Library
 
                 CollectionFolder.SaveLibraryOptions(virtualFolderPath, options);
 
-                if (mediaPathInfos != null)
+                if (mediaPathInfos is not null)
                 {
                     foreach (var path in mediaPathInfos)
                     {

+ 4 - 4
Emby.Server.Implementations/Library/LiveStreamHelper.cs

@@ -60,7 +60,7 @@ namespace Emby.Server.Implementations.Library
                 }
             }
 
-            if (mediaInfo == null)
+            if (mediaInfo is null)
             {
                 if (addProbeDelay)
                 {
@@ -81,7 +81,7 @@ namespace Emby.Server.Implementations.Library
                     },
                     cancellationToken).ConfigureAwait(false);
 
-                if (cacheFilePath != null)
+                if (cacheFilePath is not null)
                 {
                     Directory.CreateDirectory(Path.GetDirectoryName(cacheFilePath));
                     await using FileStream createStream = AsyncFile.OpenWrite(cacheFilePath);
@@ -130,7 +130,7 @@ namespace Emby.Server.Implementations.Library
 
             var audioStream = mediaStreams.FirstOrDefault(i => i.Type == MediaStreamType.Audio);
 
-            if (audioStream == null || audioStream.Index == -1)
+            if (audioStream is null || audioStream.Index == -1)
             {
                 mediaSource.DefaultAudioStreamIndex = null;
             }
@@ -140,7 +140,7 @@ namespace Emby.Server.Implementations.Library
             }
 
             var videoStream = mediaStreams.FirstOrDefault(i => i.Type == MediaStreamType.Video);
-            if (videoStream != null)
+            if (videoStream is not null)
             {
                 if (!videoStream.BitRate.HasValue)
                 {

+ 15 - 15
Emby.Server.Implementations/Library/MediaSourceManager.cs

@@ -182,7 +182,7 @@ namespace Emby.Server.Implementations.Library
                     source.SupportsDirectStream = SupportsDirectStream(source.Path, source.Protocol);
                 }
 
-                if (user != null)
+                if (user is not null)
                 {
                     SetDefaultAudioAndSubtitleStreamIndexes(item, source, user);
 
@@ -248,7 +248,7 @@ namespace Emby.Server.Implementations.Library
 
             if (protocol == MediaProtocol.Http)
             {
-                if (path != null)
+                if (path is not null)
                 {
                     if (path.Contains(".m3u", StringComparison.OrdinalIgnoreCase))
                     {
@@ -328,7 +328,7 @@ namespace Emby.Server.Implementations.Library
 
             var sources = hasMediaSources.GetMediaSources(enablePathSubstitution);
 
-            if (user != null)
+            if (user is not null)
             {
                 foreach (var source in sources)
                 {
@@ -357,7 +357,7 @@ namespace Emby.Server.Implementations.Library
             }
 
             var culture = _localizationManager.FindLanguageInfo(language);
-            if (culture != null)
+            if (culture is not null)
             {
                 return culture.ThreeLetterISOLanguageNames;
             }
@@ -383,7 +383,7 @@ namespace Emby.Server.Implementations.Library
             var preferredSubs = NormalizeLanguage(user.SubtitleLanguagePreference);
 
             var defaultAudioIndex = source.DefaultAudioStreamIndex;
-            var audioLangage = defaultAudioIndex == null
+            var audioLangage = defaultAudioIndex is null
                 ? null
                 : source.MediaStreams.Where(i => i.Type == MediaStreamType.Audio && i.Index == defaultAudioIndex).Select(i => i.Language).FirstOrDefault();
 
@@ -417,13 +417,13 @@ namespace Emby.Server.Implementations.Library
         public void SetDefaultAudioAndSubtitleStreamIndexes(BaseItem item, MediaSourceInfo source, User user)
         {
             // Item would only be null if the app didn't supply ItemId as part of the live stream open request
-            var mediaType = item == null ? MediaType.Video : item.MediaType;
+            var mediaType = item is null ? MediaType.Video : item.MediaType;
 
             if (string.Equals(mediaType, MediaType.Video, StringComparison.OrdinalIgnoreCase))
             {
-                var userData = item == null ? new UserItemData() : _userDataManager.GetUserData(user, item);
+                var userData = item is null ? new UserItemData() : _userDataManager.GetUserData(user, item);
 
-                var allowRememberingSelection = item == null || item.EnableRememberingTrackSelections;
+                var allowRememberingSelection = item is null || item.EnableRememberingTrackSelections;
 
                 SetDefaultAudioStreamIndex(source, userData, user, allowRememberingSelection);
                 SetDefaultSubtitleStreamIndex(source, userData, user, allowRememberingSelection);
@@ -432,7 +432,7 @@ namespace Emby.Server.Implementations.Library
             {
                 var audio = source.MediaStreams.FirstOrDefault(i => i.Type == MediaStreamType.Audio);
 
-                if (audio != null)
+                if (audio is not null)
                 {
                     source.DefaultAudioStreamIndex = audio.Index;
                 }
@@ -543,7 +543,7 @@ namespace Emby.Server.Implementations.Library
 
             var audioStream = mediaSource.MediaStreams.FirstOrDefault(i => i.Type == MediaStreamType.Audio);
 
-            if (audioStream == null || audioStream.Index == -1)
+            if (audioStream is null || audioStream.Index == -1)
             {
                 mediaSource.DefaultAudioStreamIndex = null;
             }
@@ -553,7 +553,7 @@ namespace Emby.Server.Implementations.Library
             }
 
             var videoStream = mediaSource.MediaStreams.FirstOrDefault(i => i.Type == MediaStreamType.Video);
-            if (videoStream != null)
+            if (videoStream is not null)
             {
                 if (!videoStream.BitRate.HasValue)
                 {
@@ -638,7 +638,7 @@ namespace Emby.Server.Implementations.Library
                 }
             }
 
-            if (mediaInfo == null)
+            if (mediaInfo is null)
             {
                 if (addProbeDelay)
                 {
@@ -661,7 +661,7 @@ namespace Emby.Server.Implementations.Library
                 },
                     cancellationToken).ConfigureAwait(false);
 
-                if (cacheFilePath != null)
+                if (cacheFilePath is not null)
                 {
                     Directory.CreateDirectory(Path.GetDirectoryName(cacheFilePath));
                     await using FileStream createStream = File.Create(cacheFilePath);
@@ -713,7 +713,7 @@ namespace Emby.Server.Implementations.Library
 
             var audioStream = mediaStreams.FirstOrDefault(i => i.Type == MediaStreamType.Audio);
 
-            if (audioStream == null || audioStream.Index == -1)
+            if (audioStream is null || audioStream.Index == -1)
             {
                 mediaSource.DefaultAudioStreamIndex = null;
             }
@@ -723,7 +723,7 @@ namespace Emby.Server.Implementations.Library
             }
 
             var videoStream = mediaStreams.FirstOrDefault(i => i.Type == MediaStreamType.Video);
-            if (videoStream != null)
+            if (videoStream is not null)
             {
                 if (!videoStream.BitRate.HasValue)
                 {

+ 1 - 1
Emby.Server.Implementations/Library/MediaStreamSelector.cs

@@ -19,7 +19,7 @@ namespace Emby.Server.Implementations.Library
             {
                 var defaultStream = sortedStreams.FirstOrDefault(i => i.IsDefault);
 
-                if (defaultStream != null)
+                if (defaultStream is not null)
                 {
                     return defaultStream.Index;
                 }

+ 5 - 5
Emby.Server.Implementations/Library/ResolverHelper.cs

@@ -31,7 +31,7 @@ namespace Emby.Server.Implementations.Library
             }
 
             // If the resolver didn't specify this
-            if (parent != null)
+            if (parent is not null)
             {
                 item.SetParent(parent);
             }
@@ -43,7 +43,7 @@ namespace Emby.Server.Implementations.Library
 
             // Make sure DateCreated and DateModified have values
             var fileInfo = directoryService.GetFile(item.Path);
-            if (fileInfo == null)
+            if (fileInfo is null)
             {
                 return false;
             }
@@ -71,7 +71,7 @@ namespace Emby.Server.Implementations.Library
             }
 
             // If the resolver didn't specify this
-            if (args.Parent != null)
+            if (args.Parent is not null)
             {
                 item.SetParent(args.Parent);
             }
@@ -113,7 +113,7 @@ namespace Emby.Server.Implementations.Library
             {
                 var childData = args.IsDirectory ? args.GetFileSystemEntryByPath(item.Path) : null;
 
-                if (childData != null)
+                if (childData is not null)
                 {
                     SetDateCreated(item, childData);
                 }
@@ -140,7 +140,7 @@ namespace Emby.Server.Implementations.Library
             if (config.UseFileCreationTimeForDateAdded)
             {
                 // directoryService.getFile may return null
-                if (info != null)
+                if (info is not null)
                 {
                     var dateCreated = info.CreationTimeUtc;
 

+ 5 - 5
Emby.Server.Implementations/Library/Resolvers/Audio/AudioResolver.cs

@@ -45,7 +45,7 @@ namespace Emby.Server.Implementations.Library.Resolvers.Audio
         {
             var result = ResolveMultipleInternal(parent, files, collectionType);
 
-            if (result != null)
+            if (result is not null)
             {
                 foreach (var item in result.Items)
                 {
@@ -116,7 +116,7 @@ namespace Emby.Server.Implementations.Library.Resolvers.Audio
 
                 // Use regular audio type for mixed libraries, owned items and music
                 if (isMixedCollectionType ||
-                    args.Parent == null ||
+                    args.Parent is null ||
                     isMusicCollectionType)
                 {
                     item = new MediaBrowser.Controller.Entities.Audio.Audio();
@@ -126,7 +126,7 @@ namespace Emby.Server.Implementations.Library.Resolvers.Audio
                     item = new AudioBook();
                 }
 
-                if (item != null)
+                if (item is not null)
                 {
                     item.IsShortcut = string.Equals(extension, ".strm", StringComparison.OrdinalIgnoreCase);
 
@@ -144,7 +144,7 @@ namespace Emby.Server.Implementations.Library.Resolvers.Audio
             // TODO: Allow GetMultiDiscMovie in here
             var result = ResolveMultipleAudio(args.Parent, args.GetActualFileSystemChildren(), parseName);
 
-            if (result == null || result.Items.Count != 1 || result.Items[0] is not AudioBook item)
+            if (result is null || result.Items.Count != 1 || result.Items[0] is not AudioBook item)
             {
                 return null;
             }
@@ -183,7 +183,7 @@ namespace Emby.Server.Implementations.Library.Resolvers.Audio
                 Items = items
             };
 
-            var isInMixedFolder = resolverResult.Count > 1 || (parent != null && parent.IsTopParent);
+            var isInMixedFolder = resolverResult.Count > 1 || (parent is not null && parent.IsTopParent);
 
             foreach (var resolvedItem in resolverResult)
             {

+ 2 - 2
Emby.Server.Implementations/Library/Resolvers/BaseVideoResolver.cs

@@ -79,7 +79,7 @@ namespace Emby.Server.Implementations.Library.Resolvers
                         videoType = VideoType.Dvd;
                     }
 
-                    if (videoType == null)
+                    if (videoType is null)
                     {
                         continue;
                     }
@@ -93,7 +93,7 @@ namespace Emby.Server.Implementations.Library.Resolvers
                 videoInfo = VideoResolver.Resolve(args.Path, false, NamingOptions, parseName);
             }
 
-            if (videoInfo == null || (!videoInfo.IsStub && !VideoResolver.IsVideoFile(args.Path, NamingOptions)))
+            if (videoInfo is null || (!videoInfo.IsStub && !VideoResolver.IsVideoFile(args.Path, NamingOptions)))
             {
                 return null;
             }

+ 1 - 1
Emby.Server.Implementations/Library/Resolvers/Books/BookResolver.cs

@@ -34,7 +34,7 @@ namespace Emby.Server.Implementations.Library.Resolvers.Books
 
             var extension = Path.GetExtension(args.Path);
 
-            if (extension != null && _validExtensions.Contains(extension, StringComparison.OrdinalIgnoreCase))
+            if (extension is not null && _validExtensions.Contains(extension, StringComparison.OrdinalIgnoreCase))
             {
                 // It's a book
                 return new Book

+ 1 - 1
Emby.Server.Implementations/Library/Resolvers/ExtraResolver.cs

@@ -48,7 +48,7 @@ namespace Emby.Server.Implementations.Library.Resolvers
         public bool TryGetExtraTypeForOwner(string path, VideoFileInfo ownerVideoFileInfo, [NotNullWhen(true)] out ExtraType? extraType)
         {
             var extraResult = GetExtraInfo(path, _namingOptions);
-            if (extraResult.ExtraType == null)
+            if (extraResult.ExtraType is null)
             {
                 extraType = null;
                 return false;

+ 1 - 1
Emby.Server.Implementations/Library/Resolvers/GenericFolderResolver.cs

@@ -22,7 +22,7 @@ namespace Emby.Server.Implementations.Library.Resolvers
         {
             base.SetInitialItemValues(item, args);
 
-            item.IsRoot = args.Parent == null;
+            item.IsRoot = args.Parent is null;
         }
     }
 }

+ 10 - 10
Emby.Server.Implementations/Library/Resolvers/Movies/MovieResolver.cs

@@ -64,7 +64,7 @@ namespace Emby.Server.Implementations.Library.Resolvers.Movies
         {
             var result = ResolveMultipleInternal(parent, files, collectionType);
 
-            if (result != null)
+            if (result is not null)
             {
                 foreach (var item in result.Items)
                 {
@@ -108,7 +108,7 @@ namespace Emby.Server.Implementations.Library.Resolvers.Movies
                 if (string.IsNullOrEmpty(collectionType))
                 {
                     // Owned items will be caught by the video extra resolver
-                    if (args.Parent == null)
+                    if (args.Parent is null)
                     {
                         return null;
                     }
@@ -127,10 +127,10 @@ namespace Emby.Server.Implementations.Library.Resolvers.Movies
                 }
 
                 // ignore extras
-                return movie?.ExtraType == null ? movie : null;
+                return movie?.ExtraType is null ? movie : null;
             }
 
-            if (args.Parent == null)
+            if (args.Parent is null)
             {
                 return base.Resolve(args);
             }
@@ -168,12 +168,12 @@ namespace Emby.Server.Implementations.Library.Resolvers.Movies
             }
 
             // Ignore extras
-            if (item?.ExtraType != null)
+            if (item?.ExtraType is not null)
             {
                 return null;
             }
 
-            if (item != null)
+            if (item is not null)
             {
                 item.IsInMixedFolder = true;
             }
@@ -205,7 +205,7 @@ namespace Emby.Server.Implementations.Library.Resolvers.Movies
             if (string.IsNullOrEmpty(collectionType))
             {
                 // Owned items should just use the plain video type
-                if (parent == null)
+                if (parent is null)
                 {
                     return ResolveVideos<Video>(parent, files, false, collectionType, false);
                 }
@@ -268,7 +268,7 @@ namespace Emby.Server.Implementations.Library.Resolvers.Movies
 
             var videoInfos = files
                 .Select(i => VideoResolver.Resolve(i.FullName, i.IsDirectory, NamingOptions, parseName))
-                .Where(f => f != null)
+                .Where(f => f is not null)
                 .ToList();
 
             var resolverResult = VideoListResolver.Resolve(videoInfos, NamingOptions, supportMultiEditions, parseName);
@@ -284,7 +284,7 @@ namespace Emby.Server.Implementations.Library.Resolvers.Movies
             {
                 var firstVideo = video.Files[0];
                 var path = firstVideo.Path;
-                if (video.ExtraType != null)
+                if (video.ExtraType is not null)
                 {
                     result.ExtraFiles.Add(files.Find(f => string.Equals(f.FullName, path, StringComparison.OrdinalIgnoreCase)));
                     continue;
@@ -568,7 +568,7 @@ namespace Emby.Server.Implementations.Library.Resolvers.Movies
 
         private bool IsInvalid(Folder parent, ReadOnlySpan<char> collectionType)
         {
-            if (parent != null)
+            if (parent is not null)
             {
                 if (parent.IsRoot)
                 {

+ 6 - 6
Emby.Server.Implementations/Library/Resolvers/TV/EpisodeResolver.cs

@@ -34,7 +34,7 @@ namespace Emby.Server.Implementations.Library.Resolvers.TV
         {
             var parent = args.Parent;
 
-            if (parent == null)
+            if (parent is null)
             {
                 return null;
             }
@@ -46,34 +46,34 @@ namespace Emby.Server.Implementations.Library.Resolvers.TV
 
             // If the parent is a Season or Series and the parent is not an extras folder, then this is an Episode if the VideoResolver returns something
             // Also handle flat tv folders
-            if (season != null ||
+            if (season is not null ||
                 string.Equals(args.GetCollectionType(), CollectionType.TvShows, StringComparison.OrdinalIgnoreCase) ||
                 args.HasParent<Series>())
             {
                 var episode = ResolveVideo<Episode>(args, false);
 
                 // Ignore extras
-                if (episode == null || episode.ExtraType != null)
+                if (episode is null || episode.ExtraType is not null)
                 {
                     return null;
                 }
 
                 var series = parent as Series ?? parent.GetParents().OfType<Series>().FirstOrDefault();
 
-                if (series != null)
+                if (series is not null)
                 {
                     episode.SeriesId = series.Id;
                     episode.SeriesName = series.Name;
                 }
 
-                if (season != null)
+                if (season is not null)
                 {
                     episode.SeasonId = season.Id;
                     episode.SeasonName = season.Name;
                 }
 
                 // Assume season 1 if there's no season folder and a season number could not be determined
-                if (season == null && !episode.ParentIndexNumber.HasValue && (episode.IndexNumber.HasValue || episode.PremiereDate.HasValue))
+                if (season is null && !episode.ParentIndexNumber.HasValue && (episode.IndexNumber.HasValue || episode.PremiereDate.HasValue))
                 {
                     episode.ParentIndexNumber = 1;
                 }

+ 1 - 1
Emby.Server.Implementations/Library/Resolvers/TV/SeasonResolver.cs

@@ -66,7 +66,7 @@ namespace Emby.Server.Implementations.Library.Resolvers.TV
 
                     var episodeInfo = resolver.Resolve(testPath, true);
 
-                    if (episodeInfo?.EpisodeNumber != null && episodeInfo.SeasonNumber.HasValue)
+                    if (episodeInfo?.EpisodeNumber is not null && episodeInfo.SeasonNumber.HasValue)
                     {
                         _logger.LogDebug(
                             "Found folder underneath series with episode number: {0}. Season {1}. Episode {2}",

+ 3 - 3
Emby.Server.Implementations/Library/Resolvers/TV/SeriesResolver.cs

@@ -76,7 +76,7 @@ namespace Emby.Server.Implementations.Library.Resolvers.TV
                 {
                     if (args.ContainsFileSystemEntryByName("tvshow.nfo"))
                     {
-                        if (args.Parent != null && args.Parent.IsRoot)
+                        if (args.Parent is not null && args.Parent.IsRoot)
                         {
                             // For now, return null, but if we want to allow this in the future then add some additional checks to guard against a misplaced tvshow.nfo
                             return null;
@@ -89,7 +89,7 @@ namespace Emby.Server.Implementations.Library.Resolvers.TV
                         };
                     }
 
-                    if (args.Parent != null && args.Parent.IsRoot)
+                    if (args.Parent is not null && args.Parent.IsRoot)
                     {
                         return null;
                     }
@@ -138,7 +138,7 @@ namespace Emby.Server.Implementations.Library.Resolvers.TV
                         var episodeResolver = new Naming.TV.EpisodeResolver(namingOptions);
 
                         var episodeInfo = episodeResolver.Resolve(fullName, false, true, false, fillExtendedInfo: false);
-                        if (episodeInfo != null && episodeInfo.EpisodeNumber.HasValue)
+                        if (episodeInfo is not null && episodeInfo.EpisodeNumber.HasValue)
                         {
                             return true;
                         }

+ 1 - 1
Emby.Server.Implementations/Library/UserDataManager.cs

@@ -126,7 +126,7 @@ namespace Emby.Server.Implementations.Library
         {
             var userData = _repository.GetUserData(internalUserId, keys);
 
-            if (userData != null)
+            if (userData is not null)
             {
                 return userData;
             }

+ 5 - 5
Emby.Server.Implementations/Library/UserViewManager.cs

@@ -47,7 +47,7 @@ namespace Emby.Server.Implementations.Library
         {
             var user = _userManager.GetUserById(query.UserId);
 
-            if (user == null)
+            if (user is null)
             {
                 throw new ArgumentException("User Id specified in the query does not exist.", nameof(query));
             }
@@ -72,7 +72,7 @@ namespace Emby.Server.Implementations.Library
                     continue;
                 }
 
-                if (collectionFolder != null && UserView.IsEligibleForGrouping(folder) && user.IsFolderGrouped(folder.Id))
+                if (collectionFolder is not null && UserView.IsEligibleForGrouping(folder) && user.IsFolderGrouped(folder.Id))
                 {
                     groupedFolders.Add(collectionFolder);
                     continue;
@@ -208,15 +208,15 @@ namespace Emby.Server.Implementations.Library
                 // Only grab the index container for media
                 var container = item.IsFolder || !request.GroupItems ? null : item.LatestItemsIndexContainer;
 
-                if (container == null)
+                if (container is null)
                 {
                     list.Add(new Tuple<BaseItem, List<BaseItem>>(null, new List<BaseItem> { item }));
                 }
                 else
                 {
-                    var current = list.FirstOrDefault(i => i.Item1 != null && i.Item1.Id.Equals(container.Id));
+                    var current = list.FirstOrDefault(i => i.Item1 is not null && i.Item1.Id.Equals(container.Id));
 
-                    if (current != null)
+                    if (current is not null)
                     {
                         current.Item2.Add(item);
                     }

+ 1 - 1
Emby.Server.Implementations/Library/Validators/CollectionPostScanTask.cs

@@ -118,7 +118,7 @@ namespace Emby.Server.Implementations.Library.Validators
                 try
                 {
                     var boxSet = boxSets.FirstOrDefault(b => b?.Name == collectionName) as BoxSet;
-                    if (boxSet == null)
+                    if (boxSet is null)
                     {
                         // won't automatically create collection if only one movie in it
                         if (movieIds.Count >= 2)

+ 1 - 1
Emby.Server.Implementations/LiveTv/EmbyTV/DirectRecorder.cs

@@ -34,7 +34,7 @@ namespace Emby.Server.Implementations.LiveTv.EmbyTV
 
         public Task Record(IDirectStreamProvider? directStreamProvider, MediaSourceInfo mediaSource, string targetFile, TimeSpan duration, Action onStarted, CancellationToken cancellationToken)
         {
-            if (directStreamProvider != null)
+            if (directStreamProvider is not null)
             {
                 return RecordFromDirectStreamProvider(directStreamProvider, targetFile, duration, onStarted, cancellationToken);
             }

+ 41 - 41
Emby.Server.Implementations/LiveTv/EmbyTV/EmbyTV.cs

@@ -295,7 +295,7 @@ namespace Emby.Server.Implementations.LiveTv.EmbyTV
                 }
 
                 var program = GetProgramInfoFromCache(timer);
-                if (program == null)
+                if (program is null)
                 {
                     OnTimerOutOfDate(timer);
                     continue;
@@ -367,7 +367,7 @@ namespace Emby.Server.Implementations.LiveTv.EmbyTV
             {
                 var epgChannel = GetEpgChannelFromTunerChannel(info, tunerChannel, epgChannels);
 
-                if (epgChannel != null)
+                if (epgChannel is not null)
                 {
                     if (!string.IsNullOrWhiteSpace(epgChannel.Name))
                     {
@@ -450,7 +450,7 @@ namespace Emby.Server.Implementations.LiveTv.EmbyTV
 
                 var channel = epgChannelData.GetChannelById(mappedTunerChannelId);
 
-                if (channel != null)
+                if (channel is not null)
                 {
                     return channel;
                 }
@@ -473,7 +473,7 @@ namespace Emby.Server.Implementations.LiveTv.EmbyTV
 
                 var channel = epgChannelData.GetChannelById(mappedTunerChannelId);
 
-                if (channel != null)
+                if (channel is not null)
                 {
                     return channel;
                 }
@@ -490,7 +490,7 @@ namespace Emby.Server.Implementations.LiveTv.EmbyTV
 
                 var channel = epgChannelData.GetChannelByNumber(tunerChannelNumber);
 
-                if (channel != null)
+                if (channel is not null)
                 {
                     return channel;
                 }
@@ -502,7 +502,7 @@ namespace Emby.Server.Implementations.LiveTv.EmbyTV
 
                 var channel = epgChannelData.GetChannelByName(normalizedName);
 
-                if (channel != null)
+                if (channel is not null)
                 {
                     return channel;
                 }
@@ -552,7 +552,7 @@ namespace Emby.Server.Implementations.LiveTv.EmbyTV
             }
 
             var remove = _seriesTimerProvider.GetAll().FirstOrDefault(r => string.Equals(r.Id, timerId, StringComparison.OrdinalIgnoreCase));
-            if (remove != null)
+            if (remove is not null)
             {
                 _seriesTimerProvider.Delete(remove);
             }
@@ -563,7 +563,7 @@ namespace Emby.Server.Implementations.LiveTv.EmbyTV
         private void CancelTimerInternal(string timerId, bool isSeriesCancelled, bool isManualCancellation)
         {
             var timer = _timerProvider.GetTimer(timerId);
-            if (timer != null)
+            if (timer is not null)
             {
                 var statusChanging = timer.Status != RecordingStatus.Cancelled;
                 timer.Status = RecordingStatus.Cancelled;
@@ -582,7 +582,7 @@ namespace Emby.Server.Implementations.LiveTv.EmbyTV
                     _timerProvider.AddOrUpdate(timer, false);
                 }
 
-                if (statusChanging && TimerCancelled != null)
+                if (statusChanging && TimerCancelled is not null)
                 {
                     TimerCancelled(this, new GenericEventArgs<string>(timerId));
                 }
@@ -617,7 +617,7 @@ namespace Emby.Server.Implementations.LiveTv.EmbyTV
                 null :
                 _timerProvider.GetTimerByProgramId(info.ProgramId);
 
-            if (existingTimer != null)
+            if (existingTimer is not null)
             {
                 if (existingTimer.Status == RecordingStatus.Cancelled
                     || existingTimer.Status == RecordingStatus.Completed)
@@ -642,13 +642,13 @@ namespace Emby.Server.Implementations.LiveTv.EmbyTV
                 programInfo = GetProgramInfoFromCache(info);
             }
 
-            if (programInfo == null)
+            if (programInfo is null)
             {
                 _logger.LogInformation("Unable to find program with Id {0}. Will search using start date", info.ProgramId);
                 programInfo = GetProgramInfoFromCache(info.ChannelId, info.StartDate);
             }
 
-            if (programInfo != null)
+            if (programInfo is not null)
             {
                 CopyProgramInfoToTimerInfo(programInfo, info);
             }
@@ -668,7 +668,7 @@ namespace Emby.Server.Implementations.LiveTv.EmbyTV
             // populate info.seriesID
             var program = GetProgramInfoFromCache(info.ProgramId);
 
-            if (program != null)
+            if (program is not null)
             {
                 info.SeriesId = program.ExternalSeriesId;
             }
@@ -714,7 +714,7 @@ namespace Emby.Server.Implementations.LiveTv.EmbyTV
         {
             var instance = _seriesTimerProvider.GetAll().FirstOrDefault(i => string.Equals(i.Id, info.Id, StringComparison.OrdinalIgnoreCase));
 
-            if (instance != null)
+            if (instance is not null)
             {
                 instance.ChannelId = info.ChannelId;
                 instance.Days = info.Days;
@@ -744,7 +744,7 @@ namespace Emby.Server.Implementations.LiveTv.EmbyTV
         {
             var existingTimer = _timerProvider.GetTimer(updatedTimer.Id);
 
-            if (existingTimer == null)
+            if (existingTimer is null)
             {
                 throw new ResourceNotFoundException();
             }
@@ -861,7 +861,7 @@ namespace Emby.Server.Implementations.LiveTv.EmbyTV
                 }
             };
 
-            if (program != null)
+            if (program is not null)
             {
                 defaults.SeriesId = program.SeriesId;
                 defaults.ProgramId = program.Id;
@@ -912,7 +912,7 @@ namespace Emby.Server.Implementations.LiveTv.EmbyTV
 
                 var epgChannel = await GetEpgChannelFromTunerChannel(provider.Item1, provider.Item2, channel, cancellationToken).ConfigureAwait(false);
 
-                if (epgChannel == null)
+                if (epgChannel is null)
                 {
                     _logger.LogDebug("EPG channel not found for tuner channel {0}-{1} from {2}-{3}", channel.Number, channel.Name, provider.Item1.Name, provider.Item2.ListingsId ?? string.Empty);
                     continue;
@@ -945,9 +945,9 @@ namespace Emby.Server.Implementations.LiveTv.EmbyTV
                 {
                     var provider = _liveTvManager.ListingProviders.FirstOrDefault(l => string.Equals(l.Type, i.Type, StringComparison.OrdinalIgnoreCase));
 
-                    return provider == null ? null : new Tuple<IListingsProvider, ListingsProviderInfo>(provider, i);
+                    return provider is null ? null : new Tuple<IListingsProvider, ListingsProviderInfo>(provider, i);
                 })
-                .Where(i => i != null)
+                .Where(i => i is not null)
                 .ToList();
         }
 
@@ -964,7 +964,7 @@ namespace Emby.Server.Implementations.LiveTv.EmbyTV
                 null :
                 currentLiveStreams.FirstOrDefault(i => string.Equals(i.OriginalStreamId, streamId, StringComparison.OrdinalIgnoreCase));
 
-            if (result != null && result.EnableStreamSharing)
+            if (result is not null && result.EnableStreamSharing)
             {
                 result.ConsumerCount++;
 
@@ -1134,7 +1134,7 @@ namespace Emby.Server.Implementations.LiveTv.EmbyTV
                 // trim trailing period from the folder name
                 var folderName = _fileSystem.GetValidFilename(timer.Name).Trim().TrimEnd('.').Trim();
 
-                if (metadata != null && metadata.ProductionYear.HasValue)
+                if (metadata is not null && metadata.ProductionYear.HasValue)
                 {
                     folderName += " (" + metadata.ProductionYear.Value.ToString(CultureInfo.InvariantCulture) + ")";
                 }
@@ -1232,13 +1232,13 @@ namespace Emby.Server.Implementations.LiveTv.EmbyTV
                 programInfo = GetProgramInfoFromCache(timer);
             }
 
-            if (programInfo == null)
+            if (programInfo is null)
             {
                 _logger.LogInformation("Unable to find program with Id {0}. Will search using start date", timer.ProgramId);
                 programInfo = GetProgramInfoFromCache(timer.ChannelId, timer.StartDate);
             }
 
-            if (programInfo != null)
+            if (programInfo is not null)
             {
                 CopyProgramInfoToTimerInfo(programInfo, timer);
             }
@@ -1412,7 +1412,7 @@ namespace Emby.Server.Implementations.LiveTv.EmbyTV
 
             var item = GetAffectedBaseItem(Path.GetDirectoryName(path));
 
-            if (item != null)
+            if (item is not null)
             {
                 _logger.LogInformation("Refreshing recording parent {Path}", item.Path);
 
@@ -1437,19 +1437,19 @@ namespace Emby.Server.Implementations.LiveTv.EmbyTV
 
             var parentPath = Path.GetDirectoryName(path);
 
-            while (item == null && !string.IsNullOrEmpty(path))
+            while (item is null && !string.IsNullOrEmpty(path))
             {
                 item = _libraryManager.FindByPath(path, null);
 
                 path = Path.GetDirectoryName(path);
             }
 
-            if (item != null)
+            if (item is not null)
             {
                 if (item.GetType() == typeof(Folder) && string.Equals(item.Path, parentPath, StringComparison.OrdinalIgnoreCase))
                 {
                     var parentItem = item.GetParent();
-                    if (parentItem != null && parentItem is not AggregateFolder)
+                    if (parentItem is not null && parentItem is not AggregateFolder)
                     {
                         item = parentItem;
                     }
@@ -1474,7 +1474,7 @@ namespace Emby.Server.Implementations.LiveTv.EmbyTV
             var seriesTimerId = timer.SeriesTimerId;
             var seriesTimer = _seriesTimerProvider.GetAll().FirstOrDefault(i => string.Equals(i.Id, seriesTimerId, StringComparison.OrdinalIgnoreCase));
 
-            if (seriesTimer == null || seriesTimer.KeepUpTo <= 0)
+            if (seriesTimer is null || seriesTimer.KeepUpTo <= 0)
             {
                 return;
             }
@@ -1569,7 +1569,7 @@ namespace Emby.Server.Implementations.LiveTv.EmbyTV
         {
             var libraryItem = _libraryManager.FindByPath(timer.RecordingPath, false);
 
-            if (libraryItem != null)
+            if (libraryItem is not null)
             {
                 _libraryManager.DeleteItem(
                     libraryItem,
@@ -1695,7 +1695,7 @@ namespace Emby.Server.Implementations.LiveTv.EmbyTV
                 _ => null
             };
 
-            if (imageSaveFilenameWithoutExtension == null)
+            if (imageSaveFilenameWithoutExtension is null)
             {
                 return;
             }
@@ -1714,7 +1714,7 @@ namespace Emby.Server.Implementations.LiveTv.EmbyTV
                 (program.GetImageInfo(ImageType.Thumb, 0) ?? program.GetImageInfo(ImageType.Primary, 0)) :
                 (program.GetImageInfo(ImageType.Primary, 0) ?? program.GetImageInfo(ImageType.Thumb, 0));
 
-            if (image != null)
+            if (image is not null)
             {
                 try
                 {
@@ -1729,7 +1729,7 @@ namespace Emby.Server.Implementations.LiveTv.EmbyTV
             if (!program.IsSeries)
             {
                 image = program.GetImageInfo(ImageType.Backdrop, 0);
-                if (image != null)
+                if (image is not null)
                 {
                     try
                     {
@@ -1742,7 +1742,7 @@ namespace Emby.Server.Implementations.LiveTv.EmbyTV
                 }
 
                 image = program.GetImageInfo(ImageType.Thumb, 0);
-                if (image != null)
+                if (image is not null)
                 {
                     try
                     {
@@ -1755,7 +1755,7 @@ namespace Emby.Server.Implementations.LiveTv.EmbyTV
                 }
 
                 image = program.GetImageInfo(ImageType.Logo, 0);
-                if (image != null)
+                if (image is not null)
                 {
                     try
                     {
@@ -1782,7 +1782,7 @@ namespace Emby.Server.Implementations.LiveTv.EmbyTV
                 }).FirstOrDefault() as LiveTvProgram;
 
                 // dummy this up
-                if (program == null)
+                if (program is null)
                 {
                     program = new LiveTvProgram
                     {
@@ -2240,7 +2240,7 @@ namespace Emby.Server.Implementations.LiveTv.EmbyTV
                         ? null
                         : _timerProvider.GetTimerByProgramId(timer.ProgramId));
 
-                if (existingTimer == null)
+                if (existingTimer is null)
                 {
                     if (ShouldCancelTimerForSeriesTimer(seriesTimer, timer))
                     {
@@ -2367,13 +2367,13 @@ namespace Emby.Server.Implementations.LiveTv.EmbyTV
                             DtoOptions = new DtoOptions()
                         }).FirstOrDefault() as LiveTvChannel;
 
-                    if (channel != null && !string.IsNullOrWhiteSpace(channel.ExternalId))
+                    if (channel is not null && !string.IsNullOrWhiteSpace(channel.ExternalId))
                     {
                         tempChannelCache[parent.ChannelId] = channel;
                     }
                 }
 
-                if (channel != null || tempChannelCache.TryGetValue(parent.ChannelId, out channel))
+                if (channel is not null || tempChannelCache.TryGetValue(parent.ChannelId, out channel))
                 {
                     channelId = channel.ExternalId;
                 }
@@ -2426,13 +2426,13 @@ namespace Emby.Server.Implementations.LiveTv.EmbyTV
                             DtoOptions = new DtoOptions()
                         }).FirstOrDefault() as LiveTvChannel;
 
-                    if (channel != null && !string.IsNullOrWhiteSpace(channel.ExternalId))
+                    if (channel is not null && !string.IsNullOrWhiteSpace(channel.ExternalId))
                     {
                         tempChannelCache[programInfo.ChannelId] = channel;
                     }
                 }
 
-                if (channel != null || tempChannelCache.TryGetValue(programInfo.ChannelId, out channel))
+                if (channel is not null || tempChannelCache.TryGetValue(programInfo.ChannelId, out channel))
                 {
                     channelId = channel.ExternalId;
                 }
@@ -2626,7 +2626,7 @@ namespace Emby.Server.Implementations.LiveTv.EmbyTV
             {
                 var configuredDevice = configuredDevices.FirstOrDefault(i => string.Equals(i.DeviceId, device.DeviceId, StringComparison.OrdinalIgnoreCase));
 
-                if (configuredDevice != null && !string.Equals(device.Url, configuredDevice.Url, StringComparison.OrdinalIgnoreCase))
+                if (configuredDevice is not null && !string.Equals(device.Url, configuredDevice.Url, StringComparison.OrdinalIgnoreCase))
                 {
                     _logger.LogInformation("Tuner url has changed from {PreviousUrl} to {NewUrl}", configuredDevice.Url, device.Url);
 

+ 1 - 1
Emby.Server.Implementations/LiveTv/EmbyTV/EncodedRecorder.cs

@@ -208,7 +208,7 @@ namespace Emby.Server.Implementations.LiveTv.EmbyTV
 
             // var audioChannels = 2;
             // var audioStream = mediaStreams.FirstOrDefault(i => i.Type == MediaStreamType.Audio);
-            // if (audioStream != null)
+            // if (audioStream is not null)
             // {
             //    audioChannels = audioStream.Channels ?? audioChannels;
             // }

+ 2 - 2
Emby.Server.Implementations/LiveTv/EmbyTV/ItemDataProvider.cs

@@ -36,7 +36,7 @@ namespace Emby.Server.Implementations.LiveTv.EmbyTV
         [MemberNotNull(nameof(_items))]
         private void EnsureLoaded()
         {
-            if (_items != null)
+            if (_items is not null)
             {
                 return;
             }
@@ -49,7 +49,7 @@ namespace Emby.Server.Implementations.LiveTv.EmbyTV
                 {
                     var bytes = File.ReadAllBytes(_dataPath);
                     _items = JsonSerializer.Deserialize<T[]>(bytes, _jsonOptions);
-                    if (_items == null)
+                    if (_items is null)
                     {
                         Logger.LogError("Error deserializing {Path}, data was null", _dataPath);
                         _items = Array.Empty<T>();

+ 1 - 1
Emby.Server.Implementations/LiveTv/EmbyTV/RecordingHelper.cs

@@ -63,7 +63,7 @@ namespace Emby.Server.Implementations.LiveTv.EmbyTV
                     }
                 }
             }
-            else if (info.IsMovie && info.ProductionYear != null)
+            else if (info.IsMovie && info.ProductionYear is not null)
             {
                 name += " (" + info.ProductionYear + ")";
             }

+ 1 - 1
Emby.Server.Implementations/LiveTv/EmbyTV/TimerManager.cs

@@ -165,7 +165,7 @@ namespace Emby.Server.Implementations.LiveTv.EmbyTV
             var timerId = (string?)state ?? throw new ArgumentNullException(nameof(state));
 
             var timer = GetAll().FirstOrDefault(i => string.Equals(i.Id, timerId, StringComparison.OrdinalIgnoreCase));
-            if (timer != null)
+            if (timer is not null)
             {
                 TimerFired?.Invoke(this, new GenericEventArgs<TimerInfo>(timer));
             }

+ 20 - 20
Emby.Server.Implementations/LiveTv/Listings/SchedulesDirect.cs

@@ -111,7 +111,7 @@ namespace Emby.Server.Implementations.LiveTv.Listings
             using var response = await Send(options, true, info, cancellationToken).ConfigureAwait(false);
             await using var responseStream = await response.Content.ReadAsStreamAsync(cancellationToken).ConfigureAwait(false);
             var dailySchedules = await JsonSerializer.DeserializeAsync<IReadOnlyList<DayDto>>(responseStream, _jsonOptions, cancellationToken).ConfigureAwait(false);
-            if (dailySchedules == null)
+            if (dailySchedules is null)
             {
                 return Array.Empty<ProgramInfo>();
             }
@@ -127,7 +127,7 @@ namespace Emby.Server.Implementations.LiveTv.Listings
             using var innerResponse = await Send(programRequestOptions, true, info, cancellationToken).ConfigureAwait(false);
             await using var innerResponseStream = await innerResponse.Content.ReadAsStreamAsync(cancellationToken).ConfigureAwait(false);
             var programDetails = await JsonSerializer.DeserializeAsync<IReadOnlyList<ProgramDetailsDto>>(innerResponseStream, _jsonOptions, cancellationToken).ConfigureAwait(false);
-            if (programDetails == null)
+            if (programDetails is null)
             {
                 return Array.Empty<ProgramInfo>();
             }
@@ -153,7 +153,7 @@ namespace Emby.Server.Implementations.LiveTv.Listings
                     continue;
                 }
 
-                if (images != null)
+                if (images is not null)
                 {
                     var imageIndex = images.FindIndex(i => i.ProgramId == schedule.ProgramId[..10]);
                     if (imageIndex > -1)
@@ -228,7 +228,7 @@ namespace Emby.Server.Implementations.LiveTv.Listings
 
         private ProgramInfo GetProgram(string channelId, ProgramDto programInfo, ProgramDetailsDto details)
         {
-            if (programInfo.AirDateTime == null)
+            if (programInfo.AirDateTime is null)
             {
                 return null;
             }
@@ -266,7 +266,7 @@ namespace Emby.Server.Implementations.LiveTv.Listings
             }
 
             string episodeTitle = null;
-            if (details.EpisodeTitle150 != null)
+            if (details.EpisodeTitle150 is not null)
             {
                 episodeTitle = details.EpisodeTitle150;
             }
@@ -283,7 +283,7 @@ namespace Emby.Server.Implementations.LiveTv.Listings
                 EpisodeTitle = episodeTitle,
                 Audio = audioType,
                 // IsNew = programInfo.@new ?? false,
-                IsRepeat = programInfo.New == null,
+                IsRepeat = programInfo.New is null,
                 IsSeries = string.Equals(details.EntityType, "episode", StringComparison.OrdinalIgnoreCase),
                 ImageUrl = details.PrimaryImage,
                 ThumbImageUrl = details.ThumbImage,
@@ -315,13 +315,13 @@ namespace Emby.Server.Implementations.LiveTv.Listings
 
             info.ShowId = showId;
 
-            if (programInfo.VideoProperties != null)
+            if (programInfo.VideoProperties is not null)
             {
                 info.IsHD = programInfo.VideoProperties.Contains("hdtv", StringComparison.OrdinalIgnoreCase);
                 info.Is3D = programInfo.VideoProperties.Contains("3d", StringComparison.OrdinalIgnoreCase);
             }
 
-            if (details.ContentRating != null && details.ContentRating.Count > 0)
+            if (details.ContentRating is not null && details.ContentRating.Count > 0)
             {
                 info.OfficialRating = details.ContentRating[0].Code.Replace("TV", "TV-", StringComparison.Ordinal)
                     .Replace("--", "-", StringComparison.Ordinal);
@@ -333,13 +333,13 @@ namespace Emby.Server.Implementations.LiveTv.Listings
                 }
             }
 
-            if (details.Descriptions != null)
+            if (details.Descriptions is not null)
             {
-                if (details.Descriptions.Description1000 != null && details.Descriptions.Description1000.Count > 0)
+                if (details.Descriptions.Description1000 is not null && details.Descriptions.Description1000.Count > 0)
                 {
                     info.Overview = details.Descriptions.Description1000[0].Description;
                 }
-                else if (details.Descriptions.Description100 != null && details.Descriptions.Description100.Count > 0)
+                else if (details.Descriptions.Description100 is not null && details.Descriptions.Description100.Count > 0)
                 {
                     info.Overview = details.Descriptions.Description100[0].Description;
                 }
@@ -351,12 +351,12 @@ namespace Emby.Server.Implementations.LiveTv.Listings
 
                 info.SeriesProviderIds[MetadataProvider.Zap2It.ToString()] = info.SeriesId;
 
-                if (details.Metadata != null)
+                if (details.Metadata is not null)
                 {
                     foreach (var metadataProgram in details.Metadata)
                     {
                         var gracenote = metadataProgram.Gracenote;
-                        if (gracenote != null)
+                        if (gracenote is not null)
                         {
                             info.SeasonNumber = gracenote.Season;
 
@@ -371,13 +371,13 @@ namespace Emby.Server.Implementations.LiveTv.Listings
                 }
             }
 
-            if (details.OriginalAirDate != null)
+            if (details.OriginalAirDate is not null)
             {
                 info.OriginalAirDate = details.OriginalAirDate;
                 info.ProductionYear = info.OriginalAirDate.Value.Year;
             }
 
-            if (details.Movie != null)
+            if (details.Movie is not null)
             {
                 if (!string.IsNullOrEmpty(details.Movie.Year)
                     && int.TryParse(details.Movie.Year, out int year))
@@ -386,7 +386,7 @@ namespace Emby.Server.Implementations.LiveTv.Listings
                 }
             }
 
-            if (details.Genres != null)
+            if (details.Genres is not null)
             {
                 info.Genres = details.Genres.Where(g => !string.IsNullOrWhiteSpace(g)).ToList();
                 info.IsNews = details.Genres.Contains("news", StringComparison.OrdinalIgnoreCase);
@@ -407,7 +407,7 @@ namespace Emby.Server.Implementations.LiveTv.Listings
                 .ThenByDescending(i => GetSizeOrder(i))
                 .FirstOrDefault();
 
-            if (match == null)
+            if (match is null)
             {
                 return null;
             }
@@ -518,7 +518,7 @@ namespace Emby.Server.Implementations.LiveTv.Listings
 
                 var root = await JsonSerializer.DeserializeAsync<IReadOnlyList<HeadendsDto>>(response, _jsonOptions, cancellationToken).ConfigureAwait(false);
 
-                if (root != null)
+                if (root is not null)
                 {
                     foreach (HeadendsDto headend in root)
                     {
@@ -785,7 +785,7 @@ namespace Emby.Server.Implementations.LiveTv.Listings
             using var httpResponse = await Send(options, true, info, cancellationToken).ConfigureAwait(false);
             await using var stream = await httpResponse.Content.ReadAsStreamAsync(cancellationToken).ConfigureAwait(false);
             var root = await JsonSerializer.DeserializeAsync<ChannelDto>(stream, _jsonOptions, cancellationToken).ConfigureAwait(false);
-            if (root == null)
+            if (root is null)
             {
                 return new List<ChannelInfo>();
             }
@@ -814,7 +814,7 @@ namespace Emby.Server.Implementations.LiveTv.Listings
                     Name = string.IsNullOrWhiteSpace(station.Name) ? channelNumber : station.Name
                 };
 
-                if (station.Logo != null)
+                if (station.Logo is not null)
                 {
                     channelInfo.ImageUrl = station.Logo.Url;
                 }

+ 3 - 3
Emby.Server.Implementations/LiveTv/Listings/XmlTvListingsProvider.cs

@@ -151,9 +151,9 @@ namespace Emby.Server.Implementations.LiveTv.Listings
                 Overview = program.Description,
                 ProductionYear = program.CopyrightDate?.Year,
                 SeasonNumber = program.Episode?.Series,
-                IsSeries = program.Episode != null,
+                IsSeries = program.Episode is not null,
                 IsRepeat = program.IsPreviouslyShown && !program.IsNew,
-                IsPremiere = program.Premiere != null,
+                IsPremiere = program.Premiere is not null,
                 IsKids = program.Categories.Any(c => info.KidsCategories.Contains(c, StringComparison.OrdinalIgnoreCase)),
                 IsMovie = program.Categories.Any(c => info.MovieCategories.Contains(c, StringComparison.OrdinalIgnoreCase)),
                 IsNews = program.Categories.Any(c => info.NewsCategories.Contains(c, StringComparison.OrdinalIgnoreCase)),
@@ -162,7 +162,7 @@ namespace Emby.Server.Implementations.LiveTv.Listings
                 HasImage = !string.IsNullOrEmpty(program.Icon?.Source),
                 OfficialRating = string.IsNullOrEmpty(program.Rating?.Value) ? null : program.Rating.Value,
                 CommunityRating = program.StarRating,
-                SeriesId = program.Episode == null ? null : program.Title?.GetMD5().ToString("N", CultureInfo.InvariantCulture)
+                SeriesId = program.Episode is null ? null : program.Title?.GetMD5().ToString("N", CultureInfo.InvariantCulture)
             };
 
             if (string.IsNullOrWhiteSpace(program.ProgramId))

+ 23 - 23
Emby.Server.Implementations/LiveTv/LiveTvDtoService.cs

@@ -80,7 +80,7 @@ namespace Emby.Server.Implementations.LiveTv
                 dto.ProgramId = GetInternalProgramId(info.ProgramId).ToString("N", CultureInfo.InvariantCulture);
             }
 
-            if (program != null)
+            if (program is not null)
             {
                 dto.ProgramInfo = _dtoService.GetBaseItemDto(program, new DtoOptions());
 
@@ -98,7 +98,7 @@ namespace Emby.Server.Implementations.LiveTv
                 }
             }
 
-            if (channel != null)
+            if (channel is not null)
             {
                 dto.ChannelName = channel.Name;
 
@@ -150,7 +150,7 @@ namespace Emby.Server.Implementations.LiveTv
                 dto.ProgramId = GetInternalProgramId(info.ProgramId).ToString("N", CultureInfo.InvariantCulture);
             }
 
-            dto.DayPattern = info.Days == null ? null : GetDayPattern(info.Days.ToArray());
+            dto.DayPattern = info.Days is null ? null : GetDayPattern(info.Days.ToArray());
 
             FillImages(dto, info.Name, info.SeriesId);
 
@@ -168,10 +168,10 @@ namespace Emby.Server.Implementations.LiveTv
                 DtoOptions = new DtoOptions(false)
             }).FirstOrDefault();
 
-            if (librarySeries != null)
+            if (librarySeries is not null)
             {
                 var image = librarySeries.GetImageInfo(ImageType.Thumb, 0);
-                if (image != null)
+                if (image is not null)
                 {
                     try
                     {
@@ -185,7 +185,7 @@ namespace Emby.Server.Implementations.LiveTv
                 }
 
                 image = librarySeries.GetImageInfo(ImageType.Backdrop, 0);
-                if (image != null)
+                if (image is not null)
                 {
                     try
                     {
@@ -212,10 +212,10 @@ namespace Emby.Server.Implementations.LiveTv
                 Name = string.IsNullOrEmpty(programSeriesId) ? seriesName : null
             }).FirstOrDefault();
 
-            if (program != null)
+            if (program is not null)
             {
                 var image = program.GetImageInfo(ImageType.Primary, 0);
-                if (image != null)
+                if (image is not null)
                 {
                     try
                     {
@@ -228,10 +228,10 @@ namespace Emby.Server.Implementations.LiveTv
                     }
                 }
 
-                if (dto.ParentBackdropImageTags == null || dto.ParentBackdropImageTags.Length == 0)
+                if (dto.ParentBackdropImageTags is null || dto.ParentBackdropImageTags.Length == 0)
                 {
                     image = program.GetImageInfo(ImageType.Backdrop, 0);
-                    if (image != null)
+                    if (image is not null)
                     {
                         try
                         {
@@ -262,10 +262,10 @@ namespace Emby.Server.Implementations.LiveTv
                 DtoOptions = new DtoOptions(false)
             }).FirstOrDefault();
 
-            if (librarySeries != null)
+            if (librarySeries is not null)
             {
                 var image = librarySeries.GetImageInfo(ImageType.Thumb, 0);
-                if (image != null)
+                if (image is not null)
                 {
                     try
                     {
@@ -279,7 +279,7 @@ namespace Emby.Server.Implementations.LiveTv
                 }
 
                 image = librarySeries.GetImageInfo(ImageType.Backdrop, 0);
-                if (image != null)
+                if (image is not null)
                 {
                     try
                     {
@@ -305,7 +305,7 @@ namespace Emby.Server.Implementations.LiveTv
                 DtoOptions = new DtoOptions(false)
             }).FirstOrDefault();
 
-            if (program == null)
+            if (program is null)
             {
                 program = _libraryManager.GetItemList(new InternalItemsQuery
                 {
@@ -318,10 +318,10 @@ namespace Emby.Server.Implementations.LiveTv
                 }).FirstOrDefault();
             }
 
-            if (program != null)
+            if (program is not null)
             {
                 var image = program.GetImageInfo(ImageType.Primary, 0);
-                if (image != null)
+                if (image is not null)
                 {
                     try
                     {
@@ -334,10 +334,10 @@ namespace Emby.Server.Implementations.LiveTv
                     }
                 }
 
-                if (dto.ParentBackdropImageTags == null || dto.ParentBackdropImageTags.Length == 0)
+                if (dto.ParentBackdropImageTags is null || dto.ParentBackdropImageTags.Length == 0)
                 {
                     image = program.GetImageInfo(ImageType.Backdrop, 0);
-                    if (image != null)
+                    if (image is not null)
                     {
                         try
                         {
@@ -460,7 +460,7 @@ namespace Emby.Server.Implementations.LiveTv
             {
                 var channel = _libraryManager.GetItemById(dto.ChannelId);
 
-                if (channel != null)
+                if (channel is not null)
                 {
                     info.ChannelId = channel.ExternalId;
                 }
@@ -470,7 +470,7 @@ namespace Emby.Server.Implementations.LiveTv
             {
                 var program = _libraryManager.GetItemById(dto.ProgramId);
 
-                if (program != null)
+                if (program is not null)
                 {
                     info.ProgramId = program.ExternalId;
                 }
@@ -480,7 +480,7 @@ namespace Emby.Server.Implementations.LiveTv
             {
                 var timer = await liveTv.GetSeriesTimer(dto.SeriesTimerId, cancellationToken).ConfigureAwait(false);
 
-                if (timer != null)
+                if (timer is not null)
                 {
                     info.SeriesTimerId = timer.ExternalId;
                 }
@@ -526,7 +526,7 @@ namespace Emby.Server.Implementations.LiveTv
             {
                 var channel = _libraryManager.GetItemById(dto.ChannelId);
 
-                if (channel != null)
+                if (channel is not null)
                 {
                     info.ChannelId = channel.ExternalId;
                 }
@@ -536,7 +536,7 @@ namespace Emby.Server.Implementations.LiveTv
             {
                 var program = _libraryManager.GetItemById(dto.ProgramId);
 
-                if (program != null)
+                if (program is not null)
                 {
                     info.ProgramId = program.ExternalId;
                 }

+ 23 - 23
Emby.Server.Implementations/LiveTv/LiveTvManager.cs

@@ -434,7 +434,7 @@ namespace Emby.Server.Implementations.LiveTv
 
             var item = _libraryManager.GetItemById(id) as LiveTvChannel;
 
-            if (item == null)
+            if (item is null)
             {
                 item = new LiveTvChannel
                 {
@@ -446,7 +446,7 @@ namespace Emby.Server.Implementations.LiveTv
                 isNew = true;
             }
 
-            if (channelInfo.Tags != null)
+            if (channelInfo.Tags is not null)
             {
                 if (!channelInfo.Tags.SequenceEqual(item.Tags, StringComparer.OrdinalIgnoreCase))
                 {
@@ -836,7 +836,7 @@ namespace Emby.Server.Implementations.LiveTv
             {
                 var seriesTimers = await GetSeriesTimersInternal(new SeriesTimerQuery(), cancellationToken).ConfigureAwait(false);
                 var seriesTimer = seriesTimers.Items.FirstOrDefault(i => string.Equals(_tvDtoService.GetInternalSeriesTimerId(i.Id).ToString("N", CultureInfo.InvariantCulture), query.SeriesTimerId, StringComparison.OrdinalIgnoreCase));
-                if (seriesTimer != null)
+                if (seriesTimer is not null)
                 {
                     internalQuery.ExternalSeriesId = seriesTimer.SeriesId;
 
@@ -948,7 +948,7 @@ namespace Emby.Server.Implementations.LiveTv
 
             var channel = _libraryManager.GetItemById(program.ChannelId);
 
-            if (channel == null)
+            if (channel is null)
             {
                 return score;
             }
@@ -989,7 +989,7 @@ namespace Emby.Server.Implementations.LiveTv
                 var timer = timerList.FirstOrDefault(i => string.Equals(i.ProgramId, externalProgramId, StringComparison.OrdinalIgnoreCase));
                 var foundSeriesTimer = false;
 
-                if (timer != null)
+                if (timer is not null)
                 {
                     if (timer.Status != RecordingStatus.Cancelled && timer.Status != RecordingStatus.Error)
                     {
@@ -1016,7 +1016,7 @@ namespace Emby.Server.Implementations.LiveTv
 
                 var seriesTimer = seriesTimerList.FirstOrDefault(i => string.Equals(i.SeriesId, externalSeriesId, StringComparison.OrdinalIgnoreCase));
 
-                if (seriesTimer != null)
+                if (seriesTimer is not null)
                 {
                     program.SeriesTimerId = _tvDtoService.GetInternalSeriesTimerId(seriesTimer.Id)
                         .ToString("N", CultureInfo.InvariantCulture);
@@ -1086,7 +1086,7 @@ namespace Emby.Server.Implementations.LiveTv
 
             var coreService = _services.OfType<EmbyTV.EmbyTV>().FirstOrDefault();
 
-            if (coreService != null)
+            if (coreService is not null)
             {
                 await coreService.RefreshSeriesTimers(cancellationToken).ConfigureAwait(false);
                 await coreService.RefreshTimers(cancellationToken).ConfigureAwait(false);
@@ -1280,7 +1280,7 @@ namespace Emby.Server.Implementations.LiveTv
                 {
                     var item = _libraryManager.GetItemById(itemId);
 
-                    if (item != null)
+                    if (item is not null)
                     {
                         _libraryManager.DeleteItem(
                             item,
@@ -1314,7 +1314,7 @@ namespace Emby.Server.Implementations.LiveTv
 
         private QueryResult<BaseItem> GetEmbyRecordings(RecordingQuery query, DtoOptions dtoOptions, User user)
         {
-            if (user == null)
+            if (user is null)
             {
                 return new QueryResult<BaseItem>();
             }
@@ -1377,7 +1377,7 @@ namespace Emby.Server.Implementations.LiveTv
                 limit = null;
 
                 // var allActivePaths = EmbyTV.EmbyTV.Current.GetAllActiveRecordings().Select(i => i.Path).ToArray();
-                // var items = allActivePaths.Select(i => _libraryManager.FindByPath(i, false)).Where(i => i != null).ToArray();
+                // var items = allActivePaths.Select(i => _libraryManager.FindByPath(i, false)).Where(i => i is not null).ToArray();
 
                 // return new QueryResult<BaseItem>
                 // {
@@ -1517,7 +1517,7 @@ namespace Emby.Server.Implementations.LiveTv
                 dto.CompletionPercentage = pct;
             }
 
-            if (channel != null)
+            if (channel is not null)
             {
                 dto.ChannelName = channel.Name;
 
@@ -1702,7 +1702,7 @@ namespace Emby.Server.Implementations.LiveTv
         {
             var timer = await GetTimer(id, CancellationToken.None).ConfigureAwait(false);
 
-            if (timer == null)
+            if (timer is null)
             {
                 throw new ResourceNotFoundException(string.Format(CultureInfo.InvariantCulture, "Timer with Id {0} not found", id));
             }
@@ -1721,7 +1721,7 @@ namespace Emby.Server.Implementations.LiveTv
         {
             var timer = await GetSeriesTimer(id, CancellationToken.None).ConfigureAwait(false);
 
-            if (timer == null)
+            if (timer is null)
             {
                 throw new ResourceNotFoundException(string.Format(CultureInfo.InvariantCulture, "SeriesTimer with Id {0} not found", id));
             }
@@ -1834,7 +1834,7 @@ namespace Emby.Server.Implementations.LiveTv
                     {
                         var internalChannelId = _tvDtoService.GetInternalChannelId(i.Item2.Name, i.Item1.ChannelId);
                         var channel = _libraryManager.GetItemById(internalChannelId);
-                        channelName = channel == null ? null : channel.Name;
+                        channelName = channel is null ? null : channel.Name;
                     }
 
                     return _tvDtoService.GetSeriesTimerInfoDto(i.Item1, i.Item2, channelName);
@@ -1887,7 +1887,7 @@ namespace Emby.Server.Implementations.LiveTv
                 {
                     var currentProgram = programs.FirstOrDefault(i => channel.Id.Equals(i.ChannelId));
 
-                    if (currentProgram != null)
+                    if (currentProgram is not null)
                     {
                         currentProgramsList.Add(currentProgram);
                     }
@@ -1913,7 +1913,7 @@ namespace Emby.Server.Implementations.LiveTv
             ILiveTvService service = null;
             ProgramInfo programInfo = null;
 
-            if (program != null)
+            if (program is not null)
             {
                 service = GetService(program);
 
@@ -2147,7 +2147,7 @@ namespace Emby.Server.Implementations.LiveTv
 
             var service = _services.FirstOrDefault(i => string.Equals(i.GetType().FullName.GetMD5().ToString("N", CultureInfo.InvariantCulture), parts[0], StringComparison.OrdinalIgnoreCase));
 
-            if (service == null)
+            if (service is null)
             {
                 throw new ArgumentException("Service not found.");
             }
@@ -2178,7 +2178,7 @@ namespace Emby.Server.Implementations.LiveTv
 
             var provider = _tunerHosts.FirstOrDefault(i => string.Equals(info.Type, i.Type, StringComparison.OrdinalIgnoreCase));
 
-            if (provider == null)
+            if (provider is null)
             {
                 throw new ResourceNotFoundException();
             }
@@ -2222,7 +2222,7 @@ namespace Emby.Server.Implementations.LiveTv
 
             var provider = _listingProviders.FirstOrDefault(i => string.Equals(info.Type, i.Type, StringComparison.OrdinalIgnoreCase));
 
-            if (provider == null)
+            if (provider is null)
             {
                 throw new ResourceNotFoundException(
                     string.Format(
@@ -2317,7 +2317,7 @@ namespace Emby.Server.Implementations.LiveTv
 
             var providerChannel = EmbyTV.EmbyTV.Current.GetEpgChannelFromTunerChannel(mappings, tunerChannel, providerChannels);
 
-            if (providerChannel != null)
+            if (providerChannel is not null)
             {
                 result.ProviderChannelName = providerChannel.Name;
                 result.ProviderChannelId = providerChannel.Id;
@@ -2334,7 +2334,7 @@ namespace Emby.Server.Implementations.LiveTv
             {
                 var provider = _listingProviders.FirstOrDefault(i => string.Equals(providerType, i.Type, StringComparison.OrdinalIgnoreCase));
 
-                if (provider == null)
+                if (provider is null)
                 {
                     throw new ResourceNotFoundException();
                 }
@@ -2347,7 +2347,7 @@ namespace Emby.Server.Implementations.LiveTv
 
                 var provider = _listingProviders.FirstOrDefault(i => string.Equals(info.Type, i.Type, StringComparison.OrdinalIgnoreCase));
 
-                if (provider == null)
+                if (provider is null)
                 {
                     throw new ResourceNotFoundException();
                 }
@@ -2390,7 +2390,7 @@ namespace Emby.Server.Implementations.LiveTv
                 .SelectMany(i => i.Locations)
                 .Distinct(StringComparer.OrdinalIgnoreCase)
                 .Select(i => _libraryManager.FindByPath(i, true))
-                .Where(i => i != null && i.IsVisibleStandalone(user))
+                .Where(i => i is not null && i.IsVisibleStandalone(user))
                 .SelectMany(i => _libraryManager.GetCollectionFolders(i))
                 .GroupBy(x => x.Id)
                 .Select(x => x.First())

+ 2 - 2
Emby.Server.Implementations/LiveTv/LiveTvMediaSourceProvider.cs

@@ -42,7 +42,7 @@ namespace Emby.Server.Implementations.LiveTv
             {
                 var activeRecordingInfo = _liveTvManager.GetActiveRecordingInfo(item.Path);
 
-                if (string.IsNullOrEmpty(item.Path) || activeRecordingInfo != null)
+                if (string.IsNullOrEmpty(item.Path) || activeRecordingInfo is not null)
                 {
                     return GetMediaSourcesInternal(item, activeRecordingInfo, cancellationToken);
                 }
@@ -59,7 +59,7 @@ namespace Emby.Server.Implementations.LiveTv
 
             try
             {
-                if (activeRecordingInfo != null)
+                if (activeRecordingInfo is not null)
                 {
                     sources = await EmbyTV.EmbyTV.Current.GetRecordingStreamMediaSources(activeRecordingInfo, cancellationToken)
                         .ConfigureAwait(false);

+ 2 - 2
Emby.Server.Implementations/LiveTv/TunerHosts/BaseTunerHost.cs

@@ -147,7 +147,7 @@ namespace Emby.Server.Implementations.LiveTv.TunerHosts
                         var channels = await GetChannels(host, true, cancellationToken).ConfigureAwait(false);
                         var channelInfo = channels.FirstOrDefault(i => string.Equals(i.Id, channelId, StringComparison.OrdinalIgnoreCase));
 
-                        if (channelInfo != null)
+                        if (channelInfo is not null)
                         {
                             return await GetChannelStreamMediaSources(host, channelInfo, cancellationToken).ConfigureAwait(false);
                         }
@@ -187,7 +187,7 @@ namespace Emby.Server.Implementations.LiveTv.TunerHosts
                     var channels = await GetChannels(host, true, cancellationToken).ConfigureAwait(false);
                     var channelInfo = channels.FirstOrDefault(i => string.Equals(i.Id, channelId, StringComparison.OrdinalIgnoreCase));
 
-                    if (channelInfo != null)
+                    if (channelInfo is not null)
                     {
                         hostsWithChannel.Add(new Tuple<TunerHostInfo, ChannelInfo>(host, channelInfo));
                     }

+ 4 - 4
Emby.Server.Implementations/LiveTv/TunerHosts/HdHomerun/HdHomerunHost.cs

@@ -302,7 +302,7 @@ namespace Emby.Server.Implementations.LiveTv.TunerHosts.HdHomerun
 
             var hdHomerunChannelInfo = channels.FirstOrDefault() as HdHomerunChannelInfo;
 
-            if (hdHomerunChannelInfo == null || hdHomerunChannelInfo.IsLegacyTuner)
+            if (hdHomerunChannelInfo is null || hdHomerunChannelInfo.IsLegacyTuner)
             {
                 return await GetTunerInfosUdp(info, cancellationToken).ConfigureAwait(false);
             }
@@ -503,7 +503,7 @@ namespace Emby.Server.Implementations.LiveTv.TunerHosts.HdHomerun
             {
                 var modelInfo = await GetModelInfo(tuner, false, cancellationToken).ConfigureAwait(false);
 
-                if (modelInfo != null && modelInfo.SupportsTranscoding)
+                if (modelInfo is not null && modelInfo.SupportsTranscoding)
                 {
                     if (tuner.AllowHWTranscoding)
                     {
@@ -560,7 +560,7 @@ namespace Emby.Server.Implementations.LiveTv.TunerHosts.HdHomerun
 
             var mediaSource = GetMediaSource(tunerHost, hdhrId, channel, profile);
 
-            if (hdhomerunChannel != null && hdhomerunChannel.IsLegacyTuner)
+            if (hdhomerunChannel is not null && hdhomerunChannel.IsLegacyTuner)
             {
                 return new HdHomerunUdpStream(
                     mediaSource,
@@ -674,7 +674,7 @@ namespace Emby.Server.Implementations.LiveTv.TunerHosts.HdHomerun
 
                             var info = await TryGetTunerHostInfo(deviceAddress, cancellationToken).ConfigureAwait(false);
 
-                            if (info != null)
+                            if (info is not null)
                             {
                                 list.Add(info);
                             }

+ 1 - 1
Emby.Server.Implementations/LiveTv/TunerHosts/HdHomerun/HdHomerunManager.cs

@@ -37,7 +37,7 @@ namespace Emby.Server.Implementations.LiveTv.TunerHosts.HdHomerun
         {
             using (var socket = _tcpClient)
             {
-                if (socket != null)
+                if (socket is not null)
                 {
                     _tcpClient = null;
 

+ 1 - 1
Emby.Server.Implementations/LiveTv/TunerHosts/LiveStream.cs

@@ -35,7 +35,7 @@ namespace Emby.Server.Implementations.LiveTv.TunerHosts
             EnableStreamSharing = true;
             UniqueId = Guid.NewGuid().ToString("N", CultureInfo.InvariantCulture);
 
-            if (tuner != null)
+            if (tuner is not null)
             {
                 TunerHostId = tuner.Id;
             }

+ 2 - 2
Emby.Server.Implementations/Localization/LocalizationManager.cs

@@ -329,14 +329,14 @@ namespace Emby.Server.Implementations.Localization
         {
             await using var stream = _assembly.GetManifestResourceStream(resourcePath);
             // If a Culture doesn't have a translation the stream will be null and it defaults to en-us further up the chain
-            if (stream == null)
+            if (stream is null)
             {
                 _logger.LogError("Missing translation/culture resource: {ResourcePath}", resourcePath);
                 return;
             }
 
             var dict = await JsonSerializer.DeserializeAsync<Dictionary<string, string>>(stream, _jsonOptions).ConfigureAwait(false);
-            if (dict == null)
+            if (dict is null)
             {
                 throw new InvalidOperationException($"Resource contains invalid data: '{stream}'");
             }

+ 1 - 1
Emby.Server.Implementations/MediaEncoder/EncodingManager.cs

@@ -71,7 +71,7 @@ namespace Emby.Server.Implementations.MediaEncoder
             }
 
             var libraryOptions = _libraryManager.GetLibraryOptions(video);
-            if (libraryOptions != null)
+            if (libraryOptions is not null)
             {
                 if (!libraryOptions.EnableChapterImageExtraction)
                 {

+ 2 - 2
Emby.Server.Implementations/Net/UdpSocket.cs

@@ -74,7 +74,7 @@ namespace Emby.Server.Implementations.Net
         private void OnReceiveSocketAsyncEventArgsCompleted(object sender, SocketAsyncEventArgs e)
         {
             var tcs = _currentReceiveTaskCompletionSource;
-            if (tcs != null)
+            if (tcs is not null)
             {
                 _currentReceiveTaskCompletionSource = null;
 
@@ -98,7 +98,7 @@ namespace Emby.Server.Implementations.Net
         private void OnSendSocketAsyncEventArgsCompleted(object sender, SocketAsyncEventArgs e)
         {
             var tcs = _currentSendTaskCompletionSource;
-            if (tcs != null)
+            if (tcs is not null)
             {
                 _currentSendTaskCompletionSource = null;
 

+ 3 - 3
Emby.Server.Implementations/Playlists/PlaylistManager.cs

@@ -70,7 +70,7 @@ namespace Emby.Server.Implementations.Playlists
 
             var folderName = _fileSystem.GetValidFilename(name);
             var parentFolder = GetPlaylistsFolder(Guid.Empty);
-            if (parentFolder == null)
+            if (parentFolder is null)
             {
                 throw new ArgumentException(nameof(parentFolder));
             }
@@ -81,7 +81,7 @@ namespace Emby.Server.Implementations.Playlists
                 {
                     var item = _libraryManager.GetItemById(itemId);
 
-                    if (item == null)
+                    if (item is null)
                     {
                         throw new ArgumentException("No item exists with the supplied Id");
                     }
@@ -183,7 +183,7 @@ namespace Emby.Server.Implementations.Playlists
 
         private List<BaseItem> GetPlaylistItems(IEnumerable<Guid> itemIds, string playlistMediaType, User user, DtoOptions options)
         {
-            var items = itemIds.Select(i => _libraryManager.GetItemById(i)).Where(i => i != null);
+            var items = itemIds.Select(i => _libraryManager.GetItemById(i)).Where(i => i is not null);
 
             return Playlist.GetPlaylistItems(playlistMediaType, items, user, options);
         }

+ 1 - 1
Emby.Server.Implementations/Playlists/PlaylistsFolder.cs

@@ -39,7 +39,7 @@ namespace Emby.Server.Implementations.Playlists
 
         protected override QueryResult<BaseItem> GetItemsInternal(InternalItemsQuery query)
         {
-            if (query.User == null)
+            if (query.User is null)
             {
                 query.Recursive = false;
                 return base.GetItemsInternal(query);

+ 9 - 9
Emby.Server.Implementations/Plugins/PluginManager.cs

@@ -174,7 +174,7 @@ namespace Emby.Server.Implementations.Plugins
             foreach (var pluginServiceRegistrator in _appHost.GetExportTypes<IPluginServiceRegistrator>())
             {
                 var plugin = GetPluginByAssembly(pluginServiceRegistrator.Assembly);
-                if (plugin == null)
+                if (plugin is null)
                 {
                     _logger.LogError("Unable to find plugin in assembly {Assembly}", pluginServiceRegistrator.Assembly.FullName);
                     continue;
@@ -263,12 +263,12 @@ namespace Emby.Server.Implementations.Plugins
         {
             LocalPlugin? plugin;
 
-            if (version == null)
+            if (version is null)
             {
                 // If no version is given, return the current instance.
                 var plugins = _plugins.Where(p => p.Id.Equals(id)).ToList();
 
-                plugin = plugins.FirstOrDefault(p => p.Instance != null) ?? plugins.OrderByDescending(p => p.Version).FirstOrDefault();
+                plugin = plugins.FirstOrDefault(p => p.Instance is not null) ?? plugins.OrderByDescending(p => p.Version).FirstOrDefault();
             }
             else
             {
@@ -320,7 +320,7 @@ namespace Emby.Server.Implementations.Plugins
             ArgumentNullException.ThrowIfNull(assembly);
 
             var plugin = _plugins.FirstOrDefault(p => p.DllFiles.Contains(assembly.Location));
-            if (plugin == null)
+            if (plugin is null)
             {
                 // A plugin's assembly didn't cause this issue, so ignore it.
                 return;
@@ -442,7 +442,7 @@ namespace Emby.Server.Implementations.Plugins
                 _logger.LogDebug("Creating instance of {Type}", type);
                 // _appHost.ServiceProvider is already assigned when we create the plugins
                 var instance = (IPlugin)ActivatorUtilities.CreateInstance(_appHost.ServiceProvider!, type);
-                if (plugin == null)
+                if (plugin is null)
                 {
                     // Create a dummy record for the providers.
                     // TODO: remove this code once all provided have been released as separate plugins.
@@ -500,7 +500,7 @@ namespace Emby.Server.Implementations.Plugins
 #pragma warning restore CA1031 // Do not catch general exception types
             {
                 _logger.LogError(ex, "Error creating {Type}", type.FullName);
-                if (plugin != null)
+                if (plugin is not null)
                 {
                     if (ChangePluginState(plugin, PluginStatus.Malfunctioned))
                     {
@@ -523,7 +523,7 @@ namespace Emby.Server.Implementations.Plugins
 
             var predecessor = _plugins.OrderByDescending(p => p.Version)
                 .FirstOrDefault(p => p.Id.Equals(plugin.Id) && p.IsEnabledAndSupported && p.Version != plugin.Version);
-            if (predecessor != null)
+            if (predecessor is not null)
             {
                 return;
             }
@@ -577,7 +577,7 @@ namespace Emby.Server.Implementations.Plugins
                     _logger.LogError(ex, "Error deserializing {Json}.", Encoding.UTF8.GetString(data!));
                 }
 
-                if (manifest != null)
+                if (manifest is not null)
                 {
                     if (!Version.TryParse(manifest.TargetAbi, out var targetAbi))
                     {
@@ -711,7 +711,7 @@ namespace Emby.Server.Implementations.Plugins
                     && p.IsEnabledAndSupported
                     && p.Version != plugin.Version);
 
-            if (previousVersion == null)
+            if (previousVersion is null)
             {
                 // This value is memory only - so that the web will show restart required.
                 plugin.Manifest.Status = PluginStatus.Restart;

+ 11 - 11
Emby.Server.Implementations/ScheduledTasks/ScheduledTaskWorker.cs

@@ -128,7 +128,7 @@ namespace Emby.Server.Implementations.ScheduledTasks
 
                 lock (_lastExecutionResultSyncLock)
                 {
-                    if (_lastExecutionResult == null && !_readFromFile)
+                    if (_lastExecutionResult is null && !_readFromFile)
                     {
                         if (File.Exists(path))
                         {
@@ -211,7 +211,7 @@ namespace Emby.Server.Implementations.ScheduledTasks
         {
             get
             {
-                if (CurrentCancellationTokenSource != null)
+                if (CurrentCancellationTokenSource is not null)
                 {
                     return CurrentCancellationTokenSource.IsCancellationRequested
                                ? TaskState.Cancelling
@@ -240,7 +240,7 @@ namespace Emby.Server.Implementations.ScheduledTasks
                 ArgumentNullException.ThrowIfNull(value);
 
                 // Cleanup current triggers
-                if (_triggers != null)
+                if (_triggers is not null)
                 {
                     DisposeTriggers();
                 }
@@ -269,7 +269,7 @@ namespace Emby.Server.Implementations.ScheduledTasks
                 ArgumentNullException.ThrowIfNull(value);
 
                 // This null check is not great, but is needed to handle bad user input, or user mucking with the config file incorrectly
-                var triggerList = value.Where(i => i != null).ToArray();
+                var triggerList = value.Where(i => i is not null).ToArray();
 
                 SaveTriggers(triggerList);
 
@@ -369,7 +369,7 @@ namespace Emby.Server.Implementations.ScheduledTasks
         private async Task ExecuteInternal(TaskOptions options)
         {
             // Cancel the current execution, if any
-            if (CurrentCancellationTokenSource != null)
+            if (CurrentCancellationTokenSource is not null)
             {
                 throw new InvalidOperationException("Cannot execute a Task that is already running");
             }
@@ -391,7 +391,7 @@ namespace Emby.Server.Implementations.ScheduledTasks
 
             try
             {
-                if (options != null && options.MaxRuntimeTicks.HasValue)
+                if (options is not null && options.MaxRuntimeTicks.HasValue)
                 {
                     CurrentCancellationTokenSource.CancelAfter(TimeSpan.FromTicks(options.MaxRuntimeTicks.Value));
                 }
@@ -507,7 +507,7 @@ namespace Emby.Server.Implementations.ScheduledTasks
         private Tuple<TaskTriggerInfo, ITaskTrigger>[] LoadTriggers()
         {
             // This null check is not great, but is needed to handle bad user input, or user mucking with the config file incorrectly
-            var settings = LoadTriggerSettings().Where(i => i != null).ToArray();
+            var settings = LoadTriggerSettings().Where(i => i is not null).ToArray();
 
             return settings.Select(i => new Tuple<TaskTriggerInfo, ITaskTrigger>(i, GetTrigger(i))).ToArray();
         }
@@ -583,7 +583,7 @@ namespace Emby.Server.Implementations.ScheduledTasks
 
             result.Key = ScheduledTask.Key;
 
-            if (ex != null)
+            if (ex is not null)
             {
                 result.ErrorMessage = ex.Message;
                 result.LongErrorMessage = ex.StackTrace;
@@ -617,7 +617,7 @@ namespace Emby.Server.Implementations.ScheduledTasks
                 var startTime = CurrentExecutionStartTime;
 
                 var token = CurrentCancellationTokenSource;
-                if (token != null)
+                if (token is not null)
                 {
                     try
                     {
@@ -631,7 +631,7 @@ namespace Emby.Server.Implementations.ScheduledTasks
                 }
 
                 var task = _currentTask;
-                if (task != null)
+                if (task is not null)
                 {
                     try
                     {
@@ -653,7 +653,7 @@ namespace Emby.Server.Implementations.ScheduledTasks
                     }
                 }
 
-                if (token != null)
+                if (token is not null)
                 {
                     try
                     {

+ 3 - 3
Emby.Server.Implementations/ScheduledTasks/TaskManager.cs

@@ -94,7 +94,7 @@ namespace Emby.Server.Implementations.ScheduledTasks
         {
             var scheduledTask = ScheduledTasks.FirstOrDefault(t => t.ScheduledTask.GetType() == typeof(T));
 
-            if (scheduledTask == null)
+            if (scheduledTask is null)
             {
                 _logger.LogError("Unable to find scheduled task of type {0} in QueueScheduledTask.", typeof(T).Name);
             }
@@ -126,7 +126,7 @@ namespace Emby.Server.Implementations.ScheduledTasks
         {
             var scheduledTask = ScheduledTasks.FirstOrDefault(t => t.ScheduledTask.GetType() == typeof(T));
 
-            if (scheduledTask == null)
+            if (scheduledTask is null)
             {
                 _logger.LogError("Unable to find scheduled task of type {0} in Execute.", typeof(T).Name);
             }
@@ -155,7 +155,7 @@ namespace Emby.Server.Implementations.ScheduledTasks
         {
             var scheduledTask = ScheduledTasks.FirstOrDefault(t => t.ScheduledTask.GetType() == task.GetType());
 
-            if (scheduledTask == null)
+            if (scheduledTask is null)
             {
                 _logger.LogError("Unable to find scheduled task of type {0} in QueueScheduledTask.", task.GetType().Name);
             }

+ 1 - 1
Emby.Server.Implementations/ScheduledTasks/Tasks/ChapterImagesTask.cs

@@ -151,7 +151,7 @@ namespace Emby.Server.Implementations.ScheduledTasks.Tasks
                         previouslyFailedImages.Add(key);
 
                         var parentPath = Path.GetDirectoryName(failHistoryPath);
-                        if (parentPath != null)
+                        if (parentPath is not null)
                         {
                             Directory.CreateDirectory(parentPath);
                         }

+ 2 - 2
Emby.Server.Implementations/ScheduledTasks/Triggers/IntervalTrigger.cs

@@ -50,7 +50,7 @@ namespace Emby.Server.Implementations.ScheduledTasks.Triggers
 
             DateTime triggerDate;
 
-            if (lastResult == null)
+            if (lastResult is null)
             {
                 // Task has never been completed before
                 triggerDate = DateTime.UtcNow.AddHours(1);
@@ -100,7 +100,7 @@ namespace Emby.Server.Implementations.ScheduledTasks.Triggers
         {
             DisposeTimer();
 
-            if (Triggered != null)
+            if (Triggered is not null)
             {
                 _lastStartDate = DateTime.UtcNow;
                 Triggered(this, EventArgs.Empty);

+ 38 - 38
Emby.Server.Implementations/Session/SessionManager.cs

@@ -200,7 +200,7 @@ namespace Emby.Server.Implementations.Session
             {
                 var capabilities = _deviceManager.GetCapabilities(info.DeviceId);
 
-                if (capabilities != null)
+                if (capabilities is not null)
                 {
                     ReportCapabilities(info, capabilities, false);
                 }
@@ -238,7 +238,7 @@ namespace Emby.Server.Implementations.Session
         public void UpdateDeviceName(string sessionId, string reportedDeviceName)
         {
             var session = GetSession(sessionId);
-            if (session != null)
+            if (session is not null)
             {
                 session.DeviceName = reportedDeviceName;
             }
@@ -284,7 +284,7 @@ namespace Emby.Server.Implementations.Session
             var lastActivityDate = session.LastActivityDate;
             session.LastActivityDate = activityDate;
 
-            if (user != null)
+            if (user is not null)
             {
                 var userLastActivityDate = user.LastActivityDate ?? DateTime.MinValue;
 
@@ -351,7 +351,7 @@ namespace Emby.Server.Implementations.Session
             CheckDisposed();
             var session = GetSession(sessionId, false);
 
-            if (session != null)
+            if (session is not null)
             {
                 var key = GetSessionKey(session.Client, session.DeviceId);
 
@@ -377,11 +377,11 @@ namespace Emby.Server.Implementations.Session
                 info.MediaSourceId = info.ItemId.ToString("N", CultureInfo.InvariantCulture);
             }
 
-            if (!info.ItemId.Equals(default) && info.Item == null && libraryItem != null)
+            if (!info.ItemId.Equals(default) && info.Item is null && libraryItem is not null)
             {
                 var current = session.NowPlayingItem;
 
-                if (current == null || !info.ItemId.Equals(current.Id))
+                if (current is null || !info.ItemId.Equals(current.Id))
                 {
                     var runtimeTicks = libraryItem.RunTimeTicks;
 
@@ -390,7 +390,7 @@ namespace Emby.Server.Implementations.Session
                     {
                         mediaSource = await GetMediaSource(libraryItem, info.MediaSourceId, info.LiveStreamId).ConfigureAwait(false);
 
-                        if (mediaSource != null)
+                        if (mediaSource is not null)
                         {
                             runtimeTicks = mediaSource.RunTimeTicks;
                         }
@@ -495,7 +495,7 @@ namespace Emby.Server.Implementations.Session
 
             sessionInfo.UserId = user?.Id ?? Guid.Empty;
             sessionInfo.UserName = user?.Username;
-            sessionInfo.UserPrimaryImageTag = user?.ProfileImage == null ? null : GetImageCacheTag(user);
+            sessionInfo.UserPrimaryImageTag = user?.ProfileImage is null ? null : GetImageCacheTag(user);
             sessionInfo.RemoteEndPoint = remoteEndPoint;
             sessionInfo.Client = appName;
 
@@ -506,7 +506,7 @@ namespace Emby.Server.Implementations.Session
 
             sessionInfo.ApplicationVersion = appVersion;
 
-            if (user == null)
+            if (user is null)
             {
                 sessionInfo.AdditionalUsers = Array.Empty<SessionUserInfo>();
             }
@@ -536,7 +536,7 @@ namespace Emby.Server.Implementations.Session
 
             sessionInfo.UserId = user?.Id ?? Guid.Empty;
             sessionInfo.UserName = username;
-            sessionInfo.UserPrimaryImageTag = user?.ProfileImage == null ? null : GetImageCacheTag(user);
+            sessionInfo.UserPrimaryImageTag = user?.ProfileImage is null ? null : GetImageCacheTag(user);
             sessionInfo.RemoteEndPoint = remoteEndPoint;
 
             if (string.IsNullOrEmpty(deviceName))
@@ -570,7 +570,7 @@ namespace Emby.Server.Implementations.Session
 
             var user = _userManager.GetUserById(session.UserId);
 
-            if (user == null)
+            if (user is null)
             {
                 throw new InvalidOperationException("User not found");
             }
@@ -579,7 +579,7 @@ namespace Emby.Server.Implementations.Session
 
             users.AddRange(session.AdditionalUsers
                 .Select(i => _userManager.GetUserById(i.UserId))
-                .Where(i => i != null));
+                .Where(i => i is not null));
 
             return users;
         }
@@ -591,7 +591,7 @@ namespace Emby.Server.Implementations.Session
 
         private void StopIdleCheckTimer()
         {
-            if (_idleTimer != null)
+            if (_idleTimer is not null)
             {
                 _idleTimer.Dispose();
                 _idleTimer = null;
@@ -600,7 +600,7 @@ namespace Emby.Server.Implementations.Session
 
         private async void CheckForIdlePlayback(object state)
         {
-            var playingSessions = Sessions.Where(i => i.NowPlayingItem != null)
+            var playingSessions = Sessions.Where(i => i.NowPlayingItem is not null)
                 .ToList();
 
             if (playingSessions.Count > 0)
@@ -618,7 +618,7 @@ namespace Emby.Server.Implementations.Session
                         await OnPlaybackStopped(new PlaybackStopInfo
                         {
                             Item = session.NowPlayingItem,
-                            ItemId = session.NowPlayingItem == null ? Guid.Empty : session.NowPlayingItem.Id,
+                            ItemId = session.NowPlayingItem is null ? Guid.Empty : session.NowPlayingItem.Id,
                             SessionId = session.Id,
                             MediaSourceId = session.PlayState?.MediaSourceId,
                             PositionTicks = session.PlayState?.PositionTicks
@@ -630,7 +630,7 @@ namespace Emby.Server.Implementations.Session
                     }
                 }
 
-                playingSessions = Sessions.Where(i => i.NowPlayingItem != null)
+                playingSessions = Sessions.Where(i => i.NowPlayingItem is not null)
                     .ToList();
             }
 
@@ -643,7 +643,7 @@ namespace Emby.Server.Implementations.Session
         private BaseItem GetNowPlayingItem(SessionInfo session, Guid itemId)
         {
             var item = session.FullNowPlayingItem;
-            if (item != null && item.Id.Equals(itemId))
+            if (item is not null && item.Id.Equals(itemId))
             {
                 return item;
             }
@@ -684,7 +684,7 @@ namespace Emby.Server.Implementations.Session
 
             var users = GetUsers(session);
 
-            if (libraryItem != null)
+            if (libraryItem is not null)
             {
                 foreach (var user in users)
                 {
@@ -777,7 +777,7 @@ namespace Emby.Server.Implementations.Session
             var users = GetUsers(session);
 
             // only update saved user data on actual check-ins, not automated ones
-            if (libraryItem != null && !isAutomated)
+            if (libraryItem is not null && !isAutomated)
             {
                 foreach (var user in users)
                 {
@@ -912,11 +912,11 @@ namespace Emby.Server.Implementations.Session
                 info.MediaSourceId = info.ItemId.ToString("N", CultureInfo.InvariantCulture);
             }
 
-            if (!info.ItemId.Equals(default) && info.Item == null && libraryItem != null)
+            if (!info.ItemId.Equals(default) && info.Item is null && libraryItem is not null)
             {
                 var current = session.NowPlayingItem;
 
-                if (current == null || !info.ItemId.Equals(current.Id))
+                if (current is null || !info.ItemId.Equals(current.Id))
                 {
                     MediaSourceInfo mediaSource = null;
 
@@ -933,7 +933,7 @@ namespace Emby.Server.Implementations.Session
                 }
             }
 
-            if (info.Item != null)
+            if (info.Item is not null)
             {
                 var msString = info.PositionTicks.HasValue ? (info.PositionTicks.Value / 10000).ToString(CultureInfo.InvariantCulture) : "unknown";
 
@@ -945,7 +945,7 @@ namespace Emby.Server.Implementations.Session
                     msString);
             }
 
-            if (info.NowPlayingQueue != null)
+            if (info.NowPlayingQueue is not null)
             {
                 session.NowPlayingQueue = info.NowPlayingQueue;
             }
@@ -957,7 +957,7 @@ namespace Emby.Server.Implementations.Session
             var users = GetUsers(session);
             var playedToCompletion = false;
 
-            if (libraryItem != null)
+            if (libraryItem is not null)
             {
                 foreach (var user in users)
                 {
@@ -1037,7 +1037,7 @@ namespace Emby.Server.Implementations.Session
         private SessionInfo GetSession(string sessionId, bool throwOnMissing = true)
         {
             var session = Sessions.FirstOrDefault(i => string.Equals(i.Id, sessionId, StringComparison.Ordinal));
-            if (session == null && throwOnMissing)
+            if (session is null && throwOnMissing)
             {
                 throw new ResourceNotFoundException(
                     string.Format(CultureInfo.InvariantCulture, "Session {0} not found.", sessionId));
@@ -1051,7 +1051,7 @@ namespace Emby.Server.Implementations.Session
             // Accept either device id or session id
             var session = Sessions.FirstOrDefault(i => string.Equals(i.Id, sessionId, StringComparison.Ordinal));
 
-            if (session == null)
+            if (session is null)
             {
                 throw new ResourceNotFoundException(
                     string.Format(CultureInfo.InvariantCulture, "Session {0} not found.", sessionId));
@@ -1164,7 +1164,7 @@ namespace Emby.Server.Implementations.Session
 
             command.ItemIds = items.Select(i => i.Id).ToArray();
 
-            if (user != null)
+            if (user is not null)
             {
                 if (items.Any(i => i.GetPlayAccess(user) != PlayAccess.Full))
                 {
@@ -1173,13 +1173,13 @@ namespace Emby.Server.Implementations.Session
                 }
             }
 
-            if (user != null
+            if (user is not null
                 && command.ItemIds.Length == 1
                 && user.EnableNextEpisodeAutoPlay
                 && _libraryManager.GetItemById(command.ItemIds[0]) is Episode episode)
             {
                 var series = episode.Series;
-                if (series != null)
+                if (series is not null)
                 {
                     var episodes = series.GetEpisodes(
                             user,
@@ -1231,7 +1231,7 @@ namespace Emby.Server.Implementations.Session
         {
             var item = _libraryManager.GetItemById(id);
 
-            if (item == null)
+            if (item is null)
             {
                 _logger.LogError("A non-existent item Id {0} was passed into TranslateItemForPlayback", id);
                 return Array.Empty<BaseItem>();
@@ -1284,7 +1284,7 @@ namespace Emby.Server.Implementations.Session
         {
             var item = _libraryManager.GetItemById(id);
 
-            if (item == null)
+            if (item is null)
             {
                 _logger.LogError("A non-existent item Id {0} was passed into TranslateItemForInstantMix", id);
                 return new List<BaseItem>();
@@ -1429,7 +1429,7 @@ namespace Emby.Server.Implementations.Session
 
             var user = session.AdditionalUsers.FirstOrDefault(i => i.UserId.Equals(userId));
 
-            if (user != null)
+            if (user is not null)
             {
                 var list = session.AdditionalUsers.ToList();
                 list.Remove(user);
@@ -1480,7 +1480,7 @@ namespace Emby.Server.Implementations.Session
                     true).ConfigureAwait(false);
             }
 
-            if (user == null)
+            if (user is null)
             {
                 AuthenticationFailed?.Invoke(this, new GenericEventArgs<AuthenticationRequest>(request));
                 throw new AuthenticationException("Invalid username or password entered.");
@@ -1541,7 +1541,7 @@ namespace Emby.Server.Implementations.Session
 
             foreach (var auth in allExistingForDevice)
             {
-                if (existing == null || !string.Equals(auth.AccessToken, existing.AccessToken, StringComparison.Ordinal))
+                if (existing is null || !string.Equals(auth.AccessToken, existing.AccessToken, StringComparison.Ordinal))
                 {
                     try
                     {
@@ -1554,7 +1554,7 @@ namespace Emby.Server.Implementations.Session
                 }
             }
 
-            if (existing != null)
+            if (existing is not null)
             {
                 _logger.LogInformation("Reissuing access token: {Token}", existing.AccessToken);
                 return existing.AccessToken;
@@ -1677,7 +1677,7 @@ namespace Emby.Server.Implementations.Session
 
             var dtoOptions = _itemInfoDtoOptions;
 
-            if (_itemInfoDtoOptions == null)
+            if (_itemInfoDtoOptions is null)
             {
                 dtoOptions = new DtoOptions
                 {
@@ -1720,7 +1720,7 @@ namespace Emby.Server.Implementations.Session
 
             var info = _dtoService.GetBaseItemDto(item, dtoOptions);
 
-            if (mediaSource != null)
+            if (mediaSource is not null)
             {
                 info.MediaStreams = mediaSource.MediaStreams.ToArray();
             }
@@ -1761,7 +1761,7 @@ namespace Emby.Server.Implementations.Session
             var session = Sessions.FirstOrDefault(i =>
                 string.Equals(i.DeviceId, deviceId, StringComparison.OrdinalIgnoreCase));
 
-            if (session != null)
+            if (session is not null)
             {
                 session.TranscodingInfo = info;
             }

+ 3 - 3
Emby.Server.Implementations/Session/SessionWebSocketListener.cs

@@ -94,7 +94,7 @@ namespace Emby.Server.Implementations.Session
         public async Task ProcessWebSocketConnectedAsync(IWebSocketConnection connection, HttpContext httpContext)
         {
             var session = await GetSession(httpContext, connection.RemoteEndPoint?.ToString()).ConfigureAwait(false);
-            if (session != null)
+            if (session is not null)
             {
                 EnsureController(session, connection);
                 await KeepAliveWebSocket(connection).ConfigureAwait(false);
@@ -202,7 +202,7 @@ namespace Emby.Server.Implementations.Session
         {
             lock (_keepAliveLock)
             {
-                if (_keepAliveCancellationToken == null)
+                if (_keepAliveCancellationToken is null)
                 {
                     _keepAliveCancellationToken = new CancellationTokenSource();
                     // Start KeepAlive watcher
@@ -221,7 +221,7 @@ namespace Emby.Server.Implementations.Session
         {
             lock (_keepAliveLock)
             {
-                if (_keepAliveCancellationToken != null)
+                if (_keepAliveCancellationToken is not null)
                 {
                     _keepAliveCancellationToken.Cancel();
                     _keepAliveCancellationToken.Dispose();

+ 1 - 1
Emby.Server.Implementations/Session/WebSocketController.cs

@@ -73,7 +73,7 @@ namespace Emby.Server.Implementations.Session
                 .OrderByDescending(i => i.LastActivityDate)
                 .FirstOrDefault();
 
-            if (socket == null)
+            if (socket is null)
             {
                 return Task.CompletedTask;
             }

+ 3 - 3
Emby.Server.Implementations/Sorting/AiredEpisodeOrderComparer.cs

@@ -31,9 +31,9 @@ namespace Emby.Server.Implementations.Sorting
             var episode1 = x as Episode;
             var episode2 = y as Episode;
 
-            if (episode1 == null)
+            if (episode1 is null)
             {
-                if (episode2 == null)
+                if (episode2 is null)
                 {
                     return 0;
                 }
@@ -41,7 +41,7 @@ namespace Emby.Server.Implementations.Sorting
                 return 1;
             }
 
-            if (episode2 == null)
+            if (episode2 is null)
             {
                 return -1;
             }

+ 1 - 1
Emby.Server.Implementations/Sorting/DatePlayedComparer.cs

@@ -58,7 +58,7 @@ namespace Emby.Server.Implementations.Sorting
         {
             var userdata = UserDataRepository.GetUserData(User, x);
 
-            if (userdata != null && userdata.LastPlayedDate.HasValue)
+            if (userdata is not null && userdata.LastPlayedDate.HasValue)
             {
                 return userdata.LastPlayedDate.Value;
             }

+ 1 - 1
Emby.Server.Implementations/Sorting/PlayCountComparer.cs

@@ -57,7 +57,7 @@ namespace Emby.Server.Implementations.Sorting
         {
             var userdata = UserDataRepository.GetUserData(User, x);
 
-            return userdata == null ? 0 : userdata.PlayCount;
+            return userdata is null ? 0 : userdata.PlayCount;
         }
     }
 }

+ 1 - 1
Emby.Server.Implementations/Sorting/PremiereDateComparer.cs

@@ -34,7 +34,7 @@ namespace Emby.Server.Implementations.Sorting
         /// <returns>DateTime.</returns>
         private static DateTime GetDate(BaseItem? x)
         {
-            if (x == null)
+            if (x is null)
             {
                 return DateTime.MinValue;
             }

+ 1 - 1
Emby.Server.Implementations/Sorting/ProductionYearComparer.cs

@@ -33,7 +33,7 @@ namespace Emby.Server.Implementations.Sorting
         /// <returns>DateTime.</returns>
         private static int GetValue(BaseItem? x)
         {
-            if (x == null)
+            if (x is null)
             {
                 return 0;
             }

+ 3 - 3
Emby.Server.Implementations/SyncPlay/Group.cs

@@ -197,7 +197,7 @@ namespace Emby.Server.Implementations.SyncPlay
         private bool HasAccessToQueue(User user, IReadOnlyList<Guid> queue)
         {
             // Check if queue is empty.
-            if (queue == null || queue.Count == 0)
+            if (queue is null || queue.Count == 0)
             {
                 return true;
             }
@@ -217,7 +217,7 @@ namespace Emby.Server.Implementations.SyncPlay
         private bool AllUsersHaveAccessToQueue(IReadOnlyList<Guid> queue)
         {
             // Check if queue is empty.
-            if (queue == null || queue.Count == 0)
+            if (queue is null || queue.Count == 0)
             {
                 return true;
             }
@@ -251,7 +251,7 @@ namespace Emby.Server.Implementations.SyncPlay
             GroupName = request.GroupName;
             AddSession(session);
 
-            var sessionIsPlayingAnItem = session.FullNowPlayingItem != null;
+            var sessionIsPlayingAnItem = session.FullNowPlayingItem is not null;
 
             RestartCurrentItem();
 

+ 11 - 11
Emby.Server.Implementations/SyncPlay/SyncPlayManager.cs

@@ -102,12 +102,12 @@ namespace Emby.Server.Implementations.SyncPlay
         /// <inheritdoc />
         public void NewGroup(SessionInfo session, NewGroupRequest request, CancellationToken cancellationToken)
         {
-            if (session == null)
+            if (session is null)
             {
                 throw new InvalidOperationException("Session is null!");
             }
 
-            if (request == null)
+            if (request is null)
             {
                 throw new InvalidOperationException("Request is null!");
             }
@@ -138,12 +138,12 @@ namespace Emby.Server.Implementations.SyncPlay
         /// <inheritdoc />
         public void JoinGroup(SessionInfo session, JoinGroupRequest request, CancellationToken cancellationToken)
         {
-            if (session == null)
+            if (session is null)
             {
                 throw new InvalidOperationException("Session is null!");
             }
 
-            if (request == null)
+            if (request is null)
             {
                 throw new InvalidOperationException("Request is null!");
             }
@@ -155,7 +155,7 @@ namespace Emby.Server.Implementations.SyncPlay
             {
                 _groups.TryGetValue(request.GroupId, out Group group);
 
-                if (group == null)
+                if (group is null)
                 {
                     _logger.LogWarning("Session {SessionId} tried to join group {GroupId} that does not exist.", session.Id, request.GroupId);
 
@@ -204,12 +204,12 @@ namespace Emby.Server.Implementations.SyncPlay
         /// <inheritdoc />
         public void LeaveGroup(SessionInfo session, LeaveGroupRequest request, CancellationToken cancellationToken)
         {
-            if (session == null)
+            if (session is null)
             {
                 throw new InvalidOperationException("Session is null!");
             }
 
-            if (request == null)
+            if (request is null)
             {
                 throw new InvalidOperationException("Request is null!");
             }
@@ -257,12 +257,12 @@ namespace Emby.Server.Implementations.SyncPlay
         /// <inheritdoc />
         public List<GroupInfoDto> ListGroups(SessionInfo session, ListGroupsRequest request)
         {
-            if (session == null)
+            if (session is null)
             {
                 throw new InvalidOperationException("Session is null!");
             }
 
-            if (request == null)
+            if (request is null)
             {
                 throw new InvalidOperationException("Request is null!");
             }
@@ -291,12 +291,12 @@ namespace Emby.Server.Implementations.SyncPlay
         /// <inheritdoc />
         public void HandleRequest(SessionInfo session, IGroupPlaybackRequest request, CancellationToken cancellationToken)
         {
-            if (session == null)
+            if (session is null)
             {
                 throw new InvalidOperationException("Session is null!");
             }
 
-            if (request == null)
+            if (request is null)
             {
                 throw new InvalidOperationException("Request is null!");
             }

部分文件因为文件数量过多而无法显示