Explorar o código

Fix more analyzer warnings

Bond_009 %!s(int64=6) %!d(string=hai) anos
pai
achega
a709cbdc64
Modificáronse 49 ficheiros con 290 adicións e 261 borrados
  1. 3 1
      Emby.Dlna/Api/DlnaServerService.cs
  2. 4 4
      Emby.Dlna/Didl/DidlBuilder.cs
  3. 3 3
      Emby.Dlna/DlnaManager.cs
  4. 1 1
      Emby.Dlna/Main/DlnaEntryPoint.cs
  5. 41 27
      Emby.Dlna/PlayTo/Device.cs
  6. 72 74
      Emby.Dlna/Server/DescriptionXmlBuilder.cs
  7. 2 2
      Emby.Drawing/ImageProcessor.cs
  8. 3 4
      Emby.IsoMounting/IsoMounter/LinuxIsoManager.cs
  9. 1 1
      Emby.Server.Implementations/AppBase/BaseConfigurationManager.cs
  10. 3 3
      Emby.Server.Implementations/Data/SqliteItemRepository.cs
  11. 3 3
      Emby.Server.Implementations/HttpClientManager/HttpClientManager.cs
  12. 1 1
      Emby.Server.Implementations/HttpServer/HttpResultFactory.cs
  13. 1 1
      Emby.Server.Implementations/Library/LibraryManager.cs
  14. 1 1
      Emby.Server.Implementations/LiveTv/EmbyTV/EmbyTV.cs
  15. 4 4
      Emby.Server.Implementations/LiveTv/LiveTvDtoService.cs
  16. 2 2
      Emby.Server.Implementations/Localization/LocalizationManager.cs
  17. 1 1
      Emby.Server.Implementations/Services/RequestHelper.cs
  18. 1 1
      Emby.Server.Implementations/Services/ServiceExec.cs
  19. 1 1
      Emby.Server.Implementations/Services/ServiceMethod.cs
  20. 5 5
      Emby.Server.Implementations/Services/ServicePath.cs
  21. 8 20
      Emby.Server.Implementations/Services/SwaggerService.cs
  22. 1 1
      Jellyfin.Drawing.Skia/StripCollageBuilder.cs
  23. 12 13
      Jellyfin.Server/SocketSharp/RequestMono.cs
  24. 31 10
      Jellyfin.Server/SocketSharp/WebSocketSharpRequest.cs
  25. 1 1
      MediaBrowser.Api/Images/ImageByNameService.cs
  26. 3 1
      MediaBrowser.Api/LiveTv/LiveTvService.cs
  27. 2 2
      MediaBrowser.Api/Playback/BaseStreamingService.cs
  28. 2 2
      MediaBrowser.Controller/Entities/BaseItem.cs
  29. 1 1
      MediaBrowser.Controller/Entities/Video.cs
  30. 8 8
      MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs
  31. 1 1
      MediaBrowser.LocalMetadata/Images/LocalImageProvider.cs
  32. 4 2
      MediaBrowser.LocalMetadata/Savers/BaseXmlSaver.cs
  33. 2 2
      MediaBrowser.MediaEncoding/Encoder/BaseEncoder.cs
  34. 12 12
      MediaBrowser.MediaEncoding/Subtitles/SsaParser.cs
  35. 11 11
      MediaBrowser.Model/Dlna/StreamInfo.cs
  36. 3 3
      MediaBrowser.Model/Entities/MediaStream.cs
  37. 1 1
      MediaBrowser.Model/Extensions/StringHelper.cs
  38. 6 3
      MediaBrowser.Model/MediaInfo/AudioCodec.cs
  39. 1 1
      MediaBrowser.Model/Net/MimeTypes.cs
  40. 2 2
      MediaBrowser.Providers/Manager/ImageSaver.cs
  41. 1 1
      MediaBrowser.Providers/Manager/ItemImageProvider.cs
  42. 1 1
      MediaBrowser.Providers/MediaInfo/SubtitleResolver.cs
  43. 1 1
      MediaBrowser.Providers/Movies/MovieDbProvider.cs
  44. 1 1
      MediaBrowser.Providers/Movies/MovieDbSearch.cs
  45. 3 3
      MediaBrowser.Providers/Subtitles/SubtitleManager.cs
  46. 3 3
      MediaBrowser.Providers/TV/TheTVDB/TvdbSeriesProvider.cs
  47. 13 12
      MediaBrowser.XbmcMetadata/Savers/BaseNfoSaver.cs
  48. 1 1
      SocketHttpListener/Ext.cs
  49. 1 1
      SocketHttpListener/Net/HttpListenerRequest.cs

+ 3 - 1
Emby.Dlna/Api/DlnaServerService.cs

