소스 검색

fixes #1225 - Emby creates bogus seasons from subfolderss

Luke Pulverenti 7 년 전
부모
커밋
47d7eaeedb
2개의 변경된 파일25개의 추가작업 그리고 19개의 파일을 삭제
  1. 25 2
      Emby.Server.Implementations/Library/Resolvers/TV/SeasonResolver.cs
  2. 0 17
      MediaBrowser.Controller/Entities/TV/Series.cs

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

@@ -5,6 +5,7 @@ using MediaBrowser.Controller.Library;
 using MediaBrowser.Model.Globalization;
 using Emby.Naming.Common;
 using Emby.Naming.TV;
+using MediaBrowser.Model.Logging;
 
 namespace Emby.Server.Implementations.Library.Resolvers.TV
 {
@@ -21,16 +22,18 @@ namespace Emby.Server.Implementations.Library.Resolvers.TV
         private readonly ILibraryManager _libraryManager;
         private static readonly CultureInfo UsCulture = new CultureInfo("en-US");
         private readonly ILocalizationManager _localization;
+        private readonly ILogger _logger;
 
         /// <summary>
         /// Initializes a new instance of the <see cref="SeasonResolver"/> class.
         /// </summary>
         /// <param name="config">The config.</param>
-        public SeasonResolver(IServerConfigurationManager config, ILibraryManager libraryManager, ILocalizationManager localization)
+        public SeasonResolver(IServerConfigurationManager config, ILibraryManager libraryManager, ILocalizationManager localization, ILogger logger)
         {
             _config = config;
             _libraryManager = libraryManager;
             _localization = localization;
+            _logger = logger;
         }
 
         /// <summary>
@@ -45,20 +48,40 @@ namespace Emby.Server.Implementations.Library.Resolvers.TV
                 var namingOptions = ((LibraryManager)_libraryManager).GetNamingOptions();
                 var series = ((Series)args.Parent);
 
+                var path = args.Path;
+
                 var season = new Season
                 {
-                    IndexNumber = new SeasonPathParser(namingOptions, new RegexProvider()).Parse(args.Path, true, true).SeasonNumber,
+                    IndexNumber = new SeasonPathParser(namingOptions, new RegexProvider()).Parse(path, true, true).SeasonNumber,
                     SeriesId = series.Id,
                     SeriesName = series.Name
                 };
 
                 if (season.IndexNumber.HasValue)
                 {
+                    var resolver = new Emby.Naming.TV.EpisodeResolver(namingOptions);
+
+                    var episodeInfo = resolver.Resolve(path, true);
+
+                    if (episodeInfo != null)
+                    {
+                        if (episodeInfo.EpisodeNumber.HasValue && episodeInfo.SeasonNumber.HasValue)
+                        {
+                            _logger.Info("Found folder underneath series with episode number: {0}. Season {1}. Episode {2}", 
+                                path,
+                                episodeInfo.SeasonNumber.Value,
+                                episodeInfo.EpisodeNumber.Value);
+
+                            return null;
+                        }
+                    }
+
                     var seasonNumber = season.IndexNumber.Value;
 
                     season.Name = seasonNumber == 0 ?
                         args.LibraryOptions.SeasonZeroDisplayName :
                         string.Format(_localization.GetLocalizedString("NameSeasonNumber"), seasonNumber.ToString(UsCulture), args.GetLibraryOptions().PreferredMetadataLanguage);
+
                 }
 
                 return season;

+ 0 - 17
MediaBrowser.Controller/Entities/TV/Series.cs

@@ -215,23 +215,6 @@ namespace MediaBrowser.Controller.Entities.TV
             return list;
         }
 
-        [IgnoreDataMember]
-        public bool ContainsEpisodesWithoutSeasonFolders
-        {
-            get
-            {
-                var children = Children;
-                foreach (var child in children)
-                {
-                    if (child is Video)
-                    {
-                        return true;
-                    }
-                }
-                return false;
-            }
-        }
-
         public override List<BaseItem> GetChildren(User user, bool includeLinkedChildren)
         {
             return GetSeasons(user, new DtoOptions(true));