aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--MediaBrowser.Controller/Providers/ISubtitleProvider.cs2
-rw-r--r--MediaBrowser.Providers/Subtitles/OpenSubtitleDownloader.cs47
-rw-r--r--OpenSubtitlesHandler/SubtitleTypes/SubtitleSearchParameters.cs11
3 files changed, 44 insertions, 16 deletions
diff --git a/MediaBrowser.Controller/Providers/ISubtitleProvider.cs b/MediaBrowser.Controller/Providers/ISubtitleProvider.cs
index a3aaaf298..adefea84d 100644
--- a/MediaBrowser.Controller/Providers/ISubtitleProvider.cs
+++ b/MediaBrowser.Controller/Providers/ISubtitleProvider.cs
@@ -49,7 +49,9 @@ namespace MediaBrowser.Controller.Providers
public string MediaPath { get; set; }
public string SeriesName { get; set; }
+ public string Name { get; set; }
public int? IndexNumber { get; set; }
public int? ParentIndexNumber { get; set; }
+ public long ImdbId { get; set; }
}
}
diff --git a/MediaBrowser.Providers/Subtitles/OpenSubtitleDownloader.cs b/MediaBrowser.Providers/Subtitles/OpenSubtitleDownloader.cs
index 12d8b8fc6..6025493e7 100644
--- a/MediaBrowser.Providers/Subtitles/OpenSubtitleDownloader.cs
+++ b/MediaBrowser.Providers/Subtitles/OpenSubtitleDownloader.cs
@@ -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;
}
diff --git a/OpenSubtitlesHandler/SubtitleTypes/SubtitleSearchParameters.cs b/OpenSubtitlesHandler/SubtitleTypes/SubtitleSearchParameters.cs
index e11ff1b9a..f2e70ef81 100644
--- a/OpenSubtitlesHandler/SubtitleTypes/SubtitleSearchParameters.cs
+++ b/OpenSubtitlesHandler/SubtitleTypes/SubtitleSearchParameters.cs
@@ -42,6 +42,17 @@ namespace OpenSubtitlesHandler
this._query = "";
}
+ public SubtitleSearchParameters(string subLanguageId, string query)
+ {
+ this.subLanguageId = subLanguageId;
+ this.movieHash = "";
+ this.movieByteSize = 0;
+ this.imdbid = "";
+ this._episode = "";
+ this._season = "";
+ this._query = query;
+ }
+
public SubtitleSearchParameters(string subLanguageId, string query, string season, string episode)
{
this.subLanguageId = subLanguageId;