@@ -236,7 +236,9 @@ namespace Emby.Dlna.Api
 
         public object Get(GetIcon request)
         {
-            var contentType = "image/" + Path.GetExtension(request.Filename).TrimStart('.').ToLower();
+            var contentType = "image/" + Path.GetExtension(request.Filename)
+                                            .TrimStart('.')
+                                            .ToLowerInvariant();
 
             var cacheLength = TimeSpan.FromDays(365);
             var cacheKey = Request.RawUrl.GetMD5();

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

@@ -265,7 +265,7 @@ namespace Emby.Dlna.Didl
                 // <sec:CaptionInfo sec:type="srt">http://192.168.1.3:9999/video.srt</sec:CaptionInfo>
 
                 writer.WriteStartElement("sec", "CaptionInfoEx", null);
-                writer.WriteAttributeString("sec", "type", null, info.Format.ToLower());
+                writer.WriteAttributeString("sec", "type", null, info.Format.ToLowerInvariant());
 
                 writer.WriteString(info.Url);
                 writer.WriteFullEndElement();
@@ -282,7 +282,7 @@ namespace Emby.Dlna.Didl
             else
             {
                 writer.WriteStartElement(string.Empty, "res", NS_DIDL);
-                var protocolInfo = string.Format("http-get:*:text/{0}:*", info.Format.ToLower());
+                var protocolInfo = string.Format("http-get:*:text/{0}:*", info.Format.ToLowerInvariant());
                 writer.WriteAttributeString("protocolInfo", protocolInfo);
 
                 writer.WriteString(info.Url);
@@ -844,7 +844,7 @@ namespace Emby.Dlna.Didl
             //    var type = types.FirstOrDefault(i => string.Equals(i, actor.Type, StringComparison.OrdinalIgnoreCase) || string.Equals(i, actor.Role, StringComparison.OrdinalIgnoreCase))
             //        ?? PersonType.Actor;
 
-            //    AddValue(writer, "upnp", type.ToLower(), actor.Name, NS_UPNP);
+            //    AddValue(writer, "upnp", type.ToLowerInvariant(), actor.Name, NS_UPNP);
 
             //    index++;
 
@@ -1147,7 +1147,7 @@ namespace Emby.Dlna.Didl
 
             if (stubType.HasValue)
             {
-                id = stubType.Value.ToString().ToLower() + "_" + id;
+                id = stubType.Value.ToString().ToLowerInvariant() + "_" + id;
             }
 
             return id;

+ 3 - 3
Emby.Dlna/DlnaManager.cs

@@ -300,7 +300,7 @@ namespace Emby.Dlna
 
                     profile = ReserializeProfile(tempProfile);
 
-                    profile.Id = path.ToLower().GetMD5().ToString("N");
+                    profile.Id = path.ToLowerInvariant().GetMD5().ToString("N");
 
                     _profiles[path] = new Tuple<InternalProfileInfo, DeviceProfile>(GetInternalProfileInfo(_fileSystem.GetFileInfo(path), type), profile);
 
@@ -352,7 +352,7 @@ namespace Emby.Dlna
 
                 Info = new DeviceProfileInfo
                 {
-                    Id = file.FullName.ToLower().GetMD5().ToString("N"),
+                    Id = file.FullName.ToLowerInvariant().GetMD5().ToString("N"),
                     Name = _fileSystem.GetFileNameWithoutExtension(file),
                     Type = type
                 }
@@ -506,7 +506,7 @@ namespace Emby.Dlna
                 ? ImageFormat.Png
                 : ImageFormat.Jpg;
 
-            var resource = GetType().Namespace + ".Images." + filename.ToLower();
+            var resource = GetType().Namespace + ".Images." + filename.ToLowerInvariant();
 
             return new ImageStream
             {

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

@@ -263,7 +263,7 @@ namespace Emby.Dlna.Main
 
                 var fullService = "urn:schemas-upnp-org:device:MediaServer:1";
 
-                _logger.LogInformation("Registering publisher for {0} on {1}", fullService, address.ToString());
+                _logger.LogInformation("Registering publisher for {0} on {1}", fullService, address);
 
                 var descriptorUri = "/dlna/" + udn + "/description.xml";
                 var uri = new Uri(_appHost.GetLocalApiUrl(address) + descriptorUri);

+ 41 - 27
Emby.Dlna/PlayTo/Device.cs

@@ -902,54 +902,75 @@ namespace Emby.Dlna.PlayTo
 
             var name = document.Descendants(uPnpNamespaces.ud.GetName("friendlyName")).FirstOrDefault();
             if (name != 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))
+            {
                 friendlyNames.Add(room.Value);
+            }
 
-            deviceProperties.Name = string.Join(" ", friendlyNames.ToArray());
+            deviceProperties.Name = string.Join(" ", friendlyNames);
 
             var model = document.Descendants(uPnpNamespaces.ud.GetName("modelName")).FirstOrDefault();
             if (model != null)
+            {
                 deviceProperties.ModelName = model.Value;
+            }
 
             var modelNumber = document.Descendants(uPnpNamespaces.ud.GetName("modelNumber")).FirstOrDefault();
             if (modelNumber != null)
+            {
                 deviceProperties.ModelNumber = modelNumber.Value;
+            }
 
             var uuid = document.Descendants(uPnpNamespaces.ud.GetName("UDN")).FirstOrDefault();
             if (uuid != null)
+            {
                 deviceProperties.UUID = uuid.Value;
+            }
 
             var manufacturer = document.Descendants(uPnpNamespaces.ud.GetName("manufacturer")).FirstOrDefault();
             if (manufacturer != null)
+            {
                 deviceProperties.Manufacturer = manufacturer.Value;
+            }
 
             var manufacturerUrl = document.Descendants(uPnpNamespaces.ud.GetName("manufacturerURL")).FirstOrDefault();
             if (manufacturerUrl != null)
+            {
                 deviceProperties.ManufacturerUrl = manufacturerUrl.Value;
+            }
 
             var presentationUrl = document.Descendants(uPnpNamespaces.ud.GetName("presentationURL")).FirstOrDefault();
             if (presentationUrl != null)
+            {
                 deviceProperties.PresentationUrl = presentationUrl.Value;
+            }
 
             var modelUrl = document.Descendants(uPnpNamespaces.ud.GetName("modelURL")).FirstOrDefault();
             if (modelUrl != null)
+            {
                 deviceProperties.ModelUrl = modelUrl.Value;
+            }
 
             var serialNumber = document.Descendants(uPnpNamespaces.ud.GetName("serialNumber")).FirstOrDefault();
             if (serialNumber != null)
+            {
                 deviceProperties.SerialNumber = serialNumber.Value;
+            }
 
             var modelDescription = document.Descendants(uPnpNamespaces.ud.GetName("modelDescription")).FirstOrDefault();
             if (modelDescription != null)
+            {
                 deviceProperties.ModelDescription = modelDescription.Value;
+            }
 
             deviceProperties.BaseUrl = string.Format("http://{0}:{1}", url.Host, url.Port);
 
             var icon = document.Descendants(uPnpNamespaces.ud.GetName("icon")).FirstOrDefault();
-
             if (icon != null)
             {
                 deviceProperties.Icon = CreateIcon(icon);
@@ -958,12 +979,16 @@ namespace Emby.Dlna.PlayTo
             foreach (var services in document.Descendants(uPnpNamespaces.ud.GetName("serviceList")))
             {
                 if (services == null)
+                {
                     continue;
+                }
 
                 var servicesList = services.Descendants(uPnpNamespaces.ud.GetName("service"));
 
                 if (servicesList == null)
+                {
                     continue;
+                }
 
                 foreach (var element in servicesList)
                 {
@@ -1065,13 +1090,10 @@ namespace Emby.Dlna.PlayTo
 
         private void OnPlaybackStart(uBaseObject mediaInfo)
         {
-            if (PlaybackStart != null)
+            PlaybackStart?.Invoke(this, new PlaybackStartEventArgs
             {
-                PlaybackStart.Invoke(this, new PlaybackStartEventArgs
-                {
-                    MediaInfo = mediaInfo
-                });
-            }
+                MediaInfo = mediaInfo
+            });
         }
 
         private void OnPlaybackProgress(uBaseObject mediaInfo)
@@ -1082,36 +1104,28 @@ namespace Emby.Dlna.PlayTo
                 return;
             }
 
-            if (PlaybackProgress != null)
+            PlaybackProgress?.Invoke(this, new PlaybackProgressEventArgs
             {
-                PlaybackProgress.Invoke(this, new PlaybackProgressEventArgs
-                {
-                    MediaInfo = mediaInfo
-                });
-            }
+                MediaInfo = mediaInfo
+            });
         }
 
         private void OnPlaybackStop(uBaseObject mediaInfo)
         {
-            if (PlaybackStopped != null)
+
+            PlaybackStopped?.Invoke(this, new PlaybackStoppedEventArgs
             {
-                PlaybackStopped.Invoke(this, new PlaybackStoppedEventArgs
-                {
-                    MediaInfo = mediaInfo
-                });
-            }
+                MediaInfo = mediaInfo
+            });
         }
 
         private void OnMediaChanged(uBaseObject old, uBaseObject newMedia)
         {
-            if (MediaChanged != null)
+            MediaChanged?.Invoke(this, new MediaChangedEventArgs
             {
-                MediaChanged.Invoke(this, new MediaChangedEventArgs
-                {
-                    OldMediaInfo = old,
-                    NewMediaInfo = newMedia
-                });
-            }
+                OldMediaInfo = old,
+                NewMediaInfo = newMedia
+            });
         }
 
         #region IDisposable

+ 72 - 74
Emby.Dlna/Server/DescriptionXmlBuilder.cs

@@ -107,19 +107,19 @@ namespace Emby.Dlna.Server
             '&'
         };
 
-        private static readonly string[] s_escapeStringPairs = new string[]
-{
-    "<",
-    "&lt;",
-    ">",
-    "&gt;",
-    "\"",
-    "&quot;",
-    "'",
-    "&apos;",
-    "&",
-    "&amp;"
-};
+        private static readonly string[] s_escapeStringPairs = new[]
+        {
+            "<",
+            "&lt;",
+            ">",
+            "&gt;",
+            "\"",
+            "&quot;",
+            "'",
+            "&apos;",
+            "&",
+            "&amp;"
+        };
 
         private static string GetEscapeSequence(char c)
         {
@@ -133,7 +133,7 @@ namespace Emby.Dlna.Server
                     return result;
                 }
             }
-            return c.ToString();
+            return c.ToString(CultureInfo.InvariantCulture);
         }
 
         /// <summary>Replaces invalid XML characters in a string with their valid XML equivalent.</summary>
@@ -145,6 +145,7 @@ namespace Emby.Dlna.Server
             {
                 return null;
             }
+
             StringBuilder stringBuilder = null;
             int length = str.Length;
             int num = 0;
@@ -230,9 +231,9 @@ namespace Emby.Dlna.Server
 
             var serverName = new string(characters);
 
-            var name = (_profile.FriendlyName ?? string.Empty).Replace("${HostName}", serverName, StringComparison.OrdinalIgnoreCase);
+            var name = _profile.FriendlyName?.Replace("${HostName}", serverName, StringComparison.OrdinalIgnoreCase);
 
-            return name;
+            return name ?? string.Empty;
         }
 
         private void AppendIconList(StringBuilder builder)
@@ -295,65 +296,62 @@ namespace Emby.Dlna.Server
         }
 
         private IEnumerable<DeviceIcon> GetIcons()
