Browse Source

Merge pull request #732 from Bond-009/locale

Reworked LocalizationManager to load data async
Joshua M. Boniface 6 năm trước cách đây
mục cha
commit
56dcc45dc0
27 tập tin đã thay đổi với 159 bổ sung207 xóa
  1. 7 8
      Emby.Server.Implementations/ApplicationHost.cs
  2. 8 8
      Emby.Server.Implementations/Library/MediaSourceManager.cs
  3. 85 102
      Emby.Server.Implementations/Localization/LocalizationManager.cs
  4. 0 0
      Emby.Server.Implementations/Localization/Ratings/br.csv
  5. 0 0
      Emby.Server.Implementations/Localization/Ratings/ca.csv
  6. 0 0
      Emby.Server.Implementations/Localization/Ratings/co.csv
  7. 0 0
      Emby.Server.Implementations/Localization/Ratings/dk.csv
  8. 0 0
      Emby.Server.Implementations/Localization/Ratings/es.csv
  9. 0 0
      Emby.Server.Implementations/Localization/Ratings/fr.csv
  10. 0 0
      Emby.Server.Implementations/Localization/Ratings/gb.csv
  11. 0 0
      Emby.Server.Implementations/Localization/Ratings/ie.csv
  12. 0 0
      Emby.Server.Implementations/Localization/Ratings/jp.csv
  13. 0 0
      Emby.Server.Implementations/Localization/Ratings/kz.csv
  14. 0 0
      Emby.Server.Implementations/Localization/Ratings/mx.csv
  15. 0 0
      Emby.Server.Implementations/Localization/Ratings/nl.csv
  16. 0 0
      Emby.Server.Implementations/Localization/Ratings/nz.csv
  17. 0 0
      Emby.Server.Implementations/Localization/Ratings/ro.csv
  18. 0 0
      Emby.Server.Implementations/Localization/Ratings/uk.csv
  19. 0 0
      Emby.Server.Implementations/Localization/Ratings/us.csv
  20. 0 63
      Emby.Server.Implementations/Localization/TextLocalizer.cs
  21. 1 1
      Jellyfin.Server/Program.cs
  22. 4 3
      MediaBrowser.Api/ItemUpdateService.cs
  23. 2 2
      MediaBrowser.Common/IApplicationHost.cs
  24. 42 4
      MediaBrowser.Controller/Extensions/StringExtensions.cs
  25. 4 4
      MediaBrowser.Model/Globalization/ILocalizationManager.cs
  26. 1 2
      MediaBrowser.Providers/Manager/MetadataService.cs
  27. 5 10
      MediaBrowser.Providers/MediaInfo/FFProbeProvider.cs

+ 7 - 8
Emby.Server.Implementations/ApplicationHost.cs

@@ -110,7 +110,6 @@ using MediaBrowser.XbmcMetadata.Providers;
 using Microsoft.Extensions.Logging;
 using Microsoft.Extensions.Logging;
 using ServiceStack;
 using ServiceStack;
 using ServiceStack.Text.Jsv;
 using ServiceStack.Text.Jsv;
-using StringExtensions = MediaBrowser.Controller.Extensions.StringExtensions;
 using X509Certificate = System.Security.Cryptography.X509Certificates.X509Certificate;
 using X509Certificate = System.Security.Cryptography.X509Certificates.X509Certificate;
 
 
 namespace Emby.Server.Implementations
 namespace Emby.Server.Implementations
@@ -302,7 +301,7 @@ namespace Emby.Server.Implementations
 
 
         private ILiveTvManager LiveTvManager { get; set; }
         private ILiveTvManager LiveTvManager { get; set; }
 
 
-        public ILocalizationManager LocalizationManager { get; set; }
+        public LocalizationManager LocalizationManager { get; set; }
 
 
         private IEncodingManager EncodingManager { get; set; }
         private IEncodingManager EncodingManager { get; set; }
         private IChannelManager ChannelManager { get; set; }
         private IChannelManager ChannelManager { get; set; }
@@ -703,7 +702,7 @@ namespace Emby.Server.Implementations
             }
             }
         }
         }
 
 
