diff --git a/MediaBrowser.Common.Implementations/HttpClientManager/HttpClientManager.cs b/MediaBrowser.Common.Implementations/HttpClientManager/HttpClientManager.cs index 7fd7c8c1cc..96c207b7b8 100644 --- a/MediaBrowser.Common.Implementations/HttpClientManager/HttpClientManager.cs +++ b/MediaBrowser.Common.Implementations/HttpClientManager/HttpClientManager.cs @@ -113,11 +113,11 @@ namespace MediaBrowser.Common.Implementations.HttpClientManager AddRequestHeaders(request, options); request.AutomaticDecompression = enableHttpCompression ? DecompressionMethods.Deflate : DecompressionMethods.None; - + request.CachePolicy = options.CachePolicy == Net.HttpRequestCachePolicy.None ? new RequestCachePolicy(RequestCacheLevel.BypassCache) : new RequestCachePolicy(RequestCacheLevel.Revalidate); - + request.ConnectionGroupName = GetHostFromUrl(options.Url); request.KeepAlive = true; request.Method = method; @@ -270,18 +270,18 @@ namespace MediaBrowser.Common.Implementations.HttpClientManager var httpResponse = (HttpWebResponse)response; - EnsureSuccessStatusCode(httpResponse); + EnsureSuccessStatusCode(httpResponse, options); options.CancellationToken.ThrowIfCancellationRequested(); return GetResponseInfo(httpResponse, httpResponse.GetResponseStream(), GetContentLength(httpResponse)); } - + using (var response = await httpWebRequest.GetResponseAsync().ConfigureAwait(false)) { var httpResponse = (HttpWebResponse)response; - EnsureSuccessStatusCode(httpResponse); + EnsureSuccessStatusCode(httpResponse, options); options.CancellationToken.ThrowIfCancellationRequested(); @@ -345,29 +345,6 @@ namespace MediaBrowser.Common.Implementations.HttpClientManager { _logger.ErrorException("Error getting response from " + options.Url, ex); - if (options.LogErrorResponseBody) - { - try - { - using (var stream = ex.Response.GetResponseStream()) - { - if (stream != null) - { - using (var reader = new StreamReader(stream)) - { - var msg = reader.ReadToEnd(); - - _logger.Error(msg); - } - } - } - } - catch - { - - } - } - return new HttpException(ex.Message, ex); } @@ -496,7 +473,7 @@ namespace MediaBrowser.Common.Implementations.HttpClientManager { var httpResponse = (HttpWebResponse)response; - EnsureSuccessStatusCode(httpResponse); + EnsureSuccessStatusCode(httpResponse, options); options.CancellationToken.ThrowIfCancellationRequested(); @@ -686,13 +663,35 @@ namespace MediaBrowser.Common.Implementations.HttpClientManager return exception; } - private void EnsureSuccessStatusCode(HttpWebResponse response) + private void EnsureSuccessStatusCode(HttpWebResponse response, HttpRequestOptions options) { var statusCode = response.StatusCode; var isSuccessful = statusCode >= HttpStatusCode.OK && statusCode <= (HttpStatusCode)299; if (!isSuccessful) { + if (options.LogErrorResponseBody) + { + try + { + using (var stream = response.GetResponseStream()) + { + if (stream != null) + { + using (var reader = new StreamReader(stream)) + { + var msg = reader.ReadToEnd(); + + _logger.Error(msg); + } + } + } + } + catch + { + + } + } throw new HttpException(response.StatusDescription) { StatusCode = response.StatusCode }; } } diff --git a/MediaBrowser.Dlna/PlayTo/Device.cs b/MediaBrowser.Dlna/PlayTo/Device.cs index 12d4b41d15..08ea4f550a 100644 --- a/MediaBrowser.Dlna/PlayTo/Device.cs +++ b/MediaBrowser.Dlna/PlayTo/Device.cs @@ -577,6 +577,11 @@ namespace MediaBrowser.Dlna.PlayTo var trackString = (string) track; + if (string.IsNullOrWhiteSpace(trackString) || string.Equals(trackString, "NOT_IMPLEMENTED", StringComparison.OrdinalIgnoreCase)) + { + return false; + } + XElement uPnpResponse; try @@ -586,7 +591,7 @@ namespace MediaBrowser.Dlna.PlayTo catch { _logger.Error("Unable to parse xml {0}", trackString); - throw; + return false; } var e = uPnpResponse.Element(uPnpNamespaces.items); diff --git a/MediaBrowser.Dlna/PlayTo/DidlBuilder.cs b/MediaBrowser.Dlna/PlayTo/DidlBuilder.cs index 80235740fb..95622f3f7d 100644 --- a/MediaBrowser.Dlna/PlayTo/DidlBuilder.cs +++ b/MediaBrowser.Dlna/PlayTo/DidlBuilder.cs @@ -24,8 +24,8 @@ namespace MediaBrowser.Dlna.PlayTo const string DIDL_RELEASEDATE = @" {0}" + CRLF; const string DIDL_GENRE = @" {0}" + CRLF; const string DESCRIPTION = @" {0}" + CRLF; - const string DIDL_VIDEO_RES = @" {4}" + CRLF; - const string DIDL_AUDIO_RES = @" {3}" + CRLF; + const string DIDL_VIDEO_RES = @" {4}" + CRLF; + const string DIDL_AUDIO_RES = @" {3}" + CRLF; const string DIDL_IMAGE_RES = @" {0}" + CRLF; const string DIDL_ALBUMIMAGE_RES = @" {0}" + CRLF; const string DIDL_RATING = @" {0}" + CRLF;