-        {
-            var list = new List<DeviceIcon>();
-
-            list.Add(new DeviceIcon
-            {
-                MimeType = "image/png",
-                Depth = "24",
-                Width = 240,
-                Height = 240,
-                Url = "icons/logo240.png"
-            });
-
-            list.Add(new DeviceIcon
-            {
-                MimeType = "image/jpeg",
-                Depth = "24",
-                Width = 240,
-                Height = 240,
-                Url = "icons/logo240.jpg"
-            });
-
-            list.Add(new DeviceIcon
-            {
-                MimeType = "image/png",
-                Depth = "24",
-                Width = 120,
-                Height = 120,
-                Url = "icons/logo120.png"
-            });
-
-            list.Add(new DeviceIcon
-            {
-                MimeType = "image/jpeg",
-                Depth = "24",
-                Width = 120,
-                Height = 120,
-                Url = "icons/logo120.jpg"
-            });
-
-            list.Add(new DeviceIcon
-            {
-                MimeType = "image/png",
-                Depth = "24",
-                Width = 48,
-                Height = 48,
-                Url = "icons/logo48.png"
-            });
-
-            list.Add(new DeviceIcon
+            => new[]
             {
-                MimeType = "image/jpeg",
-                Depth = "24",
-                Width = 48,
-                Height = 48,
-                Url = "icons/logo48.jpg"
-            });
-
-            return list;
-        }
+                new DeviceIcon
+                {
+                    MimeType = "image/png",
+                    Depth = "24",
+                    Width = 240,
+                    Height = 240,
+                    Url = "icons/logo240.png"
+                },
+
+                new DeviceIcon
+                {
+                    MimeType = "image/jpeg",
+                    Depth = "24",
+                    Width = 240,
+                    Height = 240,
+                    Url = "icons/logo240.jpg"
+                },
+
+                new DeviceIcon
+                {
+                    MimeType = "image/png",
+                    Depth = "24",
+                    Width = 120,
+                    Height = 120,
+                    Url = "icons/logo120.png"
+                },
+
+                new DeviceIcon
+                {
+                    MimeType = "image/jpeg",
+                    Depth = "24",
+                    Width = 120,
+                    Height = 120,
+                    Url = "icons/logo120.jpg"
+                },
+
+                new DeviceIcon
+                {
+                    MimeType = "image/png",
+                    Depth = "24",
+                    Width = 48,
+                    Height = 48,
+                    Url = "icons/logo48.png"
+                },
+
+                new DeviceIcon
+                {
+                    MimeType = "image/jpeg",
+                    Depth = "24",
+                    Width = 48,
+                    Height = 48,
+                    Url = "icons/logo48.jpg"
+                }
+            };
 
         private IEnumerable<DeviceService> GetServices()
         {

+ 2 - 2
Emby.Drawing/ImageProcessor.cs

@@ -144,7 +144,7 @@ namespace Emby.Drawing
 
         private static readonly string[] TransparentImageTypes = new string[] { ".png", ".webp", ".gif" };
         public bool SupportsTransparency(string path)
-            => TransparentImageTypes.Contains(Path.GetExtension(path).ToLower());
+            => TransparentImageTypes.Contains(Path.GetExtension(path).ToLowerInvariant());
 
         public async Task<(string path, string mimeType, DateTime dateModified)> ProcessImage(ImageProcessingOptions options)
         {
@@ -374,7 +374,7 @@ namespace Emby.Drawing
 
             filename += "v=" + Version;
 
-            return GetCachePath(ResizedImageCachePath, filename, "." + format.ToString().ToLower());
+            return GetCachePath(ResizedImageCachePath, filename, "." + format.ToString().ToLowerInvariant());
         }
 
         public ImageDimensions GetImageSize(BaseItem item, ItemImageInfo info)

+ 3 - 4
Emby.IsoMounting/IsoMounter/LinuxIsoManager.cs

@@ -121,7 +121,7 @@ namespace IsoMounter
                 path,
                 Path.GetExtension(path),
                 EnvironmentInfo.OperatingSystem,
-                ExecutablesAvailable.ToString()
+                ExecutablesAvailable
             );
 
             if (ExecutablesAvailable)
@@ -183,7 +183,7 @@ namespace IsoMounter
             _logger.LogInformation(
                 "[{0}] Disposing [{1}].",
                 Name,
-                disposing.ToString()
+                disposing
             );
 
             if (disposing)
@@ -229,9 +229,8 @@ namespace IsoMounter
             var uid = getuid();
 
             _logger.LogDebug(
-                "[{0}] Our current UID is [{1}], GetUserId() returned [{2}].",
+                "[{0}] GetUserId() returned [{2}].",
                 Name,
-                uid.ToString(),
                 uid
             );
 

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

@@ -218,7 +218,7 @@ namespace Emby.Server.Implementations.AppBase
 
         private string GetConfigurationFile(string key)
         {
-            return Path.Combine(CommonApplicationPaths.ConfigurationDirectoryPath, key.ToLower() + ".xml");
+            return Path.Combine(CommonApplicationPaths.ConfigurationDirectoryPath, key.ToLowerInvariant() + ".xml");
         }
 
         public object GetConfiguration(string key)

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

@@ -3905,7 +3905,7 @@ namespace Emby.Server.Implementations.Data
                 // lowercase this because SortName is stored as lowercase
                 if (statement != null)
                 {
-                    statement.TryBind("@NameStartsWithOrGreater", query.NameStartsWithOrGreater.ToLower());
+                    statement.TryBind("@NameStartsWithOrGreater", query.NameStartsWithOrGreater.ToLowerInvariant());
                 }
             }
             if (!string.IsNullOrWhiteSpace(query.NameLessThan))
@@ -3914,7 +3914,7 @@ namespace Emby.Server.Implementations.Data
                 // lowercase this because SortName is stored as lowercase
                 if (statement != null)
                 {
-                    statement.TryBind("@NameLessThan", query.NameLessThan.ToLower());
+                    statement.TryBind("@NameLessThan", query.NameLessThan.ToLowerInvariant());
                 }
             }
 
@@ -4822,7 +4822,7 @@ namespace Emby.Server.Implementations.Data
                 return value;
             }
 
-            return value.RemoveDiacritics().ToLower();
+            return value.RemoveDiacritics().ToLowerInvariant();
         }
 
         private bool EnableGroupByPresentationUniqueKey(InternalItemsQuery query)

+ 3 - 3
Emby.Server.Implementations/HttpClientManager/HttpClientManager.cs

@@ -264,7 +264,7 @@ namespace Emby.Server.Implementations.HttpClientManager
             }
 
             var url = options.Url;
-            var urlHash = url.ToLower().GetMD5().ToString("N");
+            var urlHash = url.ToLowerInvariant().GetMD5().ToString("N");
 
             var responseCachePath = Path.Combine(_appPaths.CachePath, "httpclient", urlHash);
 
@@ -384,11 +384,11 @@ namespace Emby.Server.Implementations.HttpClientManager
             {
                 if (options.LogRequestAsDebug)
                 {
-                    _logger.LogDebug("HttpClientManager {0}: {1}", httpMethod.ToUpper(), options.Url);
+                    _logger.LogDebug("HttpClientManager {0}: {1}", httpMethod.ToUpper(CultureInfo.CurrentCulture), options.Url);
                 }
                 else
                 {
-                    _logger.LogInformation("HttpClientManager {0}: {1}", httpMethod.ToUpper(), options.Url);
+                    _logger.LogInformation("HttpClientManager {0}: {1}", httpMethod.ToUpper(CultureInfo.CurrentCulture), options.Url);
                 }
             }
 

+ 1 - 1
Emby.Server.Implementations/HttpServer/HttpResultFactory.cs

@@ -394,7 +394,7 @@ namespace Emby.Server.Implementations.HttpServer
         {
             return contentType == null
                        ? null
-                       : contentType.Split(';')[0].ToLower().Trim();
+                       : contentType.Split(';')[0].ToLowerInvariant().Trim();
         }
 
         private static string SerializeToXmlString(object from)

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

@@ -517,7 +517,7 @@ namespace Emby.Server.Implementations.Library
 
             if (forceCaseInsensitive || !ConfigurationManager.Configuration.EnableCaseSensitiveItemIds)
             {
-                key = key.ToLower();
+                key = key.ToLowerInvariant();
             }
 
             key = type.FullName + key;

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

@@ -2193,7 +2193,7 @@ namespace Emby.Server.Implementations.LiveTv.EmbyTV
 
                     if (lockData)
                     {
-                        writer.WriteElementString("lockdata", true.ToString().ToLower());
+                        writer.WriteElementString("lockdata", true.ToString(CultureInfo.InvariantCulture).ToLowerInvariant());
                     }
 
                     if (item.CriticRating.HasValue)

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

@@ -399,7 +399,7 @@ namespace Emby.Server.Implementations.LiveTv
         {
             var name = serviceName + externalId + InternalVersionNumber;
 
-            return _libraryManager.GetNewItemId(name.ToLower(), typeof(LiveTvChannel));
+            return _libraryManager.GetNewItemId(name.ToLowerInvariant(), typeof(LiveTvChannel));
         }
 
         private const string ServiceName = "Emby";
