| 
														
															@@ -37,25 +37,31 @@ namespace MediaBrowser.Providers.Subtitles 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															         public Task<SubtitleResponse> GetSubtitles(SubtitleRequest request, CancellationToken cancellationToken) 
														 | 
														
														 | 
														
															         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(); 
														 | 
														
														 | 
														
															             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)) 
														 | 
														
														 | 
														
															             if (string.IsNullOrEmpty(request.MediaPath)) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             { 
														 | 
														
														 | 
														
															             { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															                 _logger.Debug("Path Missing"); 
														 | 
														
														 | 
														
															                 _logger.Debug("Path Missing"); 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -76,10 +82,13 @@ namespace MediaBrowser.Providers.Subtitles 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             var fileInfo = new FileInfo(request.MediaPath); 
														 | 
														
														 | 
														
															             var fileInfo = new FileInfo(request.MediaPath); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             var movieByteSize = fileInfo.Length; 
														 | 
														
														 | 
														
															             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> { 
														 | 
														
														 | 
														
															             var parms = new List<SubtitleSearchParameters> { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															                                                                new SubtitleSearchParameters(subLanguageId, hash, movieByteSize), 
														 | 
														
														 | 
														
															                                                                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()); 
														 | 
														
														 | 
														
															             var result = OpenSubtitles.SearchSubtitles(parms.ToArray()); 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -89,8 +98,14 @@ namespace MediaBrowser.Providers.Subtitles 
														 | 
													
												
											
												
													
														| 
														 | 
														
															                 return null; 
														 | 
														
														 | 
														
															                 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 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) 
														 | 
														
														 | 
														
															                     .OrderBy(x => x.MovieHash == hash) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															                     .ThenBy(x => Math.Abs(long.Parse(x.MovieByteSize) - movieByteSize)) 
														 | 
														
														 | 
														
															                     .ThenBy(x => Math.Abs(long.Parse(x.MovieByteSize) - movieByteSize)) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															                     .ThenByDescending(x => int.Parse(x.SubDownloadsCnt)) 
														 | 
														
														 | 
														
															                     .ThenByDescending(x => int.Parse(x.SubDownloadsCnt)) 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -124,7 +139,7 @@ namespace MediaBrowser.Providers.Subtitles 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             var data = Convert.FromBase64String(res.Data); 
														 | 
														
														 | 
														
															             var data = Convert.FromBase64String(res.Data); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															             response.HasContent = true; 
														 | 
														
														 | 
														
															             response.HasContent = true; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-            response.Format = SubtitleFormat.SRT; 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            response.Format = subtitle.SubFormat.ToUpper(); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             response.Stream = new MemoryStream(Utilities.Decompress(new MemoryStream(data))); 
														 | 
														
														 | 
														
															             response.Stream = new MemoryStream(Utilities.Decompress(new MemoryStream(data))); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             return response; 
														 | 
														
														 | 
														
															             return response; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         } 
														 | 
														
														 | 
														
															         } 
														 |