-        public void Init()
+        public async Task Init()
         {
         {
             HttpPort = ServerConfigurationManager.Configuration.HttpServerPortNumber;
             HttpPort = ServerConfigurationManager.Configuration.HttpServerPortNumber;
             HttpsPort = ServerConfigurationManager.Configuration.HttpsPortNumber;
             HttpsPort = ServerConfigurationManager.Configuration.HttpsPortNumber;
@@ -733,7 +732,7 @@ namespace Emby.Server.Implementations
 
 
             SetHttpLimit();
             SetHttpLimit();
 
 
-            RegisterResources();
+            await RegisterResources();
 
 
             FindParts();
             FindParts();
         }
         }
@@ -748,7 +747,7 @@ namespace Emby.Server.Implementations
         /// <summary>
         /// <summary>
         /// Registers resources that classes will depend on
         /// Registers resources that classes will depend on
         /// </summary>
         /// </summary>
-        protected void RegisterResources()
+        protected async Task RegisterResources()
         {
         {
             RegisterSingleInstance(ConfigurationManager);
             RegisterSingleInstance(ConfigurationManager);
             RegisterSingleInstance<IApplicationHost>(this);
             RegisterSingleInstance<IApplicationHost>(this);
@@ -809,9 +808,9 @@ namespace Emby.Server.Implementations
             IAssemblyInfo assemblyInfo = new AssemblyInfo();
             IAssemblyInfo assemblyInfo = new AssemblyInfo();
             RegisterSingleInstance(assemblyInfo);
             RegisterSingleInstance(assemblyInfo);
 
 
-            LocalizationManager = new LocalizationManager(ServerConfigurationManager, FileSystemManager, JsonSerializer, LoggerFactory, assemblyInfo, new TextLocalizer());
-            StringExtensions.LocalizationManager = LocalizationManager;
-            RegisterSingleInstance(LocalizationManager);
+            LocalizationManager = new LocalizationManager(ServerConfigurationManager, FileSystemManager, JsonSerializer, LoggerFactory);
+            await LocalizationManager.LoadAll();
+            RegisterSingleInstance<ILocalizationManager>(LocalizationManager);
 
 
             BlurayExaminer = new BdInfoExaminer(FileSystemManager);
             BlurayExaminer = new BdInfoExaminer(FileSystemManager);
             RegisterSingleInstance(BlurayExaminer);
             RegisterSingleInstance(BlurayExaminer);

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

@@ -322,18 +322,18 @@ namespace Emby.Server.Implementations.Library
 
 
         private string[] NormalizeLanguage(string language)
         private string[] NormalizeLanguage(string language)
         {
         {
-            if (language != null)
+            if (language == null)
             {
             {
-                var culture = _localizationManager.FindLanguageInfo(language);
-                if (culture != null)
-                {
-                    return culture.ThreeLetterISOLanguageNames;
-                }
+                return Array.Empty<string>();
+            }
 
 
-                return new string[] { language };
+            var culture = _localizationManager.FindLanguageInfo(language);
+            if (culture != null)
+            {
+                return culture.ThreeLetterISOLanguageNames;
             }
             }
 
 
-            return Array.Empty<string>();
+            return new string[] { language };
         }
         }
 
 
         private void SetDefaultSubtitleStreamIndex(MediaSourceInfo source, UserItemData userData, User user, bool allowRememberingSelection)
         private void SetDefaultSubtitleStreamIndex(MediaSourceInfo source, UserItemData userData, User user, bool allowRememberingSelection)

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 85 - 102
Emby.Server.Implementations/Localization/LocalizationManager.cs


+ 0 - 0
Emby.Server.Implementations/Localization/Ratings/br.txt → Emby.Server.Implementations/Localization/Ratings/br.csv


+ 0 - 0
Emby.Server.Implementations/Localization/Ratings/ca.txt → Emby.Server.Implementations/Localization/Ratings/ca.csv


+ 0 - 0
Emby.Server.Implementations/Localization/Ratings/co.txt → Emby.Server.Implementations/Localization/Ratings/co.csv


+ 0 - 0
Emby.Server.Implementations/Localization/Ratings/dk.txt → Emby.Server.Implementations/Localization/Ratings/dk.csv


+ 0 - 0
Emby.Server.Implementations/Localization/Ratings/es.txt → Emby.Server.Implementations/Localization/Ratings/es.csv


+ 0 - 0
Emby.Server.Implementations/Localization/Ratings/fr.txt → Emby.Server.Implementations/Localization/Ratings/fr.csv


+ 0 - 0
Emby.Server.Implementations/Localization/Ratings/gb.txt → Emby.Server.Implementations/Localization/Ratings/gb.csv


+ 0 - 0
Emby.Server.Implementations/Localization/Ratings/ie.txt → Emby.Server.Implementations/Localization/Ratings/ie.csv


+ 0 - 0
Emby.Server.Implementations/Localization/Ratings/jp.txt → Emby.Server.Implementations/Localization/Ratings/jp.csv


+ 0 - 0
Emby.Server.Implementations/Localization/Ratings/kz.txt → Emby.Server.Implementations/Localization/Ratings/kz.csv


+ 0 - 0
Emby.Server.Implementations/Localization/Ratings/mx.txt → Emby.Server.Implementations/Localization/Ratings/mx.csv


+ 0 - 0
Emby.Server.Implementations/Localization/Ratings/nl.txt → Emby.Server.Implementations/Localization/Ratings/nl.csv


+ 0 - 0
Emby.Server.Implementations/Localization/Ratings/nz.txt → Emby.Server.Implementations/Localization/Ratings/nz.csv


+ 0 - 0
Emby.Server.Implementations/Localization/Ratings/ro.txt → Emby.Server.Implementations/Localization/Ratings/ro.csv


+ 0 - 0
Emby.Server.Implementations/Localization/Ratings/uk.txt → Emby.Server.Implementations/Localization/Ratings/uk.csv


+ 0 - 0
Emby.Server.Implementations/Localization/Ratings/us.txt → Emby.Server.Implementations/Localization/Ratings/us.csv


+ 0 - 63
Emby.Server.Implementations/Localization/TextLocalizer.cs

@@ -1,63 +0,0 @@
-using System;
-using System.Globalization;
-using System.Linq;
-using System.Text;
-using System.Text.RegularExpressions;
-
-namespace Emby.Server.Implementations.Localization
-{
-    public class TextLocalizer : ITextLocalizer
-    {
-        public string RemoveDiacritics(string text)
-        {
-            if (text == null)
-            {
-                throw new ArgumentNullException(nameof(text));
-            }
-
-            var chars = Normalize(text, NormalizationForm.FormD)
-                .Where(ch => CharUnicodeInfo.GetUnicodeCategory(ch) != UnicodeCategory.NonSpacingMark);
-
-            return Normalize(string.Concat(chars), NormalizationForm.FormC);
-        }
-
-        private static string Normalize(string text, NormalizationForm form, bool stripStringOnFailure = true)
-        {
-            if (stripStringOnFailure)
-            {
-                try
-                {
-                    return text.Normalize(form);
-                }
-                catch (ArgumentException)
-                {
-                    // will throw if input contains invalid unicode chars
-                    // https://mnaoumov.wordpress.com/2014/06/14/stripping-invalid-characters-from-utf-16-strings/
-                    text = StripInvalidUnicodeCharacters(text);
-                    return Normalize(text, form, false);
-                }
-            }
-
-            try
-            {
-                return text.Normalize(form);
-            }
-            catch (ArgumentException)
-            {
-                // if it still fails, return the original text
-                return text;
-            }
-        }
-
-        private static string StripInvalidUnicodeCharacters(string str)
-        {
-            var invalidCharactersRegex = new Regex("([\ud800-\udbff](?![\udc00-\udfff]))|((?<![\ud800-\udbff])[\udc00-\udfff])");
-            return invalidCharactersRegex.Replace(str, "");
-        }
-
-        public string NormalizeFormKD(string text)
-        {
-            return text.Normalize(NormalizationForm.FormKD);
-        }
-    }
-}

+ 1 - 1
Jellyfin.Server/Program.cs

@@ -114,7 +114,7 @@ namespace Jellyfin.Server
                 new NullImageEncoder(),
                 new NullImageEncoder(),
                 new NetworkManager(_loggerFactory, environmentInfo)))
                 new NetworkManager(_loggerFactory, environmentInfo)))
             {
             {
-                appHost.Init();
+                await appHost.Init();
 
 
                 appHost.ImageProcessor.ImageEncoder = GetImageEncoder(fileSystem, appPaths, appHost.LocalizationManager);
                 appHost.ImageProcessor.ImageEncoder = GetImageEncoder(fileSystem, appPaths, appHost.LocalizationManager);
 
 

+ 4 - 3
MediaBrowser.Api/ItemUpdateService.cs

@@ -2,6 +2,7 @@ using System;
 using System.Collections.Generic;
 using System.Collections.Generic;
 using System.Linq;
 using System.Linq;
 using System.Threading;
 using System.Threading;
+using System.Threading.Tasks;
 using MediaBrowser.Controller.Configuration;
 using MediaBrowser.Controller.Configuration;
 using MediaBrowser.Controller.Entities;
 using MediaBrowser.Controller.Entities;
 using MediaBrowser.Controller.Entities.Audio;
 using MediaBrowser.Controller.Entities.Audio;
@@ -60,15 +61,15 @@ namespace MediaBrowser.Api
             _fileSystem = fileSystem;
             _fileSystem = fileSystem;
         }
         }
 
 