@@ -407,21 +407,21 @@ namespace Emby.Server.Implementations.LiveTv
         {
             var name = ServiceName + externalId + InternalVersionNumber;
 
-            return name.ToLower().GetMD5().ToString("N");
+            return name.ToLowerInvariant().GetMD5().ToString("N");
         }
 
         public Guid GetInternalSeriesTimerId(string externalId)
         {
             var name = ServiceName + externalId + InternalVersionNumber;
 
-            return name.ToLower().GetMD5();
+            return name.ToLowerInvariant().GetMD5();
         }
 
         public Guid GetInternalProgramId(string externalId)
         {
             var name = ServiceName + externalId + InternalVersionNumber;
 
-            return _libraryManager.GetNewItemId(name.ToLower(), typeof(LiveTvProgram));
+            return _libraryManager.GetNewItemId(name.ToLowerInvariant(), typeof(LiveTvProgram));
         }
 
         public async Task<TimerInfo> GetTimerInfo(TimerInfoDto dto, bool isNew, LiveTvManager liveTv, CancellationToken cancellationToken)

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

@@ -492,11 +492,11 @@ namespace Emby.Server.Implementations.Localization
 
             if (parts.Length == 2)
             {
-                culture = parts[0].ToLower() + "-" + parts[1].ToUpper();
+                culture = parts[0].ToLowerInvariant() + "-" + parts[1].ToUpperInvariant();
             }
             else
             {
-                culture = culture.ToLower();
+                culture = culture.ToLowerInvariant();
             }
 
             return culture + ".json";

+ 1 - 1
Emby.Server.Implementations/Services/RequestHelper.cs

@@ -45,7 +45,7 @@ namespace Emby.Server.Implementations.Services
         {
             return contentType == null
                        ? null
-                       : contentType.Split(';')[0].ToLower().Trim();
+                       : contentType.Split(';')[0].ToLowerInvariant().Trim();
         }
 
     }

+ 1 - 1
Emby.Server.Implementations/Services/ServiceExec.cs

@@ -98,7 +98,7 @@ namespace Emby.Server.Implementations.Services
                 return Task.FromResult(response);
             }
 
-            var expectedMethodName = actionName.Substring(0, 1) + actionName.Substring(1).ToLower();
+            var expectedMethodName = actionName.Substring(0, 1) + actionName.Substring(1).ToLowerInvariant();
             throw new NotImplementedException(string.Format("Could not find method named {1}({0}) or Any({0}) on Service {2}", requestDto.GetType().GetMethodName(), expectedMethodName, serviceType.GetMethodName()));
         }
 

+ 1 - 1
Emby.Server.Implementations/Services/ServiceMethod.cs

@@ -11,7 +11,7 @@ namespace Emby.Server.Implementations.Services
 
         public static string Key(Type serviceType, string method, string requestDtoName)
         {
-            return serviceType.FullName + " " + method.ToUpper() + " " + requestDtoName;
+            return serviceType.FullName + " " + method.ToUpperInvariant() + " " + requestDtoName;
         }
     }
 }

+ 5 - 5
Emby.Server.Implementations/Services/ServicePath.cs

@@ -60,7 +60,7 @@ namespace Emby.Server.Implementations.Services
 
         public static string[] GetPathPartsForMatching(string pathInfo)
         {
-            return pathInfo.ToLower().Split(new[] { PathSeperatorChar }, StringSplitOptions.RemoveEmptyEntries);
+            return pathInfo.ToLowerInvariant().Split(new[] { PathSeperatorChar }, StringSplitOptions.RemoveEmptyEntries);
         }
 
         public static List<string> GetFirstMatchHashKeys(string[] pathPartsForMatching)
@@ -104,7 +104,7 @@ namespace Emby.Server.Implementations.Services
             this.Description = description;
             this.restPath = path;
 
-            this.Verbs = string.IsNullOrWhiteSpace(verbs) ? ServiceExecExtensions.AllVerbs : verbs.ToUpper().Split(new[] { ' ', ',' }, StringSplitOptions.RemoveEmptyEntries);
+            this.Verbs = string.IsNullOrWhiteSpace(verbs) ? ServiceExecExtensions.AllVerbs : verbs.ToUpperInvariant().Split(new[] { ' ', ',' }, StringSplitOptions.RemoveEmptyEntries);
 
             var componentsList = new List<string>();
 
@@ -154,7 +154,7 @@ namespace Emby.Server.Implementations.Services
                 }
                 else
                 {
-                    this.literalsToMatch[i] = component.ToLower();
+                    this.literalsToMatch[i] = component.ToLowerInvariant();
 
                     if (firstLiteralMatch == null)
                     {
@@ -189,7 +189,7 @@ namespace Emby.Server.Implementations.Services
             foreach (var propertyInfo in GetSerializableProperties(RequestType))
             {
                 var propertyName = propertyInfo.Name;
-                propertyNamesMap.Add(propertyName.ToLower(), propertyName);
+                propertyNamesMap.Add(propertyName.ToLowerInvariant(), propertyName);
             }
         }
 
@@ -483,7 +483,7 @@ namespace Emby.Server.Implementations.Services
                     continue;
                 }
 
-                if (!this.propertyNamesMap.TryGetValue(variableName.ToLower(), out var propertyNameOnRequest))
+                if (!this.propertyNamesMap.TryGetValue(variableName.ToLowerInvariant(), out var propertyNameOnRequest))
                 {
                     if (string.Equals("ignore", variableName, StringComparison.OrdinalIgnoreCase))
                     {

+ 8 - 20
Emby.Server.Implementations/Services/SwaggerService.cs

@@ -216,40 +216,28 @@ namespace Emby.Server.Implementations.Services
             {
                 var responses = new Dictionary<string, SwaggerResponse>
                 {
+                    { "200", new SwaggerResponse { description = "OK" } }
                 };
 
-                responses["200"] = new SwaggerResponse
+                var apiKeySecurity = new Dictionary<string, string[]>
                 {
-                    description = "OK"
+                    { "api_key",  Array.Empty<string>() }
                 };
 
-                var security = new List<Dictionary<string, string[]>>();
-
-                var apiKeySecurity = new Dictionary<string, string[]>();
-                apiKeySecurity["api_key"] = Array.Empty<string>();
-
-                security.Add(apiKeySecurity);
-
-                result[verb.ToLower()] = new SwaggerMethod
+                result[verb.ToLowerInvariant()] = new SwaggerMethod
                 {
                     summary = info.Summary,
                     description = info.Description,
-                    produces = new[]
-                    {
-                        "application/json"
-                    },
-                    consumes = new[]
-                    {
-                        "application/json"
-                    },
+                    produces = new[] { "application/json" },
+                    consumes = new[] { "application/json" },
                     operationId = info.RequestType.Name,
                     tags = Array.Empty<string>(),
 
-                    parameters = new SwaggerParam[] { },
+                    parameters = Array.Empty<SwaggerParam>(),
 
                     responses = responses,
 
-                    security = security.ToArray()
+                    security = new [] { apiKeySecurity }
                 };
             }
 

+ 1 - 1
Jellyfin.Drawing.Skia/StripCollageBuilder.cs

@@ -25,7 +25,7 @@ namespace Jellyfin.Drawing.Skia
                 throw new ArgumentNullException(nameof(outputPath));
             }
 
-            var ext = Path.GetExtension(outputPath).ToLower();
+            var ext = Path.GetExtension(outputPath).ToLowerInvariant();
 
             if (ext == ".jpg" || ext == ".jpeg")
                 return SKEncodedImageFormat.Jpeg;

+ 12 - 13
Jellyfin.Server/SocketSharp/RequestMono.cs

@@ -360,13 +360,13 @@ namespace Jellyfin.SocketSharp
                     int len = buffer.Length;
                     if (dest_offset > len)
                     {
-                        throw new ArgumentException("destination offset is beyond array size");
+                        throw new ArgumentException("destination offset is beyond array size", nameof(dest_offset));
                     }
 
                     // reordered to avoid possible integer overflow
                     if (dest_offset > len - count)
                     {
-                        throw new ArgumentException("Reading would overrun buffer");
+                        throw new ArgumentException("Reading would overrun buffer", nameof(count));
                     }
 
                     if (count > end - position)
@@ -528,7 +528,7 @@ namespace Jellyfin.SocketSharp
             }
         }
 
-        class HttpMultipart
+        private class HttpMultipart
         {
 
             public class Element
@@ -543,19 +543,19 @@ namespace Jellyfin.SocketSharp
                 public override string ToString()
                 {
                     return "ContentType " + ContentType + ", Name " + Name + ", Filename " + Filename + ", Start " +
-                        Start.ToString() + ", Length " + Length.ToString();
+                        Start.ToString(CultureInfo.CurrentCulture) + ", Length " + Length.ToString(CultureInfo.CurrentCulture);
                 }
             }
 
