| 
					
				 | 
			
			
				@@ -37,25 +37,31 @@ namespace MediaBrowser.Providers.Subtitles 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         public Task<SubtitleResponse> GetSubtitles(SubtitleRequest request, CancellationToken cancellationToken) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            return request.ContentType == SubtitleMediaType.Episode 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                ? GetEpisodeSubtitles(request, cancellationToken) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                : GetMovieSubtitles(request, cancellationToken); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return GetMediaSubtitleSubtitles(request, cancellationToken); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        public async Task<SubtitleResponse> GetMovieSubtitles(SubtitleRequest request, CancellationToken cancellationToken) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            throw new NotImplementedException(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        public async Task<SubtitleResponse> GetEpisodeSubtitles(SubtitleRequest request, CancellationToken cancellationToken) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        public async Task<SubtitleResponse> GetMediaSubtitleSubtitles(SubtitleRequest request, CancellationToken cancellationToken) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             var response = new SubtitleResponse(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if (!request.IndexNumber.HasValue || !request.ParentIndexNumber.HasValue) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            switch (request.ContentType) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                _logger.Debug("Information Missing"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                return response; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                case SubtitleMediaType.Episode: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if (!request.IndexNumber.HasValue || !request.ParentIndexNumber.HasValue || string.IsNullOrEmpty(request.SeriesName)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        _logger.Debug("Information Missing"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        return response; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                case SubtitleMediaType.Movie: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if (string.IsNullOrEmpty(request.Name)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        _logger.Debug("Information Missing"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        return response; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             if (string.IsNullOrEmpty(request.MediaPath)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 _logger.Debug("Path Missing"); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -76,10 +82,13 @@ namespace MediaBrowser.Providers.Subtitles 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             var fileInfo = new FileInfo(request.MediaPath); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             var movieByteSize = fileInfo.Length; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            var subtitleSearchParameters = request.ContentType == SubtitleMediaType.Episode 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                ? new SubtitleSearchParameters(subLanguageId, request.SeriesName, request.ParentIndexNumber.Value.ToString(_usCulture), request.IndexNumber.Value.ToString(_usCulture)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                : new SubtitleSearchParameters(subLanguageId, request.Name); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             var parms = new List<SubtitleSearchParameters> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                                                new SubtitleSearchParameters(subLanguageId, hash, movieByteSize), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                                               new SubtitleSearchParameters(subLanguageId, request.SeriesName, request.ParentIndexNumber.Value.ToString(_usCulture), request.IndexNumber.Value.ToString(_usCulture)), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                                               subtitleSearchParameters 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                                            }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             var result = OpenSubtitles.SearchSubtitles(parms.ToArray()); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -89,8 +98,14 @@ namespace MediaBrowser.Providers.Subtitles 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 return null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            Predicate<SubtitleSearchResult> mediaFilter = 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                x => 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    request.ContentType == SubtitleMediaType.Episode 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        ? int.Parse(x.SeriesSeason) == request.ParentIndexNumber && int.Parse(x.SeriesEpisode) == request.IndexNumber 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        : long.Parse(x.IDMovieImdb) == request.ImdbId; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             var results = ((MethodResponseSubtitleSearch)result).Results; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            var bestResult = results.Where(x => x.SubBad == "0" && int.Parse(x.SeriesSeason) == request.ParentIndexNumber && int.Parse(x.SeriesEpisode) == request.IndexNumber) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            var bestResult = results.Where(x => x.SubBad == "0" && mediaFilter(x)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     .OrderBy(x => x.MovieHash == hash) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     .ThenBy(x => Math.Abs(long.Parse(x.MovieByteSize) - movieByteSize)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     .ThenByDescending(x => int.Parse(x.SubDownloadsCnt)) 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -124,7 +139,7 @@ namespace MediaBrowser.Providers.Subtitles 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             var data = Convert.FromBase64String(res.Data); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             response.HasContent = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            response.Format = SubtitleFormat.SRT; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            response.Format = subtitle.SubFormat.ToUpper(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             response.Stream = new MemoryStream(Utilities.Decompress(new MemoryStream(data))); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             return response; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 |