private async Task <DiscoverResponse> GetModelInfo(TunerHostInfo info, bool throwAllExceptions, CancellationToken cancellationToken) { lock (_modelCache) { DiscoverResponse response; if (_modelCache.TryGetValue(info.Url, out response)) { if ((DateTime.UtcNow - response.DateQueried).TotalHours <= 12) { return(response); } } } try { using (var stream = await _httpClient.Get(new HttpRequestOptions() { Url = string.Format("{0}/discover.json", GetApiUrl(info, false)), CancellationToken = cancellationToken, TimeoutMs = Convert.ToInt32(TimeSpan.FromSeconds(5).TotalMilliseconds), BufferContent = false }).ConfigureAwait(false)) { var response = JsonSerializer.DeserializeFromStream <DiscoverResponse>(stream); if (!string.IsNullOrWhiteSpace(info.Id)) { lock (_modelCache) { _modelCache[info.Id] = response; } } return(response); } } catch (HttpException ex) { if (!throwAllExceptions && ex.StatusCode.HasValue && ex.StatusCode.Value == System.Net.HttpStatusCode.NotFound) { var defaultValue = "HDHR"; var response = new DiscoverResponse { ModelNumber = defaultValue }; if (!string.IsNullOrWhiteSpace(info.Id)) { // HDHR4 doesn't have this api lock (_modelCache) { _modelCache[info.Id] = response; } } return(response); } throw; } }
private async Task <DiscoverResponse> GetModelInfo(TunerHostInfo info, bool throwAllExceptions, CancellationToken cancellationToken) { var cacheKey = info.Id; lock (_modelCache) { if (!string.IsNullOrEmpty(cacheKey)) { if (_modelCache.TryGetValue(cacheKey, out DiscoverResponse response)) { return(response); } } } try { using var response = await _httpClientFactory.CreateClient(NamedClient.Default) .GetAsync(string.Format(CultureInfo.InvariantCulture, "{0}/discover.json", GetApiUrl(info)), HttpCompletionOption.ResponseHeadersRead, cancellationToken) .ConfigureAwait(false); await using var stream = await response.Content.ReadAsStreamAsync().ConfigureAwait(false); var discoverResponse = await JsonSerializer.DeserializeAsync <DiscoverResponse>(stream, cancellationToken : cancellationToken) .ConfigureAwait(false); if (!string.IsNullOrEmpty(cacheKey)) { lock (_modelCache) { _modelCache[cacheKey] = discoverResponse; } } return(discoverResponse); } catch (HttpException ex) { if (!throwAllExceptions && ex.StatusCode.HasValue && ex.StatusCode.Value == HttpStatusCode.NotFound) { const string DefaultValue = "HDHR"; var response = new DiscoverResponse { ModelNumber = DefaultValue }; if (!string.IsNullOrEmpty(cacheKey)) { // HDHR4 doesn't have this api lock (_modelCache) { _modelCache[cacheKey] = response; } } return(response); } throw; } }
private async Task <DiscoverResponse> GetModelInfo(TunerHostInfo info, bool throwAllExceptions, CancellationToken cancellationToken) { var cacheKey = info.Id; lock (_modelCache) { if (!string.IsNullOrEmpty(cacheKey)) { if (_modelCache.TryGetValue(cacheKey, out DiscoverResponse response)) { return(response); } } } try { using (var response = await _httpClient.SendAsync(new HttpRequestOptions() { Url = string.Format("{0}/discover.json", GetApiUrl(info)), CancellationToken = cancellationToken, BufferContent = false }, "GET").ConfigureAwait(false)) { using (var stream = response.Content) { var discoverResponse = await JsonSerializer.DeserializeFromStreamAsync <DiscoverResponse>(stream).ConfigureAwait(false); if (!string.IsNullOrEmpty(cacheKey)) { lock (_modelCache) { _modelCache[cacheKey] = discoverResponse; } } return(discoverResponse); } } } catch (HttpException ex) { if (!throwAllExceptions && ex.StatusCode.HasValue && ex.StatusCode.Value == System.Net.HttpStatusCode.NotFound) { var defaultValue = "HDHR"; var response = new DiscoverResponse { ModelNumber = defaultValue }; if (!string.IsNullOrEmpty(cacheKey)) { // HDHR4 doesn't have this api lock (_modelCache) { _modelCache[cacheKey] = response; } } return(response); } throw; } }