-            Stream data;
-            string boundary;
-            byte[] boundary_bytes;
-            byte[] buffer;
-            bool at_eof;
-            Encoding encoding;
-            StringBuilder sb;
+            private Stream data;
+            private string boundary;
+            private byte[] boundary_bytes;
+            private byte[] buffer;
+            private bool at_eof;
+            private Encoding encoding;
+            private StringBuilder sb;
 
-            const byte LF = (byte)'\n', CR = (byte)'\r';
+            private const byte LF = (byte)'\n', CR = (byte)'\r';
 
             // See RFC 2046
             // In the case of multipart entities, in which one or more different
@@ -610,7 +610,6 @@ namespace Jellyfin.SocketSharp
                 }
 
                 return sb.ToString();
-
             }
 
             private static string GetContentDispositionAttribute(string l, string name)

+ 31 - 10
Jellyfin.Server/SocketSharp/WebSocketSharpRequest.cs

@@ -29,12 +29,24 @@ namespace Jellyfin.SocketSharp
 
         private static string GetHandlerPathIfAny(string listenerUrl)
         {
-            if (listenerUrl == null) return null;
+            if (listenerUrl == null)
+            {
+                return null;
+            }
+
             var pos = listenerUrl.IndexOf("://", StringComparison.OrdinalIgnoreCase);
-            if (pos == -1) return null;
+            if (pos == -1)
+            {
+                return null;
+            }
+
             var startHostUrl = listenerUrl.Substring(pos + "://".Length);
             var endPos = startHostUrl.IndexOf('/');
-            if (endPos == -1) return null;
+            if (endPos == -1)
+            {
+                return null;
+            }
+
             var endHostUrl = startHostUrl.Substring(endPos + 1);
             return string.IsNullOrEmpty(endHostUrl) ? null : endHostUrl.TrimEnd('/');
         }
@@ -210,9 +222,13 @@ namespace Jellyfin.SocketSharp
                 if (acceptsAnything)
                 {
                     if (hasDefaultContentType)
+                    {
                         return defaultContentType;
-                    if (serverDefaultContentType != null)
+                    }
+                    else if (serverDefaultContentType != null)
+                    {
                         return serverDefaultContentType;
+                    }
                 }
             }
 
@@ -229,11 +245,16 @@ namespace Jellyfin.SocketSharp
 
         public static bool HasAnyOfContentTypes(IRequest request, params string[] contentTypes)
         {
-            if (contentTypes == null || request.ContentType == null) return false;
+            if (contentTypes == null || request.ContentType == null)
+            {
+                return false;
+            }
+
             foreach (var contentType in contentTypes)
             {
                 if (IsContentType(request, contentType)) return true;
             }
+
             return false;
         }
 
@@ -264,12 +285,12 @@ namespace Jellyfin.SocketSharp
                 }
             }
 
-            format = LeftPart(format, '.').ToLower();
+            format = LeftPart(format, '.').ToLowerInvariant();
             if (format.Contains("json", StringComparison.OrdinalIgnoreCase))
             {
                 return "application/json";
             }
-            if (format.Contains("xml", StringComparison.OrdinalIgnoreCase))
+            else if (format.Contains("xml", StringComparison.OrdinalIgnoreCase))
             {
                 return "application/xml";
             }
@@ -283,10 +304,9 @@ namespace Jellyfin.SocketSharp
             {
                 return null;
             }
+
             var pos = strVal.IndexOf(needle);
-            return pos == -1
-                ? strVal
-                : strVal.Substring(0, pos);
+            return pos == -1 ? strVal : strVal.Substring(0, pos);
         }
 
         public static string HandlerFactoryPath;
@@ -433,6 +453,7 @@ namespace Jellyfin.SocketSharp
             {
                 return null;
             }
+
             try
             {
                 return Encoding.GetEncoding(param);

+ 1 - 1
MediaBrowser.Api/Images/ImageByNameService.cs

@@ -145,7 +145,7 @@ namespace MediaBrowser.Api.Images
                         Theme = supportsThemes ? GetThemeName(i.FullName, path) : null,
                         Context = supportsThemes ? null : GetThemeName(i.FullName, path),
 
-                        Format = i.Extension.ToLower().TrimStart('.')
+                        Format = i.Extension.ToLowerInvariant().TrimStart('.')
                     })
                     .OrderBy(i => i.Name)
                     .ToList();

+ 3 - 1
MediaBrowser.Api/LiveTv/LiveTvService.cs

@@ -875,7 +875,9 @@ namespace MediaBrowser.Api.LiveTv
         private string GetHashedString(string str)
         {
             // legacy
-            return BitConverter.ToString(_cryptographyProvider.ComputeSHA1(Encoding.UTF8.GetBytes(str))).Replace("-", string.Empty).ToLower();
+            return BitConverter.ToString(
+                _cryptographyProvider.ComputeSHA1(Encoding.UTF8.GetBytes(str)))
+                    .Replace("-", string.Empty).ToLowerInvariant();
         }
 
         public void Delete(DeleteListingProvider request)

+ 2 - 2
MediaBrowser.Api/Playback/BaseStreamingService.cs

@@ -135,10 +135,10 @@ namespace MediaBrowser.Api.Playback
 
             if (EnableOutputInSubFolder)
             {
-                return Path.Combine(folder, dataHash, dataHash + (outputFileExtension ?? string.Empty).ToLower());
+                return Path.Combine(folder, dataHash, dataHash + (outputFileExtension ?? string.Empty).ToLowerInvariant());
             }
 
-            return Path.Combine(folder, dataHash + (outputFileExtension ?? string.Empty).ToLower());
+            return Path.Combine(folder, dataHash + (outputFileExtension ?? string.Empty).ToLowerInvariant());
         }
 
         protected virtual bool EnableOutputInSubFolder => false;

+ 2 - 2
MediaBrowser.Controller/Entities/BaseItem.cs

@@ -614,7 +614,7 @@ namespace MediaBrowser.Controller.Entities
                     if (!string.IsNullOrEmpty(ForcedSortName))
                     {
                         // Need the ToLower because that's what CreateSortName does
-                        _sortName = ModifySortChunks(ForcedSortName).ToLower();
+                        _sortName = ModifySortChunks(ForcedSortName).ToLowerInvariant();
                     }
                     else
                     {
@@ -660,7 +660,7 @@ namespace MediaBrowser.Controller.Entities
                 return Name.TrimStart();
             }
 
-            var sortable = Name.Trim().ToLower();
+            var sortable = Name.Trim().ToLowerInvariant();
 
             foreach (var removeChar in ConfigurationManager.Configuration.SortRemoveCharacters)
             {

+ 1 - 1
MediaBrowser.Controller/Entities/Video.cs

@@ -305,7 +305,7 @@ namespace MediaBrowser.Controller.Entities
 
         private string GetUserDataKey(string providerId)
         {
-            var key = providerId + "-" + ExtraType.ToString().ToLower();
+            var key = providerId + "-" + ExtraType.ToString().ToLowerInvariant();
 
             // Make sure different trailers have their own data.
             if (RunTimeTicks.HasValue)

+ 8 - 8
MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs

@@ -136,7 +136,7 @@ namespace MediaBrowser.Controller.MediaEncoding
                     return "libtheora";
                 }
 
-                return codec.ToLower();
+                return codec.ToLowerInvariant();
             }
 
             return "copy";
@@ -405,7 +405,7 @@ namespace MediaBrowser.Controller.MediaEncoding
                 return "libopus";
             }
 
-            return codec.ToLower();
+            return codec.ToLowerInvariant();
         }
 
         /// <summary>
@@ -762,7 +762,7 @@ namespace MediaBrowser.Controller.MediaEncoding
             // vaapi does not support Baseline profile, force Constrained Baseline in this case,
             // which is compatible (and ugly)
             if (string.Equals(videoEncoder, "h264_vaapi", StringComparison.OrdinalIgnoreCase) &&
-                profile != null && profile.ToLower().Contains("baseline"))
+                profile != null && profile.ToLowerInvariant().Contains("baseline"))
             {
                     profile = "constrained_baseline";
             }
