Sfoglia il codice sorgente

don't organize episode if series has no provider ids

Luke Pulverenti 9 anni fa
parent
commit
ce813c40c9

+ 117 - 108
MediaBrowser.Server.Implementations/FileOrganization/EpisodeFileOrganizer.cs

@@ -76,50 +76,50 @@ namespace MediaBrowser.Server.Implementations.FileOrganization
             {
                 var seasonNumber = episodeInfo.SeasonNumber;
 
-				result.ExtractedSeasonNumber = seasonNumber;
-
-				// Passing in true will include a few extra regex's
-				var episodeNumber = episodeInfo.EpisodeNumber;
-
-				result.ExtractedEpisodeNumber = episodeNumber;
-
-				var premiereDate = episodeInfo.IsByDate ? 
-					new DateTime(episodeInfo.Year.Value, episodeInfo.Month.Value, episodeInfo.Day.Value) : 
-					(DateTime?)null;
-
-				if (episodeInfo.IsByDate || (seasonNumber.HasValue && episodeNumber.HasValue))
-				{
-					if (episodeInfo.IsByDate) 
-					{
-						_logger.Debug("Extracted information from {0}. Series name {1}, Date {2}", path, seriesName, premiereDate.Value);
-					} 
-					else 
-					{
-						_logger.Debug("Extracted information from {0}. Series name {1}, Season {2}, Episode {3}", path, seriesName, seasonNumber, episodeNumber);
-					}
-
-					var endingEpisodeNumber = episodeInfo.EndingEpsiodeNumber;
-
-					result.ExtractedEndingEpisodeNumber = endingEpisodeNumber;
-
-					await OrganizeEpisode(path, 
-						seriesName, 
-						seasonNumber, 
-						episodeNumber, 
-						endingEpisodeNumber, 
-						premiereDate,
-						options, 
-						overwriteExisting, 
-						result, 
-						cancellationToken).ConfigureAwait(false);
-				}
-				else
-				{
-					var msg = string.Format("Unable to determine episode number from {0}", path);
-					result.Status = FileSortingStatus.Failure;
-					result.StatusMessage = msg;
-					_logger.Warn(msg);
-				}
+                result.ExtractedSeasonNumber = seasonNumber;
+
+                // Passing in true will include a few extra regex's
+                var episodeNumber = episodeInfo.EpisodeNumber;
+
+                result.ExtractedEpisodeNumber = episodeNumber;
+
+                var premiereDate = episodeInfo.IsByDate ?
+                    new DateTime(episodeInfo.Year.Value, episodeInfo.Month.Value, episodeInfo.Day.Value) :
+                    (DateTime?)null;
+
+                if (episodeInfo.IsByDate || (seasonNumber.HasValue && episodeNumber.HasValue))
+                {
+                    if (episodeInfo.IsByDate)
+                    {
+                        _logger.Debug("Extracted information from {0}. Series name {1}, Date {2}", path, seriesName, premiereDate.Value);
+                    }
+                    else
+                    {
+                        _logger.Debug("Extracted information from {0}. Series name {1}, Season {2}, Episode {3}", path, seriesName, seasonNumber, episodeNumber);
+                    }
+
+                    var endingEpisodeNumber = episodeInfo.EndingEpsiodeNumber;
+
+                    result.ExtractedEndingEpisodeNumber = endingEpisodeNumber;
+
+                    await OrganizeEpisode(path,
+                        seriesName,
+                        seasonNumber,
+                        episodeNumber,
+                        endingEpisodeNumber,
+                        premiereDate,
+                        options,
+                        overwriteExisting,
+                        result,
+                        cancellationToken).ConfigureAwait(false);
+                }
+                else
+                {
+                    var msg = string.Format("Unable to determine episode number from {0}", path);
+                    result.Status = FileSortingStatus.Failure;
+                    result.StatusMessage = msg;
+                    _logger.Warn(msg);
+                }
             }
             else
             {
@@ -151,32 +151,32 @@ namespace MediaBrowser.Server.Implementations.FileOrganization
 
             var series = (Series)_libraryManager.GetItemById(new Guid(request.SeriesId));
 
-            await OrganizeEpisode(result.OriginalPath, 
-				series, 
-				request.SeasonNumber, 
-				request.EpisodeNumber, 
-				request.EndingEpisodeNumber, 
-				null,
-				options, 
-				true, 
-				result, 
-				cancellationToken).ConfigureAwait(false);
+            await OrganizeEpisode(result.OriginalPath,
+                series,
+                request.SeasonNumber,
+                request.EpisodeNumber,
+                request.EndingEpisodeNumber,
+                null,
+                options,
+                true,
+                result,
+                cancellationToken).ConfigureAwait(false);
 
             await _organizationService.SaveResult(result, CancellationToken.None).ConfigureAwait(false);
 
             return result;
         }
 
-        private Task OrganizeEpisode(string sourcePath, 
-			string seriesName, 
-			int? seasonNumber, 
-			int? episodeNumber, 
-			int? endingEpiosdeNumber, 
-			DateTime? premiereDate,
-			TvFileOrganizationOptions options, 
-			bool overwriteExisting, 
-			FileOrganizationResult result, 
-			CancellationToken cancellationToken)
+        private Task OrganizeEpisode(string sourcePath,
+            string seriesName,
+            int? seasonNumber,
+            int? episodeNumber,
+            int? endingEpiosdeNumber,
+            DateTime? premiereDate,
+            TvFileOrganizationOptions options,
+            bool overwriteExisting,
+            FileOrganizationResult result,
+            CancellationToken cancellationToken)
         {
             var series = GetMatchingSeries(seriesName, result);
 
@@ -189,33 +189,42 @@ namespace MediaBrowser.Server.Implementations.FileOrganization
                 return Task.FromResult(true);
             }
 
