Prechádzať zdrojové kódy

Merge pull request #1879 from MediaBrowser/dev

Dev
Luke 9 rokov pred
rodič
commit
65c99a16de

+ 1 - 1
MediaBrowser.Api/Movies/TrailersService.cs

@@ -58,7 +58,7 @@ namespace MediaBrowser.Api.Movies
 
             getItems.IncludeItemTypes = "Trailer";
 
-            return new ItemsService(_userManager, _libraryManager, _userDataRepository, _localizationManager, _dtoService, _collectionManager)
+            return new ItemsService(_userManager, _libraryManager, _localizationManager, _dtoService)
             {
                 AuthorizationContext = AuthorizationContext,
                 Logger = Logger,

+ 2 - 4
MediaBrowser.Api/UserLibrary/ItemsService.cs

@@ -48,11 +48,9 @@ namespace MediaBrowser.Api.UserLibrary
         /// </summary>
         /// <param name="userManager">The user manager.</param>
         /// <param name="libraryManager">The library manager.</param>
-        /// <param name="userDataRepository">The user data repository.</param>
         /// <param name="localization">The localization.</param>
         /// <param name="dtoService">The dto service.</param>
-        /// <param name="collectionManager">The collection manager.</param>
-        public ItemsService(IUserManager userManager, ILibraryManager libraryManager, IUserDataManager userDataRepository, ILocalizationManager localization, IDtoService dtoService, ICollectionManager collectionManager)
+        public ItemsService(IUserManager userManager, ILibraryManager libraryManager, ILocalizationManager localization, IDtoService dtoService)
         {
             _userManager = userManager;
             _libraryManager = libraryManager;
@@ -302,7 +300,7 @@ namespace MediaBrowser.Api.UserLibrary
             {
                 query.LocationTypes = request.LocationTypes.Split(',').Select(d => (LocationType)Enum.Parse(typeof(LocationType), d, true)).ToArray();
             }
-            
+
             // Min official rating
             if (!string.IsNullOrWhiteSpace(request.MinOfficialRating))
             {

+ 5 - 5
MediaBrowser.Model/Dlna/StreamBuilder.cs

@@ -842,17 +842,17 @@ namespace MediaBrowser.Model.Dlna
                 {
                     bool requiresConversion = !StringHelper.EqualsIgnoreCase(subtitleStream.Codec, profile.Format);
 
-                    if (requiresConversion && !allowConversion)
+                    if (!requiresConversion)
                     {
-                        continue;
+                        return profile;
                     }
 
-                    if (!requiresConversion)
+                    if (!allowConversion)
                     {
-                        return profile;
+                        continue;
                     }
 
-                    if (subtitleStream.IsTextSubtitleStream && subtitleStream.SupportsExternalStream)
+                    if (subtitleStream.IsTextSubtitleStream && subtitleStream.SupportsExternalStream && subtitleStream.SupportsSubtitleConversionTo(profile.Format))
                     {
                         return profile;
                     }

+ 30 - 0
MediaBrowser.Model/Entities/MediaStream.cs

@@ -282,6 +282,36 @@ namespace MediaBrowser.Model.Entities
                    !StringHelper.EqualsIgnoreCase(codec, "sub");
         }
 
+        public bool SupportsSubtitleConversionTo(string codec)
+        {
+            if (!IsTextSubtitleStream)
+            {
+                return false;
+            }
+
+            // Can't convert from this 
+            if (StringHelper.EqualsIgnoreCase(Codec, "ass"))
+            {
+                return false;
+            }
+            if (StringHelper.EqualsIgnoreCase(Codec, "ssa"))
+            {
+                return false;
+            }
+
+            // Can't convert to this 
+            if (StringHelper.EqualsIgnoreCase(codec, "ass"))
+            {
+                return false;
+            }
+            if (StringHelper.EqualsIgnoreCase(codec, "ssa"))
+            {
+                return false;
+            }
+
+            return true;
+        }
+
         /// <summary>
         /// Gets or sets a value indicating whether [supports external stream].
         /// </summary>

+ 1 - 1
MediaBrowser.Providers/BoxSets/MovieDbBoxSetImageProvider.cs

@@ -83,7 +83,7 @@ namespace MediaBrowser.Providers.BoxSets
                 VoteCount = i.vote_count,
                 Width = i.width,
                 Height = i.height,
-                Language = i.iso_639_1,
+                Language = MovieDbProvider.AdjustImageLanguage(i.iso_639_1, language),
                 ProviderName = Name,
                 Type = ImageType.Primary,
                 RatingType = RatingType.Score

+ 3 - 3
MediaBrowser.Providers/Movies/MovieDbImageProvider.cs

@@ -63,6 +63,8 @@ namespace MediaBrowser.Providers.Movies
         {
             var list = new List<RemoteImageInfo>();
 
+            var language = item.GetPreferredMetadataLanguage();
+
             var results = await FetchImages((BaseItem)item, null, _jsonSerializer, cancellationToken).ConfigureAwait(false);
 
             if (results == null)
@@ -85,7 +87,7 @@ namespace MediaBrowser.Providers.Movies
                     VoteCount = i.vote_count,
                     Width = i.width,
                     Height = i.height,
-                    Language = i.iso_639_1,
+                    Language = MovieDbProvider.AdjustImageLanguage(i.iso_639_1, language),
                     ProviderName = Name,
                     Type = ImageType.Primary,
                     RatingType = RatingType.Score
@@ -107,8 +109,6 @@ namespace MediaBrowser.Providers.Movies
                 }));
             }
 
