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