-            return OrganizeEpisode(sourcePath, 
-				series, 
-				seasonNumber, 
-				episodeNumber, 
-				endingEpiosdeNumber,
-				premiereDate,
-				options, 
-				overwriteExisting, 
-				result, 
-				cancellationToken);
+            if (!series.ProviderIds.Any())
+            {
+                var msg = string.Format("Series has not yet been identified: {0}. If you just added the series, please run a library scan or use the identify feature to identify it.", seriesName);
+                result.Status = FileSortingStatus.Failure;
+                result.StatusMessage = msg;
+                _logger.Warn(msg);
+                return Task.FromResult(true);
+            }
+
+            return OrganizeEpisode(sourcePath,
+                series,
+                seasonNumber,
+                episodeNumber,
+                endingEpiosdeNumber,
+                premiereDate,
+                options,
+                overwriteExisting,
+                result,
+                cancellationToken);
         }
 
-        private async Task OrganizeEpisode(string sourcePath, 
-			Series series, 
-			int? seasonNumber, 
-			int? episodeNumber, 
-			int? endingEpiosdeNumber, 
-			DateTime? premiereDate,
-			TvFileOrganizationOptions options, 
-			bool overwriteExisting, 
-			FileOrganizationResult result, 
-			CancellationToken cancellationToken)
+        private async Task OrganizeEpisode(string sourcePath,
+            Series series,
+            int? seasonNumber,
+            int? episodeNumber,
+            int? endingEpiosdeNumber,
+            DateTime? premiereDate,
+            TvFileOrganizationOptions options,
+            bool overwriteExisting,
+            FileOrganizationResult result,
+            CancellationToken cancellationToken)
         {
             _logger.Info("Sorting file {0} into series {1}", sourcePath, series.Path);
 
             // Proceed to sort the file
-			var newPath = await GetNewPath(sourcePath, series, seasonNumber, episodeNumber, endingEpiosdeNumber, premiereDate, options, cancellationToken).ConfigureAwait(false);
+            var newPath = await GetNewPath(sourcePath, series, seasonNumber, episodeNumber, endingEpiosdeNumber, premiereDate, options, cancellationToken).ConfigureAwait(false);
 
             if (string.IsNullOrEmpty(newPath))
             {
@@ -324,17 +333,17 @@ namespace MediaBrowser.Server.Implementations.FileOrganization
             }
         }
 
-        private List<string> GetOtherDuplicatePaths(string targetPath, 
-			Series series, 
-			int? seasonNumber, 
-			int? episodeNumber, 
-			int? endingEpisodeNumber)
+        private List<string> GetOtherDuplicatePaths(string targetPath,
+            Series series,
+            int? seasonNumber,
+            int? episodeNumber,
+            int? endingEpisodeNumber)
         {
-			// TODO: Support date-naming?
-			if (!seasonNumber.HasValue || episodeNumber.HasValue) 
-			{
-				return new List<string> ();
-			}
+            // TODO: Support date-naming?
+            if (!seasonNumber.HasValue || episodeNumber.HasValue)
+            {
+                return new List<string>();
+            }
 
             var episodePaths = series.GetRecursiveChildren()
                 .OfType<Episode>()
@@ -464,14 +473,14 @@ namespace MediaBrowser.Server.Implementations.FileOrganization
         /// <param name="endingEpisodeNumber">The ending episode number.</param>
         /// <param name="options">The options.</param>
         /// <returns>System.String.</returns>
-        private async Task<string> GetNewPath(string sourcePath, 
-			Series series, 
-			int? seasonNumber, 
-			int? episodeNumber, 
-			int? endingEpisodeNumber, 
-			DateTime? premiereDate,
-			TvFileOrganizationOptions options, 
-			CancellationToken cancellationToken)
+        private async Task<string> GetNewPath(string sourcePath,
+            Series series,
+            int? seasonNumber,
+            int? episodeNumber,
+            int? endingEpisodeNumber,
+            DateTime? premiereDate,
+            TvFileOrganizationOptions options,
+            CancellationToken cancellationToken)
         {
             var episodeInfo = new EpisodeInfo
             {
@@ -481,7 +490,7 @@ namespace MediaBrowser.Server.Implementations.FileOrganization
                 MetadataLanguage = series.GetPreferredMetadataLanguage(),
                 ParentIndexNumber = seasonNumber,
                 SeriesProviderIds = series.ProviderIds,
-				PremiereDate = premiereDate
+                PremiereDate = premiereDate
             };
 
             var searchResults = await _providerManager.GetRemoteSearchResults<Episode, EpisodeInfo>(new RemoteSearchQuery<EpisodeInfo>
@@ -491,7 +500,7 @@ namespace MediaBrowser.Server.Implementations.FileOrganization
             }, cancellationToken).ConfigureAwait(false);
 
             var episode = searchResults.FirstOrDefault();
-            
+
             string episodeName = string.Empty;
 
             if (episode == null)
@@ -503,10 +512,10 @@ namespace MediaBrowser.Server.Implementations.FileOrganization
             else
             {
                 episodeName = episode.Name;
-			}
+            }
 
-			seasonNumber = seasonNumber ?? episode.ParentIndexNumber;
-			episodeNumber = episodeNumber ?? episode.IndexNumber;
+            seasonNumber = seasonNumber ?? episode.ParentIndexNumber;
+            episodeNumber = episodeNumber ?? episode.IndexNumber;
 
             var newPath = GetSeasonFolderPath(series, seasonNumber.Value, options);