Beispiel #1
0
        public async Task <IEnumerable <RemoteSubtitleInfo> > Search(SubtitleSearchRequest request,
                                                                     CancellationToken cancellationToken)
        {
            var language = _localizationManager.FindLanguageInfo(request.Language);

            if (language == null || !string.Equals(language.TwoLetterISOLanguageName, "PL", StringComparison.OrdinalIgnoreCase))
            {
                return(Array.Empty <RemoteSubtitleInfo>());
            }

            var mediaPath = request.MediaPath;

            _logger.LogInformation($"Reading {mediaPath}");

            var hash = await NapiCore.GetHash(request.MediaPath, cancellationToken, _fileSystem);

            _logger.LogInformation($"Computed hash {hash} of {mediaPath} for NapiSub");

            var requestMessage = NapiCore.CreateRequest(hash, language.TwoLetterISOLanguageName);

            try
            {
                using (var response = await _httpClient.SendAsync(requestMessage).ConfigureAwait(false))
                {
                    var xml = await response.Content.ReadAsStringAsync().ConfigureAwait(false);

                    var status = XmlParser.GetStatusFromXml(xml);

                    _logger.LogInformation($"Response status: {status}");

                    if (status != null && status == "success")
                    {
                        _logger.LogInformation("Subtitles found by NapiSub");

                        return(new List <RemoteSubtitleInfo>
                        {
                            new RemoteSubtitleInfo
                            {
                                IsHashMatch = true,
                                ProviderName = Name,
                                Id = hash,
                                Name = "A subtitle matched by hash",
                                ThreeLetterISOLanguageName = language.ThreeLetterISOLanguageName,
                                Format = "srt"
                            }
                        });
                    }

                    _logger.LogInformation("No subtitles found by NapiSub");
                    return(new List <RemoteSubtitleInfo>());
                }
            }
            catch (Exception)
            {
                return(new List <RemoteSubtitleInfo>());
            }
        }
        public async Task <IEnumerable <RemoteSubtitleInfo> > Search(SubtitleSearchRequest request,
                                                                     CancellationToken cancellationToken)
        {
            var language = _localizationManager.FindLanguageInfo(request.Language.AsSpan());

            if (language == null || !string.Equals(language.TwoLetterISOLanguageName, "PL", StringComparison.OrdinalIgnoreCase))
            {
                return(Array.Empty <RemoteSubtitleInfo>());
            }

            var hash = await NapiCore.GetHash(request.MediaPath, cancellationToken, _fileSystem, _logger).ConfigureAwait(false);

            var opts = NapiCore.CreateRequest(hash, language.TwoLetterISOLanguageName);

            try
            {
                using (var response = await _httpClient.Post(opts).ConfigureAwait(false))
                {
                    using (var reader = new StreamReader(response.Content))
                    {
                        var xml = await reader.ReadToEndAsync().ConfigureAwait(false);

                        var status = XmlParser.GetStatusFromXml(xml);

                        if (status != null && status == "success")
                        {
                            _logger.Info("Subtitles found by NapiSub");

                            return(new List <RemoteSubtitleInfo>
                            {
                                new RemoteSubtitleInfo
                                {
                                    IsHashMatch = true,
                                    ProviderName = Name,
                                    Id = hash,
                                    Name = "A subtitle matched by hash",
                                    ThreeLetterISOLanguageName = language.ThreeLetterISOLanguageName,
                                    Format = "srt"
                                }
                            });
                        }
                    }

                    _logger.Info("No subtitles found by NapiSub");
                    return(new List <RemoteSubtitleInfo>());
                }
            }
            catch (HttpException ex)
            {
                if (!ex.StatusCode.HasValue || ex.StatusCode.Value != HttpStatusCode.NotFound)
                {
                    throw;
                }
                _logger.Debug("ERROR");
                return(new List <RemoteSubtitleInfo>());
            }
        }
        public async Task <SubtitleResponse> GetSubtitles(string hash, CancellationToken cancellationToken)
        {
            var opts = NapiCore.CreateRequest(hash, "PL");

            _logger.Info($"Requesting {opts.Url}");

            try
            {
                using (var response = await _httpClient.Post(opts).ConfigureAwait(false))
                {
                    using (var reader = new StreamReader(response.Content))
                    {
                        var xml = await reader.ReadToEndAsync().ConfigureAwait(false);

                        var status = XmlParser.GetStatusFromXml(xml);

                        if (status != null && status == "success")
                        {
                            var subtitlesBase64 = XmlParser.GetSubtitlesBase64(xml);
                            var stream          = XmlParser.GetSubtitlesStream(subtitlesBase64);
                            var subRip          = SubtitlesConverter.ConvertToSubRipStream(stream);

                            if (subRip != null)
                            {
                                return(new SubtitleResponse
                                {
                                    Format = "srt",
                                    Language = "PL",
                                    Stream = subRip
                                });
                            }
                        }
                    }
                }

                _logger.Info("No subtitles downloaded");
                return(new SubtitleResponse());
            }
            catch (HttpException ex)
            {
                if (!ex.StatusCode.HasValue || ex.StatusCode.Value != HttpStatusCode.NotFound)
                {
                    throw;
                }
                _logger.Debug("ERROR");
                return(new SubtitleResponse());
            }
        }
Beispiel #4
0
        public async Task <SubtitleResponse> GetSubtitles(string hash, CancellationToken cancellationToken)
        {
            var request = NapiCore.CreateRequest(hash, "PL");

            try
            {
                using (var response = await _httpClient.SendAsync(request).ConfigureAwait(false))
                {
                    var xml = await response.Content.ReadAsStringAsync().ConfigureAwait(false);

                    var status = XmlParser.GetStatusFromXml(xml);

                    _logger.LogInformation($"Response status: {status}");

                    if (status != null && status == "success")
                    {
                        var subtitlesBase64 = XmlParser.GetSubtitlesBase64(xml);
                        var stream          = XmlParser.GetSubtitlesStream(subtitlesBase64);
                        var subRip          = SubtitlesConverter.ConvertToSubRipStream(stream);

                        if (subRip != null)
                        {
                            return(new SubtitleResponse
                            {
                                Format = "srt",
                                Language = "PL",
                                Stream = subRip
                            });
                        }
                    }
                }

                _logger.LogInformation("No subtitles downloaded");
                return(new SubtitleResponse());
            }
            catch (Exception)
            {
                return(new SubtitleResponse());
            }
        }