| 
					
				 | 
			
			
				@@ -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); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 |