From ac69327f1fa866c20630d9d0e0c663472b726c79 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Mon, 5 May 2014 00:36:45 -0400 Subject: check in open subtitles stub --- .../SubtitleTypes/SubtitleSearchParameters.cs | 115 +++++++++++++++++++++ 1 file changed, 115 insertions(+) create mode 100644 OpenSubtitlesHandler/SubtitleTypes/SubtitleSearchParameters.cs (limited to 'OpenSubtitlesHandler/SubtitleTypes/SubtitleSearchParameters.cs') diff --git a/OpenSubtitlesHandler/SubtitleTypes/SubtitleSearchParameters.cs b/OpenSubtitlesHandler/SubtitleTypes/SubtitleSearchParameters.cs new file mode 100644 index 000000000..e11ff1b9a --- /dev/null +++ b/OpenSubtitlesHandler/SubtitleTypes/SubtitleSearchParameters.cs @@ -0,0 +1,115 @@ +/* This file is part of OpenSubtitles Handler + A library that handle OpenSubtitles.org XML-RPC methods. + + Copyright © Ala Ibrahim Hadid 2013 + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + */ +using System; + +namespace OpenSubtitlesHandler +{ + /// + /// Paramaters for subtitle search call + /// + public struct SubtitleSearchParameters + { + /// + /// Paramaters for subtitle search call + /// + /// List of language ISO639-3 language codes to search for, divided by ',' (e.g. 'cze,eng,slo') + /// Video file hash as calculated by one of the implementation functions as seen on http://trac.opensubtitles.org/projects/opensubtitles/wiki/HashSourceCodes + /// Size of video file in bytes + public SubtitleSearchParameters(string subLanguageId, string movieHash, long movieByteSize) + { + this.subLanguageId = subLanguageId; + this.movieHash = movieHash; + this.movieByteSize = movieByteSize; + this.imdbid = ""; + this._episode = ""; + this._season = ""; + this._query = ""; + } + + public SubtitleSearchParameters(string subLanguageId, string query, string season, string episode) + { + this.subLanguageId = subLanguageId; + this.movieHash = ""; + this.movieByteSize = 0; + this.imdbid = ""; + this._episode = episode; + this._season = season; + this._query = query; + } + + /// + /// Paramaters for subtitle search call + /// + /// List of language ISO639-3 language codes to search for, divided by ',' (e.g. 'cze,eng,slo') + /// Video file hash as calculated by one of the implementation functions as seen on http://trac.opensubtitles.org/projects/opensubtitles/wiki/HashSourceCodes + /// Size of video file in bytes + /// IMDb ID of movie this video is part of, belongs to. + public SubtitleSearchParameters(string subLanguageId, string movieHash, long movieByteSize, string imdbid) + { + this.subLanguageId = subLanguageId; + this.movieHash = movieHash; + this.movieByteSize = movieByteSize; + this.imdbid = imdbid; + this._episode = ""; + this._season = ""; + this._query = ""; + } + + private string subLanguageId; + private string movieHash; + private long movieByteSize; + private string imdbid; + private string _query; + private string _episode; + + public string Episode { + get { return _episode; } + set { _episode = value; } + } + + public string Season { + get { return _season; } + set { _season = value; } + } + + private string _season; + + public string Query { + get { return _query; } + set { _query = value; } + } + + /// + /// List of language ISO639-3 language codes to search for, divided by ',' (e.g. 'cze,eng,slo') + /// + public string SubLangaugeID { get { return subLanguageId; } set { subLanguageId = value; } } + /// + /// Video file hash as calculated by one of the implementation functions as seen on http://trac.opensubtitles.org/projects/opensubtitles/wiki/HashSourceCodes + /// + public string MovieHash { get { return movieHash; } set { movieHash = value; } } + /// + /// Size of video file in bytes + /// + public long MovieByteSize { get { return movieByteSize; } set { movieByteSize = value; } } + /// + /// ​IMDb ID of movie this video is part of, belongs to. + /// + public string IMDbID { get { return imdbid; } set { imdbid = value; } } + } +} -- cgit v1.2.3 From 9ef0793b28cfc69ef73838523860a92b8c50b724 Mon Sep 17 00:00:00 2001 From: Luis Miguel Almánzar Date: Mon, 5 May 2014 03:36:26 -0400 Subject: finish implementation of opensubtitles downloader --- .../Providers/ISubtitleProvider.cs | 2 + .../Subtitles/OpenSubtitleDownloader.cs | 47 ++++++++++++++-------- .../SubtitleTypes/SubtitleSearchParameters.cs | 11 +++++ 3 files changed, 44 insertions(+), 16 deletions(-) (limited to 'OpenSubtitlesHandler/SubtitleTypes/SubtitleSearchParameters.cs') 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 GetSubtitles(SubtitleRequest request, CancellationToken cancellationToken) { - return request.ContentType == SubtitleMediaType.Episode - ? GetEpisodeSubtitles(request, cancellationToken) - : GetMovieSubtitles(request, cancellationToken); + return GetMediaSubtitleSubtitles(request, cancellationToken); } - public async Task GetMovieSubtitles(SubtitleRequest request, CancellationToken cancellationToken) - { - throw new NotImplementedException(); - } - - public async Task GetEpisodeSubtitles(SubtitleRequest request, CancellationToken cancellationToken) + public async Task 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 { 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 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; -- cgit v1.2.3 From ad7af6355db70793b7302be8202962b4ab300076 Mon Sep 17 00:00:00 2001 From: Luis Miguel Almánzar Date: Thu, 8 May 2014 23:24:58 -0400 Subject: fix episodes subtitles --- .../Subtitles/OpenSubtitleDownloader.cs | 37 +++++++++------- .../SubtitleTypes/SubtitleSearchParameters.cs | 50 +--------------------- 2 files changed, 24 insertions(+), 63 deletions(-) (limited to 'OpenSubtitlesHandler/SubtitleTypes/SubtitleSearchParameters.cs') diff --git a/MediaBrowser.Providers/Subtitles/OpenSubtitleDownloader.cs b/MediaBrowser.Providers/Subtitles/OpenSubtitleDownloader.cs index 7b40b5673..a8e9ff4a8 100644 --- a/MediaBrowser.Providers/Subtitles/OpenSubtitleDownloader.cs +++ b/MediaBrowser.Providers/Subtitles/OpenSubtitleDownloader.cs @@ -166,14 +166,7 @@ namespace MediaBrowser.Providers.Subtitles public async Task> SearchSubtitles(SubtitleSearchRequest request, CancellationToken cancellationToken) { var imdbIdText = request.GetProviderId(MetadataProviders.Imdb); - long imdbId; - - if (string.IsNullOrWhiteSpace(imdbIdText) || - !long.TryParse(imdbIdText.TrimStart('t'), NumberStyles.Any, _usCulture, out imdbId)) - { - _logger.Debug("Imdb id missing"); - return new List(); - } + long imdbId = 0; switch (request.ContentType) { @@ -190,6 +183,11 @@ namespace MediaBrowser.Providers.Subtitles _logger.Debug("Movie name missing"); return new List(); } + if (string.IsNullOrWhiteSpace(imdbIdText) || !long.TryParse(imdbIdText.TrimStart('t'), NumberStyles.Any, _usCulture, out imdbId)) + { + _logger.Debug("Imdb id missing"); + return new List(); + } break; } @@ -208,16 +206,25 @@ namespace MediaBrowser.Providers.Subtitles var hash = Utilities.ComputeHash(request.MediaPath); var fileInfo = new FileInfo(request.MediaPath); var movieByteSize = fileInfo.Length; - + var searchImdbId = request.ContentType == SubtitleMediaType.Movie ? imdbId.ToString(_usCulture) : ""; 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); - + ? new List { + new SubtitleSearchParameters(subLanguageId, + query: request.SeriesName, + season: request.ParentIndexNumber.Value.ToString(_usCulture), + episode: request.IndexNumber.Value.ToString(_usCulture)) + } + : new List { + new SubtitleSearchParameters(subLanguageId, imdbid: searchImdbId), + new SubtitleSearchParameters(subLanguageId, query: request.Name, imdbid: searchImdbId) + }; var parms = new List { - new SubtitleSearchParameters(subLanguageId, hash, movieByteSize), - subtitleSearchParameters + new SubtitleSearchParameters( subLanguageId, + movieHash: hash, + movieByteSize: movieByteSize, + imdbid: searchImdbId ), }; - + parms.AddRange(subtitleSearchParameters); var result = OpenSubtitles.SearchSubtitles(parms.ToArray()); if (!(result is MethodResponseSubtitleSearch)) { diff --git a/OpenSubtitlesHandler/SubtitleTypes/SubtitleSearchParameters.cs b/OpenSubtitlesHandler/SubtitleTypes/SubtitleSearchParameters.cs index f2e70ef81..46af6215b 100644 --- a/OpenSubtitlesHandler/SubtitleTypes/SubtitleSearchParameters.cs +++ b/OpenSubtitlesHandler/SubtitleTypes/SubtitleSearchParameters.cs @@ -25,63 +25,17 @@ namespace OpenSubtitlesHandler /// public struct SubtitleSearchParameters { - /// - /// Paramaters for subtitle search call - /// - /// List of language ISO639-3 language codes to search for, divided by ',' (e.g. 'cze,eng,slo') - /// Video file hash as calculated by one of the implementation functions as seen on http://trac.opensubtitles.org/projects/opensubtitles/wiki/HashSourceCodes - /// Size of video file in bytes - public SubtitleSearchParameters(string subLanguageId, string movieHash, long movieByteSize) + public SubtitleSearchParameters(string subLanguageId, string query = "", string season = "", string episode = "", string movieHash = "", long movieByteSize = 0, string imdbid = "") { this.subLanguageId = subLanguageId; this.movieHash = movieHash; this.movieByteSize = movieByteSize; - this.imdbid = ""; - this._episode = ""; - this._season = ""; - 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; - this.movieHash = ""; - this.movieByteSize = 0; - this.imdbid = ""; + this.imdbid = imdbid; this._episode = episode; this._season = season; this._query = query; } - /// - /// Paramaters for subtitle search call - /// - /// List of language ISO639-3 language codes to search for, divided by ',' (e.g. 'cze,eng,slo') - /// Video file hash as calculated by one of the implementation functions as seen on http://trac.opensubtitles.org/projects/opensubtitles/wiki/HashSourceCodes - /// Size of video file in bytes - /// IMDb ID of movie this video is part of, belongs to. - public SubtitleSearchParameters(string subLanguageId, string movieHash, long movieByteSize, string imdbid) - { - this.subLanguageId = subLanguageId; - this.movieHash = movieHash; - this.movieByteSize = movieByteSize; - this.imdbid = imdbid; - this._episode = ""; - this._season = ""; - this._query = ""; - } - private string subLanguageId; private string movieHash; private long movieByteSize; -- cgit v1.2.3