-            var language = item.GetPreferredMetadataLanguage();
-
             var isLanguageEn = string.Equals(language, "en", StringComparison.OrdinalIgnoreCase);
 
             return list.OrderByDescending(i =>

+ 35 - 6
MediaBrowser.Providers/Movies/MovieDbProvider.cs

@@ -267,9 +267,21 @@ namespace MediaBrowser.Providers.Movies
 
             if (!string.IsNullOrEmpty(preferredLanguage))
             {
+                preferredLanguage = NormalizeLanguage(preferredLanguage);
+
                 languages.Add(preferredLanguage);
+
+                if (preferredLanguage.Length == 5) // like en-US
+                {
+                    // Currenty, TMDB supports 2-letter language codes only
+                    // They are planning to change this in the future, thus we're
+                    // supplying both codes if we're having a 5-letter code.
+                    languages.Add(preferredLanguage.Substring(0, 2));
+                }
             }
+
             languages.Add("null");
+
             if (!string.Equals(preferredLanguage, "en", StringComparison.OrdinalIgnoreCase))
             {
                 languages.Add("en");
@@ -280,18 +292,35 @@ namespace MediaBrowser.Providers.Movies
 
         public static string NormalizeLanguage(string language)
         {
-            // They require this to be uppercase
-            // https://emby.media/community/index.php?/topic/32454-fr-follow-tmdbs-new-language-api-update/?p=311148
-            var parts = language.Split('-');
-
-            if (parts.Length == 2)
+            if (!string.IsNullOrEmpty(language))
             {
-                language = parts[0] + "-" + parts[1].ToUpper();
+                // They require this to be uppercase
+                // https://emby.media/community/index.php?/topic/32454-fr-follow-tmdbs-new-language-api-update/?p=311148
+                var parts = language.Split('-');
+
+                if (parts.Length == 2)
+                {
+                    language = parts[0] + "-" + parts[1].ToUpper();
+                }
             }
 
             return language;
         }
 
+        public static string AdjustImageLanguage(string imageLanguage, string requestLanguage)
+        {
+            if (!string.IsNullOrEmpty(imageLanguage) 
+                && !string.IsNullOrEmpty(requestLanguage) 
+                && requestLanguage.Length > 2 
+                && imageLanguage.Length == 2
+                && requestLanguage.StartsWith(imageLanguage, StringComparison.OrdinalIgnoreCase))
+            {
+                return requestLanguage;
+            }
+
+            return imageLanguage;
+        }
+
         /// <summary>
         /// Fetches the main result.
         /// </summary>

+ 4 - 2
MediaBrowser.Providers/TV/TheMovieDb/MovieDbEpisodeImageProvider.cs

@@ -57,8 +57,10 @@ namespace MediaBrowser.Providers.TV
                 return list;
             }
 
+            var language = item.GetPreferredMetadataLanguage();
+
             var response = await GetEpisodeInfo(seriesId, seasonNumber.Value, episodeNumber.Value,
-                        item.GetPreferredMetadataLanguage(), cancellationToken).ConfigureAwait(false);
+                        language, cancellationToken).ConfigureAwait(false);
 
             var tmdbSettings = await MovieDbProvider.Current.GetTmdbSettings(cancellationToken).ConfigureAwait(false);
 
@@ -71,12 +73,12 @@ namespace MediaBrowser.Providers.TV
                 VoteCount = i.vote_count,
                 Width = i.width,
                 Height = i.height,
+                Language = MovieDbProvider.AdjustImageLanguage(i.iso_639_1, language),
                 ProviderName = Name,
                 Type = ImageType.Primary,
                 RatingType = RatingType.Score
             }));
 
-            var language = item.GetPreferredMetadataLanguage();
 
             var isLanguageEn = string.Equals(language, "en", StringComparison.OrdinalIgnoreCase);
 

+ 1 - 1
MediaBrowser.Providers/TV/TheMovieDb/MovieDbProviderBase.cs

@@ -151,7 +151,7 @@ namespace MediaBrowser.Providers.TV
             public string file_path { get; set; }
             public int height { get; set; }
             public string id { get; set; }
-            public object iso_639_1 { get; set; }
+            public string iso_639_1 { get; set; }
             public double vote_average { get; set; }
             public int vote_count { get; set; }
             public int width { get; set; }

+ 3 - 3
MediaBrowser.Providers/TV/TheMovieDb/MovieDbSeriesImageProvider.cs