-        public object Get(GetMetadataEditorInfo request)
+        public async Task<object> Get(GetMetadataEditorInfo request)
         {
         {
             var item = _libraryManager.GetItemById(request.ItemId);
             var item = _libraryManager.GetItemById(request.ItemId);
 
 
             var info = new MetadataEditorInfo
             var info = new MetadataEditorInfo
             {
             {
-                ParentalRatingOptions = _localizationManager.GetParentalRatings(),
+                ParentalRatingOptions = _localizationManager.GetParentalRatings().ToArray(),
                 ExternalIdInfos = _providerManager.GetExternalIdInfos(item).ToArray(),
                 ExternalIdInfos = _providerManager.GetExternalIdInfos(item).ToArray(),
-                Countries = _localizationManager.GetCountries(),
+                Countries = await _localizationManager.GetCountries(),
                 Cultures = _localizationManager.GetCultures()
                 Cultures = _localizationManager.GetCultures()
             };
             };
 
 

+ 2 - 2
MediaBrowser.Common/IApplicationHost.cs

@@ -89,7 +89,7 @@ namespace MediaBrowser.Common
         /// <typeparam name="T"></typeparam>
         /// <typeparam name="T"></typeparam>
         /// <param name="manageLiftime">if set to <c>true</c> [manage liftime].</param>
         /// <param name="manageLiftime">if set to <c>true</c> [manage liftime].</param>
         /// <returns>IEnumerable{``0}.</returns>
         /// <returns>IEnumerable{``0}.</returns>
-        IEnumerable<T> GetExports<T>(bool manageLiftime = true);
+        IEnumerable<T> GetExports<T>(bool manageLifetime = true);
 
 
         /// <summary>
         /// <summary>
         /// Updates the application.
         /// Updates the application.
@@ -131,7 +131,7 @@ namespace MediaBrowser.Common
         /// <summary>
         /// <summary>
         /// Inits this instance.
         /// Inits this instance.
         /// </summary>
         /// </summary>
-        void Init();
+        Task Init();
 
 
         /// <summary>
         /// <summary>
         /// Creates the instance.
         /// Creates the instance.

+ 42 - 4
MediaBrowser.Controller/Extensions/StringExtensions.cs

@@ -1,4 +1,8 @@
-using MediaBrowser.Model.Globalization;
+using System;
+using System.Globalization;
+using System.Linq;
+using System.Text;
+using System.Text.RegularExpressions;
 
 
 namespace MediaBrowser.Controller.Extensions
 namespace MediaBrowser.Controller.Extensions
 {
 {
@@ -7,11 +11,45 @@ namespace MediaBrowser.Controller.Extensions
     /// </summary>
     /// </summary>
     public static class StringExtensions
     public static class StringExtensions
     {
     {
-        public static ILocalizationManager LocalizationManager { get; set; }
-
         public static string RemoveDiacritics(this string text)
         public static string RemoveDiacritics(this string text)
         {
         {
-            return LocalizationManager.RemoveDiacritics(text);
+            if (text == null)
+            {
+                throw new ArgumentNullException(nameof(text));
+            }
+
+            var chars = Normalize(text, NormalizationForm.FormD)
+                .Where(ch => CharUnicodeInfo.GetUnicodeCategory(ch) != UnicodeCategory.NonSpacingMark);
+
+            return Normalize(string.Concat(chars), NormalizationForm.FormC);
+        }
+
+        private static string Normalize(string text, NormalizationForm form, bool stripStringOnFailure = true)
+        {
+            if (stripStringOnFailure)
+            {
+                try
+                {
+                    return text.Normalize(form);
+                }
+                catch (ArgumentException)
+                {
+                    // will throw if input contains invalid unicode chars
+                    // https://mnaoumov.wordpress.com/2014/06/14/stripping-invalid-characters-from-utf-16-strings/
+                    text = Regex.Replace(text, "([\ud800-\udbff](?![\udc00-\udfff]))|((?<![\ud800-\udbff])[\udc00-\udfff])", "");
+                    return Normalize(text, form, false);
+                }
+            }
+
+            try
+            {
+                return text.Normalize(form);
+            }
+            catch (ArgumentException)
+            {
+                // if it still fails, return the original text
+                return text;
+            }
         }
         }
     }
     }
 }
 }

+ 4 - 4
MediaBrowser.Model/Globalization/ILocalizationManager.cs

@@ -1,4 +1,6 @@
+using System.Collections.Generic;
 using System.Globalization;
 using System.Globalization;
+using System.Threading.Tasks;
 using MediaBrowser.Model.Entities;
 using MediaBrowser.Model.Entities;
 
 
 namespace MediaBrowser.Model.Globalization
 namespace MediaBrowser.Model.Globalization
@@ -17,12 +19,12 @@ namespace MediaBrowser.Model.Globalization
         /// Gets the countries.
         /// Gets the countries.
         /// </summary>
         /// </summary>
         /// <returns>IEnumerable{CountryInfo}.</returns>
         /// <returns>IEnumerable{CountryInfo}.</returns>
-        CountryInfo[] GetCountries();
+        Task<CountryInfo[]> GetCountries();
         /// <summary>
         /// <summary>
         /// Gets the parental ratings.
         /// Gets the parental ratings.
         /// </summary>
         /// </summary>
         /// <returns>IEnumerable{ParentalRating}.</returns>
         /// <returns>IEnumerable{ParentalRating}.</returns>
-        ParentalRating[] GetParentalRatings();
+        IEnumerable<ParentalRating> GetParentalRatings();
         /// <summary>
         /// <summary>
         /// Gets the rating level.
         /// Gets the rating level.
         /// </summary>
         /// </summary>
@@ -51,8 +53,6 @@ namespace MediaBrowser.Model.Globalization
         /// <returns>IEnumerable{LocalizatonOption}.</returns>
         /// <returns>IEnumerable{LocalizatonOption}.</returns>
         LocalizationOption[] GetLocalizationOptions();
         LocalizationOption[] GetLocalizationOptions();
 
 
-        string RemoveDiacritics(string text);
-
         string NormalizeFormKD(string text);
         string NormalizeFormKD(string text);
 
 
         bool HasUnicodeCategory(string value, UnicodeCategory category);
         bool HasUnicodeCategory(string value, UnicodeCategory category);

+ 1 - 2
MediaBrowser.Providers/Manager/MetadataService.cs

@@ -566,8 +566,7 @@ namespace MediaBrowser.Providers.Manager
                 var providersWithChanges = providers
                 var providersWithChanges = providers
                     .Where(i =>
                     .Where(i =>
                     {
                     {
-                        var hasFileChangeMonitor = i as IHasItemChangeMonitor;
-                        if (hasFileChangeMonitor != null)
+                        if (i is IHasItemChangeMonitor hasFileChangeMonitor)
                         {
                         {
                             return HasChanged(item, hasFileChangeMonitor, options.DirectoryService);
                             return HasChanged(item, hasFileChangeMonitor, options.DirectoryService);
                         }
                         }

+ 5 - 10
MediaBrowser.Providers/MediaInfo/FFProbeProvider.cs

@@ -74,17 +74,12 @@ namespace MediaBrowser.Providers.MediaInfo
                 }
                 }
             }
             }
 
 
-            if (item.SupportsLocalMetadata)
+            if (item.SupportsLocalMetadata && video != null && !video.IsPlaceHolder
+                && !video.SubtitleFiles.SequenceEqual(
+                        _subtitleResolver.GetExternalSubtitleFiles(video, directoryService, false), StringComparer.Ordinal))
             {
             {
-                if (video != null && !video.IsPlaceHolder)
-                {
-                    if (!video.SubtitleFiles
-                        .SequenceEqual(_subtitleResolver.GetExternalSubtitleFiles(video, directoryService, false), StringComparer.Ordinal))
-                    {
-                        _logger.LogDebug("Refreshing {0} due to external subtitles change.", item.Path);
-                        return true;
-                    }
-                }
+                _logger.LogDebug("Refreshing {0} due to external subtitles change.", item.Path);
+                return true;
             }
             }
 
 
             return false;
             return false;

Một số tệp đã không được hiển thị bởi vì quá nhiều tập tin thay đổi trong này khác