@@ -2175,7 +2175,7 @@ namespace MediaBrowser.Controller.MediaEncoding
             {
                 if (string.Equals(encodingOptions.HardwareAccelerationType, "qsv", StringComparison.OrdinalIgnoreCase))
                 {
-                    switch (videoStream.Codec.ToLower())
+                    switch (videoStream.Codec.ToLowerInvariant())
                     {
                         case "avc":
                         case "h264":
@@ -2215,7 +2215,7 @@ namespace MediaBrowser.Controller.MediaEncoding
 
                 else if (string.Equals(encodingOptions.HardwareAccelerationType, "nvenc", StringComparison.OrdinalIgnoreCase))
                 {
-                    switch (videoStream.Codec.ToLower())
+                    switch (videoStream.Codec.ToLowerInvariant())
                     {
                         case "avc":
                         case "h264":
@@ -2254,7 +2254,7 @@ namespace MediaBrowser.Controller.MediaEncoding
 
                 else if (string.Equals(encodingOptions.HardwareAccelerationType, "mediacodec", StringComparison.OrdinalIgnoreCase))
                 {
-                    switch (videoStream.Codec.ToLower())
+                    switch (videoStream.Codec.ToLowerInvariant())
                     {
                         case "avc":
                         case "h264":
@@ -2299,7 +2299,7 @@ namespace MediaBrowser.Controller.MediaEncoding
 
                 else if (string.Equals(encodingOptions.HardwareAccelerationType, "omx", StringComparison.OrdinalIgnoreCase))
                 {
-                    switch (videoStream.Codec.ToLower())
+                    switch (videoStream.Codec.ToLowerInvariant())
                     {
                         case "avc":
                         case "h264":
@@ -2324,7 +2324,7 @@ namespace MediaBrowser.Controller.MediaEncoding
                         return "-hwaccel dxva2";
                     }
 
-                    switch (videoStream.Codec.ToLower())
+                    switch (videoStream.Codec.ToLowerInvariant())
                     {
                         case "avc":
                         case "h264":

+ 1 - 1
MediaBrowser.LocalMetadata/Images/LocalImageProvider.cs

@@ -417,7 +417,7 @@ namespace MediaBrowser.LocalMetadata.Images
             var seriesFiles = GetFiles(series, false, directoryService).ToList();
 
             // Try using the season name
-            var prefix = season.Name.ToLower().Replace(" ", string.Empty);
+            var prefix = season.Name.ToLowerInvariant().Replace(" ", string.Empty);
 
             var filenamePrefixes = new List<string> { prefix };
 

+ 4 - 2
MediaBrowser.LocalMetadata/Savers/BaseXmlSaver.cs

@@ -172,7 +172,7 @@ namespace MediaBrowser.LocalMetadata.Savers
 
             writer.WriteElementString("Added", item.DateCreated.ToLocalTime().ToString("G"));
 
-            writer.WriteElementString("LockData", item.IsLocked.ToString().ToLower());
+            writer.WriteElementString("LockData", item.IsLocked.ToString(CultureInfo.InvariantCulture).ToLowerInvariant());
 
             if (item.LockedFields.Length > 0)
             {
@@ -410,7 +410,9 @@ namespace MediaBrowser.LocalMetadata.Savers
                 writer.WriteStartElement("Share");
 
                 writer.WriteElementString("UserId", share.UserId);
-                writer.WriteElementString("CanEdit", share.CanEdit.ToString().ToLower());
+                writer.WriteElementString(
+                    "CanEdit",
+                    share.CanEdit.ToString(CultureInfo.InvariantCulture).ToLowerInvariant());
 
                 writer.WriteEndElement();
             }

+ 2 - 2
MediaBrowser.MediaEncoding/Encoder/BaseEncoder.cs

@@ -272,7 +272,7 @@ namespace MediaBrowser.MediaEncoding.Encoder
 
             var outputFileExtension = GetOutputFileExtension(state);
 
-            var filename = state.Id + (outputFileExtension ?? string.Empty).ToLower();
+            var filename = state.Id + (outputFileExtension ?? string.Empty).ToLowerInvariant();
             return Path.Combine(folder, filename);
         }
 
@@ -310,7 +310,7 @@ namespace MediaBrowser.MediaEncoding.Encoder
             {
                 if (string.Equals(GetEncodingOptions().HardwareAccelerationType, "qsv", StringComparison.OrdinalIgnoreCase))
                 {
-                    switch (state.MediaSource.VideoStream.Codec.ToLower())
+                    switch (state.MediaSource.VideoStream.Codec.ToLowerInvariant())
                     {
                         case "avc":
                         case "h264":

+ 12 - 12
MediaBrowser.MediaEncoding/Subtitles/SsaParser.cs

@@ -44,7 +44,7 @@ namespace MediaBrowser.MediaEncoding.Subtitles
                     if (!eventsStarted)
                         header.AppendLine(line);
 
-                    if (line.Trim().ToLower() == "[events]")
+                    if (line.Trim().ToLowerInvariant() == "[events]")
                     {
                         eventsStarted = true;
                     }
@@ -54,25 +54,25 @@ namespace MediaBrowser.MediaEncoding.Subtitles
                     }
                     else if (eventsStarted && line.Trim().Length > 0)
                     {
-                        string s = line.Trim().ToLower();
+                        string s = line.Trim().ToLowerInvariant();
                         if (s.StartsWith("format:"))
                         {
                             if (line.Length > 10)
                             {
-                                format = line.ToLower().Substring(8).Split(',');
+                                format = line.ToLowerInvariant().Substring(8).Split(',');
                                 for (int i = 0; i < format.Length; i++)
                                 {
-                                    if (format[i].Trim().ToLower() == "layer")
+                                    if (format[i].Trim().ToLowerInvariant() == "layer")
                                         indexLayer = i;
-                                    else if (format[i].Trim().ToLower() == "start")
+                                    else if (format[i].Trim().ToLowerInvariant() == "start")
                                         indexStart = i;
-                                    else if (format[i].Trim().ToLower() == "end")
+                                    else if (format[i].Trim().ToLowerInvariant() == "end")
                                         indexEnd = i;
-                                    else if (format[i].Trim().ToLower() == "text")
+                                    else if (format[i].Trim().ToLowerInvariant() == "text")
                                         indexText = i;
-                                    else if (format[i].Trim().ToLower() == "effect")
+                                    else if (format[i].Trim().ToLowerInvariant() == "effect")
                                         indexEffect = i;
-                                    else if (format[i].Trim().ToLower() == "style")
+                                    else if (format[i].Trim().ToLowerInvariant() == "style")
                                         indexStyle = i;
                                 }
                             }
@@ -222,7 +222,7 @@ namespace MediaBrowser.MediaEncoding.Subtitles
 
                         // switch to rrggbb from bbggrr
                         color = "#" + color.Remove(color.Length - 6) + color.Substring(color.Length - 2, 2) + color.Substring(color.Length - 4, 2) + color.Substring(color.Length - 6, 2);
-                        color = color.ToLower();
+                        color = color.ToLowerInvariant();
 
                         text = text.Remove(start, end - start + 1);
                         if (italic)
@@ -252,7 +252,7 @@ namespace MediaBrowser.MediaEncoding.Subtitles
 
                         // switch to rrggbb from bbggrr
                         color = "#" + color.Remove(color.Length - 6) + color.Substring(color.Length - 2, 2) + color.Substring(color.Length - 4, 2) + color.Substring(color.Length - 6, 2);
-                        color = color.ToLower();
+                        color = color.ToLowerInvariant();
 
                         text = text.Remove(start, end - start + 1);
                         if (italic)
@@ -367,7 +367,7 @@ namespace MediaBrowser.MediaEncoding.Subtitles
                         color = color.PadLeft(6, '0');
                         // switch to rrggbb from bbggrr
                         color = "#" + color.Remove(color.Length - 6) + color.Substring(color.Length - 2, 2) + color.Substring(color.Length - 4, 2) + color.Substring(color.Length - 6, 2);
-                        color = color.ToLower();
+                        color = color.ToLowerInvariant();
 
                         extraTags += " color=\"" + color + "\"";
                     }

+ 11 - 11
MediaBrowser.Model/Dlna/StreamInfo.cs

@@ -223,7 +223,7 @@ namespace MediaBrowser.Model.Dlna
             list.Add(new NameValuePair("DeviceProfileId", item.DeviceProfileId ?? string.Empty));
             list.Add(new NameValuePair("DeviceId", item.DeviceId ?? string.Empty));
             list.Add(new NameValuePair("MediaSourceId", item.MediaSourceId ?? string.Empty));
-            list.Add(new NameValuePair("Static", item.IsDirectStream.ToString().ToLower()));
+            list.Add(new NameValuePair("Static", item.IsDirectStream.ToString(CultureInfo.InvariantCulture).ToLowerInvariant()));
             list.Add(new NameValuePair("VideoCodec", videoCodecs));
             list.Add(new NameValuePair("AudioCodec", audioCodecs));
             list.Add(new NameValuePair("AudioStreamIndex", item.AudioStreamIndex.HasValue ? item.AudioStreamIndex.Value.ToString(CultureInfo.InvariantCulture) : string.Empty));
@@ -251,7 +251,7 @@ namespace MediaBrowser.Model.Dlna
             list.Add(new NameValuePair("PlaySessionId", item.PlaySessionId ?? string.Empty));
             list.Add(new NameValuePair("api_key", accessToken ?? string.Empty));
 
-            string liveStreamId = item.MediaSource == null ? null : item.MediaSource.LiveStreamId;
+            string liveStreamId = item.MediaSource?.LiveStreamId;
             list.Add(new NameValuePair("LiveStreamId", liveStreamId ?? string.Empty));
 
             list.Add(new NameValuePair("SubtitleMethod", item.SubtitleStreamIndex.HasValue && item.SubtitleDeliveryMethod != SubtitleDeliveryMethod.External ? item.SubtitleDeliveryMethod.ToString() : string.Empty));
@@ -261,37 +261,37 @@ namespace MediaBrowser.Model.Dlna
             {
                 if (item.RequireNonAnamorphic)
                 {
-                    list.Add(new NameValuePair("RequireNonAnamorphic", item.RequireNonAnamorphic.ToString().ToLower()));
+                    list.Add(new NameValuePair("RequireNonAnamorphic", item.RequireNonAnamorphic.ToString(CultureInfo.InvariantCulture).ToLowerInvariant()));
                 }
 
                 list.Add(new NameValuePair("TranscodingMaxAudioChannels", item.TranscodingMaxAudioChannels.HasValue ? item.TranscodingMaxAudioChannels.Value.ToString(CultureInfo.InvariantCulture) : string.Empty));
 
                 if (item.EnableSubtitlesInManifest)
                 {
-                    list.Add(new NameValuePair("EnableSubtitlesInManifest", item.EnableSubtitlesInManifest.ToString().ToLower()));
+                    list.Add(new NameValuePair("EnableSubtitlesInManifest", item.EnableSubtitlesInManifest.ToString(CultureInfo.InvariantCulture).ToLowerInvariant()));
                 }
 
                 if (item.EnableMpegtsM2TsMode)
                 {
-                    list.Add(new NameValuePair("EnableMpegtsM2TsMode", item.EnableMpegtsM2TsMode.ToString().ToLower()));
+                    list.Add(new NameValuePair("EnableMpegtsM2TsMode", item.EnableMpegtsM2TsMode.ToString(CultureInfo.InvariantCulture).ToLowerInvariant()));
                 }
 
                 if (item.EstimateContentLength)
                 {
-                    list.Add(new NameValuePair("EstimateContentLength", item.EstimateContentLength.ToString().ToLower()));
+                    list.Add(new NameValuePair("EstimateContentLength", item.EstimateContentLength.ToString(CultureInfo.InvariantCulture).ToLowerInvariant()));
                 }
 
                 if (item.TranscodeSeekInfo != TranscodeSeekInfo.Auto)
                 {
-                    list.Add(new NameValuePair("TranscodeSeekInfo", item.TranscodeSeekInfo.ToString().ToLower()));
+                    list.Add(new NameValuePair("TranscodeSeekInfo", item.TranscodeSeekInfo.ToString().ToLowerInvariant()));
                 }
 
                 if (item.CopyTimestamps)
                 {
-                    list.Add(new NameValuePair("CopyTimestamps", item.CopyTimestamps.ToString().ToLower()));
+                    list.Add(new NameValuePair("CopyTimestamps", item.CopyTimestamps.ToString(CultureInfo.InvariantCulture).ToLowerInvariant()));
                 }
 
-                list.Add(new NameValuePair("RequireAvc", item.RequireAvc.ToString().ToLower()));
+                list.Add(new NameValuePair("RequireAvc", item.RequireAvc.ToString(CultureInfo.InvariantCulture).ToLowerInvariant()));
             }
 
             list.Add(new NameValuePair("Tag", item.MediaSource.ETag ?? string.Empty));
@@ -316,7 +316,7 @@ namespace MediaBrowser.Model.Dlna
                     list.Add(new NameValuePair("MinSegments", item.MinSegments.Value.ToString(CultureInfo.InvariantCulture)));
                 }
 
-                list.Add(new NameValuePair("BreakOnNonKeyFrames", item.BreakOnNonKeyFrames.ToString()));
+                list.Add(new NameValuePair("BreakOnNonKeyFrames", item.BreakOnNonKeyFrames.ToString(CultureInfo.InvariantCulture)));
             }
 
             foreach (var pair in item.StreamOptions)
@@ -332,7 +332,7 @@ namespace MediaBrowser.Model.Dlna
 
             if (!item.IsDirectStream)
             {
-                list.Add(new NameValuePair("TranscodeReasons", string.Join(",", item.TranscodeReasons.Distinct().Select(i => i.ToString()).ToArray())));
+                list.Add(new NameValuePair("TranscodeReasons", string.Join(",", item.TranscodeReasons.Distinct().Select(i => i.ToString()))));
             }
 
             return list;

+ 3 - 3
MediaBrowser.Model/Entities/MediaStream.cs

@@ -104,7 +104,7 @@ namespace MediaBrowser.Model.Entities
                         attributes.Add("Default");
                     }
 
-                    return string.Join(" ", attributes.ToArray());
+                    return string.Join(" ", attributes);
                 }
 
                 if (Type == MediaStreamType.Video)
@@ -120,10 +120,10 @@ namespace MediaBrowser.Model.Entities
 
                     if (!string.IsNullOrEmpty(Codec))
                     {
-                        attributes.Add(Codec.ToUpper());
+                        attributes.Add(Codec.ToUpperInvariant());
                     }
 
-                    return string.Join(" ", attributes.ToArray());
+                    return string.Join(" ", attributes);
                 }
 
                 if (Type == MediaStreamType.Subtitle)

+ 1 - 1
MediaBrowser.Model/Extensions/StringHelper.cs

@@ -51,7 +51,7 @@ namespace MediaBrowser.Model.Extensions
 
         public static string FirstToUpper(this string str)
         {
-            return string.IsNullOrEmpty(str) ? "" : str.Substring(0, 1).ToUpper() + str.Substring(1);
+            return string.IsNullOrEmpty(str) ? string.Empty : str.Substring(0, 1).ToUpperInvariant() + str.Substring(1);
         }
     }
 }

+ 6 - 3
MediaBrowser.Model/MediaInfo/AudioCodec.cs

@@ -8,9 +8,12 @@ namespace MediaBrowser.Model.MediaInfo
 
         public static string GetFriendlyName(string codec)
         {
-            if (string.IsNullOrEmpty(codec)) return "";
+            if (string.IsNullOrEmpty(codec))
+            {
+                return string.Empty;
+            }
 
-            switch (codec.ToLower())
+            switch (codec.ToLowerInvariant())
             {
                 case "ac3":
                     return "Dolby Digital";
@@ -19,7 +22,7 @@ namespace MediaBrowser.Model.MediaInfo
                 case "dca":
                     return "DTS";
                 default:
-                    return codec.ToUpper();
+                    return codec.ToUpperInvariant();
             }
         }
     }

+ 1 - 1
MediaBrowser.Model/Net/MimeTypes.cs

@@ -158,7 +158,7 @@ namespace MediaBrowser.Model.Net
             // Catch-all for all video types that don't require specific mime types
             if (VideoFileExtensionsDictionary.ContainsKey(ext))
             {
-                return "video/" + ext.TrimStart('.').ToLower();
+                return "video/" + ext.TrimStart('.').ToLowerInvariant();
             }
 
             // Type text

+ 2 - 2
MediaBrowser.Providers/Manager/ImageSaver.cs

@@ -420,7 +420,7 @@ namespace MediaBrowser.Providers.Manager
                     filename = GetBackdropSaveFilename(item.GetImages(type), "screenshot", "screenshot", imageIndex);
                     break;
                 default:
-                    filename = type.ToString().ToLower();
+                    filename = type.ToString().ToLowerInvariant();
                     break;
             }
 
@@ -429,7 +429,7 @@ namespace MediaBrowser.Providers.Manager
                 extension = ".jpg";
             }
 
-            extension = extension.ToLower();
+            extension = extension.ToLowerInvariant();
 
             string path = null;
 

+ 1 - 1
MediaBrowser.Providers/Manager/ItemImageProvider.cs

@@ -148,7 +148,7 @@ namespace MediaBrowser.Providers.Manager
                             }
                             else
                             {
-                                var mimeType = "image/" + response.Format.ToString().ToLower();
+                                var mimeType = "image/" + response.Format.ToString().ToLowerInvariant();
 
                                 await _providerManager.SaveImage(item, response.Stream, mimeType, imageType, null, cancellationToken).ConfigureAwait(false);
                             }