@@ -66,6 +66,8 @@ namespace MediaBrowser.Providers.TV
 
             var tmdbImageUrl = tmdbSettings.images.secure_base_url + "original";
 
+            var language = item.GetPreferredMetadataLanguage();
+
             list.AddRange(GetPosters(results).Select(i => new RemoteImageInfo
             {
                 Url = tmdbImageUrl + i.file_path,
@@ -73,7 +75,7 @@ namespace MediaBrowser.Providers.TV
                 VoteCount = i.vote_count,
                 Width = i.width,
                 Height = i.height,
-                Language = i.iso_639_1,
+                Language = MovieDbProvider.AdjustImageLanguage(i.iso_639_1, language),
                 ProviderName = Name,
                 Type = ImageType.Primary,
                 RatingType = RatingType.Score
@@ -91,8 +93,6 @@ namespace MediaBrowser.Providers.TV
                 RatingType = RatingType.Score
             }));
 
-            var language = item.GetPreferredMetadataLanguage();
-
             var isLanguageEn = string.Equals(language, "en", StringComparison.OrdinalIgnoreCase);
 
             return list.OrderByDescending(i =>

+ 7 - 13
MediaBrowser.Server.Implementations/Channels/ChannelManager.cs

@@ -1320,20 +1320,14 @@ namespace MediaBrowser.Server.Implementations.Channels
                 item.Tags = info.Tags;
                 item.HomePageUrl = info.HomePageUrl;
             }
-            else
+            else if (info.Type == ChannelItemType.Folder && info.FolderType == ChannelFolderType.Container)
             {
-                // Can't do this right now due to channels that utilize the server's metadata services
-                //if (item.Name != info.Name)
-                //{
-                //    item.Name = info.Name;
-                //    forceUpdate = true;
-                //}
-
-                //if (item.CommunityRating != info.CommunityRating)
-                //{
-                //    item.CommunityRating = info.CommunityRating;
-                //    forceUpdate = true;
-                //}
+                // At least update names of container folders
+                if (item.Name != info.Name)
+                {
+                    item.Name = info.Name;
+                    forceUpdate = true;
+                }
             }
 
             var hasArtists = item as IHasArtist;

+ 0 - 8
MediaBrowser.Server.Implementations/Library/MediaSourceManager.cs

@@ -69,14 +69,6 @@ namespace MediaBrowser.Server.Implementations.Library
 
             if (stream.IsTextSubtitleStream)
             {
-                if (string.Equals(stream.Codec, "ass", StringComparison.OrdinalIgnoreCase))
-                {
-                    return false;
-                }
-                if (string.Equals(stream.Codec, "ssa", StringComparison.OrdinalIgnoreCase))
-                {
-                    return false;
-                }
                 return true;
             }
 

+ 1 - 1
MediaBrowser.Server.Implementations/Persistence/BaseSqliteRepository.cs

@@ -8,7 +8,7 @@ namespace MediaBrowser.Server.Implementations.Persistence
 {
     public abstract class BaseSqliteRepository : IDisposable
     {
-        protected readonly SemaphoreSlim WriteLock = new SemaphoreSlim(1, 1);
+        protected SemaphoreSlim WriteLock = new SemaphoreSlim(1, 1);
         protected readonly IDbConnector DbConnector;
         protected ILogger Logger;
 

+ 1 - 1
MediaBrowser.Server.Implementations/Persistence/SqliteItemRepository.cs

@@ -328,7 +328,7 @@ namespace MediaBrowser.Server.Implementations.Persistence
             new MediaStreamColumns(_connection, Logger).AddColumns();
 
             DataExtensions.Attach(_connection, Path.Combine(_config.ApplicationPaths.DataPath, "userdata_v2.db"), "UserDataDb");
-            await userDataRepo.Initialize(_connection).ConfigureAwait(false);
+            await userDataRepo.Initialize(_connection, WriteLock).ConfigureAwait(false);
             //await Vacuum(_connection).ConfigureAwait(false);
         }
 

+ 9 - 11
MediaBrowser.Server.Implementations/Persistence/SqliteUserDataRepository.cs

@@ -56,8 +56,10 @@ namespace MediaBrowser.Server.Implementations.Persistence
         /// Opens the connection to the database
         /// </summary>
         /// <returns>Task.</returns>
-        public async Task Initialize(IDbConnection connection)
+        public async Task Initialize(IDbConnection connection, SemaphoreSlim writeLock)
         {
+            WriteLock.Dispose();
+            WriteLock = writeLock;
             _connection = connection;
 
             string[] queries = {
@@ -438,18 +440,14 @@ namespace MediaBrowser.Server.Implementations.Persistence
             return userData;
         }
 
-        protected override void CloseConnection()
+        protected override void Dispose(bool dispose)
         {
-            if (_connection != null)
-            {
-                if (_connection.IsOpen())
-                {
-                    _connection.Close();
-                }
+            // handled by library database
+        }
 
-                _connection.Dispose();
-                _connection = null;
-            }
+        protected override void CloseConnection()
+        {
+            // handled by library database
         }
     }
 }