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>()); } }