+ 1 - 1
MediaBrowser.Providers/MediaInfo/SubtitleResolver.cs

@@ -119,7 +119,7 @@ namespace MediaBrowser.Providers.MediaInfo
                     continue;
                 }
 
-                var codec = Path.GetExtension(fullName).ToLower().TrimStart('.');
+                var codec = Path.GetExtension(fullName).ToLowerInvariant().TrimStart('.');
 
                 if (string.Equals(codec, "txt", StringComparison.OrdinalIgnoreCase))
                 {

+ 1 - 1
MediaBrowser.Providers/Movies/MovieDbProvider.cs

@@ -285,7 +285,7 @@ namespace MediaBrowser.Providers.Movies
 
                 if (parts.Length == 2)
                 {
-                    language = parts[0] + "-" + parts[1].ToUpper();
+                    language = parts[0] + "-" + parts[1].ToUpperInvariant();
                 }
             }
 

+ 1 - 1
MediaBrowser.Providers/Movies/MovieDbSearch.cs

@@ -72,7 +72,7 @@ namespace MediaBrowser.Providers.Movies
             }
 
             _logger.LogInformation("MovieDbProvider: Finding id for item: " + name);
-            var language = idInfo.MetadataLanguage.ToLower();
+            var language = idInfo.MetadataLanguage.ToLowerInvariant();
 
             //nope - search for it
             //var searchType = item is BoxSet ? "collection" : "movie";

