Exemplo n.º 1
0
        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;
            }
        }
Exemplo n.º 2
0
        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;
            }
        }
Exemplo n.º 3
0
        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;
            }
        }