+ 3 - 3
MediaBrowser.Providers/Subtitles/SubtitleManager.cs

@@ -168,14 +168,14 @@ namespace MediaBrowser.Providers.Subtitles
                         memoryStream.Position = 0;
 
                         var savePaths = new List<string>();
-                        var saveFileName = _fileSystem.GetFileNameWithoutExtension(video.Path) + "." + response.Language.ToLower();
+                        var saveFileName = _fileSystem.GetFileNameWithoutExtension(video.Path) + "." + response.Language.ToLowerInvariant();
 
                         if (response.IsForced)
                         {
                             saveFileName += ".forced";
                         }
 
-                        saveFileName += "." + response.Format.ToLower();
+                        saveFileName += "." + response.Format.ToLowerInvariant();
 
                         if (saveInMediaFolder)
                         {
@@ -305,7 +305,7 @@ namespace MediaBrowser.Providers.Subtitles
 
         private string GetProviderId(string name)
         {
-            return name.ToLower().GetMD5().ToString("N");
+            return name.ToLowerInvariant().GetMD5().ToString("N");
         }
 
         private ISubtitleProvider GetProvider(string id)

+ 3 - 3
MediaBrowser.Providers/TV/TheTVDB/TvdbSeriesProvider.cs

@@ -66,7 +66,7 @@ namespace MediaBrowser.Providers.TV
             }
 
             // pt-br is just pt to tvdb
-            return language.Split('-')[0].ToLower();
+            return language.Split('-')[0].ToLowerInvariant();
         }
 
         public async Task<IEnumerable<RemoteSearchResult>> GetSearchResults(SeriesInfo searchInfo, CancellationToken cancellationToken)
@@ -776,7 +776,7 @@ namespace MediaBrowser.Providers.TV
         /// <returns>System.String.</returns>
         private string GetComparableName(string name)
         {
-            name = name.ToLower();
+            name = name.ToLowerInvariant();
             name = _localizationManager.NormalizeFormKD(name);
             var sb = new StringBuilder();
             foreach (var c in name)
@@ -1620,7 +1620,7 @@ namespace MediaBrowser.Providers.TV
         {
             var seriesDataPath = GetSeriesDataPath(_config.ApplicationPaths, seriesProviderIds);
 
-            var seriesXmlFilename = language.ToLower() + ".xml";
+            var seriesXmlFilename = language.ToLowerInvariant() + ".xml";
 
             return Path.Combine(seriesDataPath, seriesXmlFilename);
         }

+ 13 - 12
MediaBrowser.XbmcMetadata/Savers/BaseNfoSaver.cs

@@ -290,7 +290,7 @@ namespace MediaBrowser.XbmcMetadata.Savers
 
             foreach (var stream in mediaStreams)
             {
-                writer.WriteStartElement(stream.Type.ToString().ToLower());
+                writer.WriteStartElement(stream.Type.ToString().ToLowerInvariant());
 
                 if (!string.IsNullOrEmpty(stream.Codec))
                 {
@@ -471,7 +471,7 @@ namespace MediaBrowser.XbmcMetadata.Savers
                 writer.WriteElementString("customrating", item.CustomRating);
             }
 
-            writer.WriteElementString("lockdata", item.IsLocked.ToString().ToLower());
+            writer.WriteElementString("lockdata", item.IsLocked.ToString(CultureInfo.InvariantCulture).ToLowerInvariant());
 
             if (item.LockedFields.Length > 0)
             {
@@ -871,21 +871,21 @@ namespace MediaBrowser.XbmcMetadata.Savers
 
             var userdata = userDataRepo.GetUserData(user, item);
 
-            writer.WriteElementString("isuserfavorite", userdata.IsFavorite.ToString().ToLower());
+            writer.WriteElementString("isuserfavorite", userdata.IsFavorite.ToString(CultureInfo.InvariantCulture).ToLowerInvariant());
 
             if (userdata.Rating.HasValue)
             {
-                writer.WriteElementString("userrating", userdata.Rating.Value.ToString(CultureInfo.InvariantCulture).ToLower());
+                writer.WriteElementString("userrating", userdata.Rating.Value.ToString(CultureInfo.InvariantCulture).ToLowerInvariant());
             }
 
             if (!item.IsFolder)
             {
                 writer.WriteElementString("playcount", userdata.PlayCount.ToString(UsCulture));
-                writer.WriteElementString("watched", userdata.Played.ToString().ToLower());
+                writer.WriteElementString("watched", userdata.Played.ToString(CultureInfo.InvariantCulture).ToLowerInvariant());
 
                 if (userdata.LastPlayedDate.HasValue)
                 {
-                    writer.WriteElementString("lastplayed", userdata.LastPlayedDate.Value.ToLocalTime().ToString("yyyy-MM-dd HH:mm:ss").ToLower());
+                    writer.WriteElementString("lastplayed", userdata.LastPlayedDate.Value.ToLocalTime().ToString("yyyy-MM-dd HH:mm:ss").ToLowerInvariant());
                 }
 
                 writer.WriteStartElement("resume");
@@ -901,12 +901,13 @@ namespace MediaBrowser.XbmcMetadata.Savers
 
         private void AddActors(List<PersonInfo> people, XmlWriter writer, ILibraryManager libraryManager, IFileSystem fileSystem, IServerConfigurationManager config, bool saveImagePath)
         {
-            var actors = people
-                .Where(i => !IsPersonType(i, PersonType.Director) && !IsPersonType(i, PersonType.Writer))
-                .ToList();
-
-            foreach (var person in actors)
+            foreach (var person in people)
             {
+                if (IsPersonType(person, PersonType.Director) || IsPersonType(person, PersonType.Writer))
+                {
+                    continue;
+                }
+
                 writer.WriteStartElement("actor");
 
                 if (!string.IsNullOrWhiteSpace(person.Name))
@@ -1021,7 +1022,7 @@ namespace MediaBrowser.XbmcMetadata.Savers
 
         private string GetTagForProviderKey(string providerKey)
         {
-            return providerKey.ToLower() + "id";
+            return providerKey.ToLowerInvariant() + "id";
         }
     }
 }

+ 1 - 1
SocketHttpListener/Ext.cs

@@ -486,7 +486,7 @@ namespace SocketHttpListener
             if (method == CompressionMethod.None)
                 return string.Empty;
 
-            var m = string.Format("permessage-{0}", method.ToString().ToLower());
+            var m = string.Format("permessage-{0}", method.ToString().ToLowerInvariant());
             if (parameters == null || parameters.Length == 0)
                 return m;
 

+ 1 - 1
SocketHttpListener/Net/HttpListenerRequest.cs

@@ -155,7 +155,7 @@ namespace SocketHttpListener.Net
                     }
                     else
                     {
-                        header = header.ToLower(CultureInfo.InvariantCulture);
+                        header = header.ToLowerInvariant();
                         _keepAlive =
                             header.IndexOf("close", StringComparison.OrdinalIgnoreCase) < 0 ||
                             header.IndexOf("keep-alive", StringComparison.OrdinalIgnoreCase) >= 0;