From c2361db772591e176fcf2ded2e3b1725cf1c5dd7 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Sun, 22 Oct 2017 19:27:09 -0400 Subject: [PATCH 1/4] separate encoding from content type values --- .../ContentDirectoryBrowser.cs | 2 +- Emby.Dlna/PlayTo/SsdpHttpClient.cs | 18 ++++++++--- .../HttpClientManager/HttpClientManager.cs | 32 ++++++++++++++++--- MediaBrowser.Common/Net/HttpRequestOptions.cs | 4 +++ Mono.Nat/Upnp/Messages/GetServicesMessage.cs | 4 +++ Mono.Nat/Upnp/Messages/UpnpMessage.cs | 7 +++- 6 files changed, 56 insertions(+), 11 deletions(-) diff --git a/Emby.Dlna/ContentDirectory/ContentDirectoryBrowser.cs b/Emby.Dlna/ContentDirectory/ContentDirectoryBrowser.cs index 9c5c5fb64f..61501635fa 100644 --- a/Emby.Dlna/ContentDirectory/ContentDirectoryBrowser.cs +++ b/Emby.Dlna/ContentDirectory/ContentDirectoryBrowser.cs @@ -33,7 +33,7 @@ namespace Emby.Dlna.ContentDirectory { CancellationToken = cancellationToken, UserAgent = "Emby", - RequestContentType = "text/xml; charset=\"utf-8\"", + RequestContentType = "text/xml", LogErrorResponseBody = true, Url = request.ContentDirectoryUrl, BufferContent = false diff --git a/Emby.Dlna/PlayTo/SsdpHttpClient.cs b/Emby.Dlna/PlayTo/SsdpHttpClient.cs index 6c66a999c8..40fe010a23 100644 --- a/Emby.Dlna/PlayTo/SsdpHttpClient.cs +++ b/Emby.Dlna/PlayTo/SsdpHttpClient.cs @@ -72,7 +72,10 @@ namespace Emby.Dlna.PlayTo Url = url, UserAgent = USERAGENT, LogErrorResponseBody = true, - BufferContent = false + BufferContent = false, + + // The periodic requests may keep some devices awake + LogRequestAsDebug = true }; options.RequestHeaders["HOST"] = ip + ":" + port.ToString(_usCulture); @@ -93,7 +96,10 @@ namespace Emby.Dlna.PlayTo Url = url, UserAgent = USERAGENT, LogErrorResponseBody = true, - BufferContent = false + BufferContent = false, + + // The periodic requests may keep some devices awake + LogRequestAsDebug = true }; options.RequestHeaders["FriendlyName.DLNA.ORG"] = FriendlyName; @@ -125,7 +131,10 @@ namespace Emby.Dlna.PlayTo UserAgent = USERAGENT, LogRequest = logRequest || _config.GetDlnaConfiguration().EnableDebugLog, LogErrorResponseBody = true, - BufferContent = false + BufferContent = false, + + // The periodic requests may keep some devices awake + LogRequestAsDebug = true }; options.RequestHeaders["SOAPAction"] = soapAction; @@ -137,7 +146,8 @@ namespace Emby.Dlna.PlayTo options.RequestHeaders["contentFeatures.dlna.org"] = header; } - options.RequestContentType = "text/xml; charset=\"utf-8\""; + options.RequestContentType = "text/xml"; + options.RequestContentEncoding = Encoding.UTF8; options.RequestContent = postData; return _httpClient.Post(options); diff --git a/Emby.Server.Implementations/HttpClientManager/HttpClientManager.cs b/Emby.Server.Implementations/HttpClientManager/HttpClientManager.cs index 3fdd051355..ae53e3a5b9 100644 --- a/Emby.Server.Implementations/HttpClientManager/HttpClientManager.cs +++ b/Emby.Server.Implementations/HttpClientManager/HttpClientManager.cs @@ -320,8 +320,6 @@ namespace Emby.Server.Implementations.HttpClientManager private async Task GetCachedResponse(string responseCachePath, TimeSpan cacheLength, string url) { - _logger.Info("Checking for cache file {0}", responseCachePath); - try { if (_fileSystem.GetLastWriteTimeUtc(responseCachePath).Add(cacheLength) > DateTime.UtcNow) @@ -402,7 +400,17 @@ namespace Emby.Server.Implementations.HttpClientManager var bytes = options.RequestContentBytes ?? Encoding.UTF8.GetBytes(options.RequestContent ?? string.Empty); - httpWebRequest.ContentType = options.RequestContentType ?? "application/x-www-form-urlencoded"; + var contentType = options.RequestContentType ?? "application/x-www-form-urlencoded"; + + if (options.RequestContentEncoding != null) + { + if (options.RequestContentEncoding.Equals(Encoding.UTF8)) + { + contentType = contentType.TrimEnd(';') + "; charset=\"utf-8\""; + } + } + + httpWebRequest.ContentType = contentType; httpWebRequest.ContentLength = bytes.Length; (await httpWebRequest.GetRequestStreamAsync().ConfigureAwait(false)).Write(bytes, 0, bytes.Length); @@ -430,7 +438,14 @@ namespace Emby.Server.Implementations.HttpClientManager if (options.LogRequest) { - _logger.Info("HttpClientManager {0}: {1}", httpMethod.ToUpper(), options.Url); + if (options.LogRequestAsDebug) + { + _logger.Debug("HttpClientManager {0}: {1}", httpMethod.ToUpper(), options.Url); + } + else + { + _logger.Info("HttpClientManager {0}: {1}", httpMethod.ToUpper(), options.Url); + } } try @@ -597,7 +612,14 @@ namespace Emby.Server.Implementations.HttpClientManager if (options.LogRequest) { - _logger.Info("HttpClientManager.GetTempFileResponse url: {0}", options.Url); + if (options.LogRequestAsDebug) + { + _logger.Debug("HttpClientManager.GetTempFileResponse url: {0}", options.Url); + } + else + { + _logger.Info("HttpClientManager.GetTempFileResponse url: {0}", options.Url); + } } var client = GetHttpClient(GetHostFromUrl(options.Url), options.EnableHttpCompression); diff --git a/MediaBrowser.Common/Net/HttpRequestOptions.cs b/MediaBrowser.Common/Net/HttpRequestOptions.cs index 4a894e6624..0950df0210 100644 --- a/MediaBrowser.Common/Net/HttpRequestOptions.cs +++ b/MediaBrowser.Common/Net/HttpRequestOptions.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Linq; using System.Net; using System.Threading; +using System.Text; namespace MediaBrowser.Common.Net { @@ -90,6 +91,7 @@ namespace MediaBrowser.Common.Net public bool BufferContent { get; set; } public bool LogRequest { get; set; } + public bool LogRequestAsDebug { get; set; } public bool LogErrors { get; set; } public bool LogErrorResponseBody { get; set; } @@ -102,6 +104,8 @@ namespace MediaBrowser.Common.Net public bool PreferIpv4 { get; set; } public bool EnableDefaultUserAgent { get; set; } + public Encoding RequestContentEncoding { get; set; } + private string GetHeaderValue(string name) { string value; diff --git a/Mono.Nat/Upnp/Messages/GetServicesMessage.cs b/Mono.Nat/Upnp/Messages/GetServicesMessage.cs index 9d29f98fdf..3395b7596f 100644 --- a/Mono.Nat/Upnp/Messages/GetServicesMessage.cs +++ b/Mono.Nat/Upnp/Messages/GetServicesMessage.cs @@ -64,6 +64,10 @@ namespace Mono.Nat.Upnp { var req = new HttpRequestOptions(); + // The periodic request logging may keep some devices awake + req.LogRequestAsDebug = true; + req.LogErrors = false; + req.Url = "http://" + this.hostAddress.ToString() + this.servicesDescriptionUrl; req.RequestHeaders.Add("ACCEPT-LANGUAGE", "en"); diff --git a/Mono.Nat/Upnp/Messages/UpnpMessage.cs b/Mono.Nat/Upnp/Messages/UpnpMessage.cs index d15e48b2f5..05280172ba 100644 --- a/Mono.Nat/Upnp/Messages/UpnpMessage.cs +++ b/Mono.Nat/Upnp/Messages/UpnpMessage.cs @@ -52,9 +52,14 @@ namespace Mono.Nat.Upnp var req = new HttpRequestOptions(); req.LogErrors = false; + + // The periodic request logging may keep some devices awake + req.LogRequestAsDebug = true; + req.Url = ss; req.EnableKeepAlive = false; - req.RequestContentType = "text/xml; charset=\"utf-8\""; + req.RequestContentType = "text/xml"; + req.RequestContentEncoding = Encoding.UTF8; req.RequestHeaders.Add("SOAPACTION", "\"" + device.ServiceType + "#" + upnpMethod + "\""); string bodyString = " Date: Sun, 22 Oct 2017 19:36:22 -0400 Subject: [PATCH 2/4] adjust header values --- Emby.Dlna/PlayTo/SsdpHttpClient.cs | 2 +- .../HttpClientManager/HttpClientManager.cs | 13 ++++++------- MediaBrowser.Common/Net/HttpRequestOptions.cs | 2 +- Mono.Nat/Upnp/Messages/UpnpMessage.cs | 2 +- 4 files changed, 9 insertions(+), 10 deletions(-) diff --git a/Emby.Dlna/PlayTo/SsdpHttpClient.cs b/Emby.Dlna/PlayTo/SsdpHttpClient.cs index 40fe010a23..78b688d92a 100644 --- a/Emby.Dlna/PlayTo/SsdpHttpClient.cs +++ b/Emby.Dlna/PlayTo/SsdpHttpClient.cs @@ -147,7 +147,7 @@ namespace Emby.Dlna.PlayTo } options.RequestContentType = "text/xml"; - options.RequestContentEncoding = Encoding.UTF8; + options.AppendCharsetToMimeType = true; options.RequestContent = postData; return _httpClient.Post(options); diff --git a/Emby.Server.Implementations/HttpClientManager/HttpClientManager.cs b/Emby.Server.Implementations/HttpClientManager/HttpClientManager.cs index ae53e3a5b9..ef95b47c38 100644 --- a/Emby.Server.Implementations/HttpClientManager/HttpClientManager.cs +++ b/Emby.Server.Implementations/HttpClientManager/HttpClientManager.cs @@ -397,17 +397,16 @@ namespace Emby.Server.Implementations.HttpClientManager { try { - var bytes = options.RequestContentBytes ?? - Encoding.UTF8.GetBytes(options.RequestContent ?? string.Empty); + // TODO: We can always put this in the options object if needed + var requestEncoding = Encoding.UTF8; + + var bytes = options.RequestContentBytes ?? requestEncoding.GetBytes(options.RequestContent ?? string.Empty); var contentType = options.RequestContentType ?? "application/x-www-form-urlencoded"; - if (options.RequestContentEncoding != null) + if (options.AppendCharsetToMimeType) { - if (options.RequestContentEncoding.Equals(Encoding.UTF8)) - { - contentType = contentType.TrimEnd(';') + "; charset=\"utf-8\""; - } + contentType = contentType.TrimEnd(';') + "; charset=\"utf-8\""; } httpWebRequest.ContentType = contentType; diff --git a/MediaBrowser.Common/Net/HttpRequestOptions.cs b/MediaBrowser.Common/Net/HttpRequestOptions.cs index 0950df0210..51859ecdb5 100644 --- a/MediaBrowser.Common/Net/HttpRequestOptions.cs +++ b/MediaBrowser.Common/Net/HttpRequestOptions.cs @@ -104,7 +104,7 @@ namespace MediaBrowser.Common.Net public bool PreferIpv4 { get; set; } public bool EnableDefaultUserAgent { get; set; } - public Encoding RequestContentEncoding { get; set; } + public bool AppendCharsetToMimeType { get; set; } private string GetHeaderValue(string name) { diff --git a/Mono.Nat/Upnp/Messages/UpnpMessage.cs b/Mono.Nat/Upnp/Messages/UpnpMessage.cs index 05280172ba..b0264fc4ac 100644 --- a/Mono.Nat/Upnp/Messages/UpnpMessage.cs +++ b/Mono.Nat/Upnp/Messages/UpnpMessage.cs @@ -59,7 +59,7 @@ namespace Mono.Nat.Upnp req.Url = ss; req.EnableKeepAlive = false; req.RequestContentType = "text/xml"; - req.RequestContentEncoding = Encoding.UTF8; + req.AppendCharsetToMimeType = true; req.RequestHeaders.Add("SOAPACTION", "\"" + device.ServiceType + "#" + upnpMethod + "\""); string bodyString = " Date: Sun, 22 Oct 2017 20:43:52 -0400 Subject: [PATCH 3/4] fix image analysis --- Emby.Drawing/ImageProcessor.cs | 2 +- Emby.Server.Implementations/Dto/DtoService.cs | 4 ++-- .../Library/Resolvers/PhotoAlbumResolver.cs | 7 +++++-- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/Emby.Drawing/ImageProcessor.cs b/Emby.Drawing/ImageProcessor.cs index 1c60abfb5b..e28d22cf7b 100644 --- a/Emby.Drawing/ImageProcessor.cs +++ b/Emby.Drawing/ImageProcessor.cs @@ -461,7 +461,7 @@ namespace Emby.Drawing }; } - var path = item.Path; + var path = info.Path; _logger.Info("Getting image size for item {0} {1}", item.GetType().Name, path); var size = GetImageSize(path, allowSlowMethods); diff --git a/Emby.Server.Implementations/Dto/DtoService.cs b/Emby.Server.Implementations/Dto/DtoService.cs index a0176e406c..0a316fcf1a 100644 --- a/Emby.Server.Implementations/Dto/DtoService.cs +++ b/Emby.Server.Implementations/Dto/DtoService.cs @@ -1655,9 +1655,9 @@ namespace Emby.Server.Implementations.Dto return null; } } - catch + catch (Exception ex) { - //_logger.ErrorException("Failed to determine primary image aspect ratio for {0}", ex, path); + //_logger.ErrorException("Failed to determine primary image aspect ratio for {0}", ex, imageInfo.Path); return null; } } diff --git a/Emby.Server.Implementations/Library/Resolvers/PhotoAlbumResolver.cs b/Emby.Server.Implementations/Library/Resolvers/PhotoAlbumResolver.cs index a9cfea34db..311abf14e3 100644 --- a/Emby.Server.Implementations/Library/Resolvers/PhotoAlbumResolver.cs +++ b/Emby.Server.Implementations/Library/Resolvers/PhotoAlbumResolver.cs @@ -30,8 +30,11 @@ namespace Emby.Server.Implementations.Library.Resolvers // Must be an image file within a photo collection if (args.IsDirectory) { - if (string.Equals(args.GetCollectionType(), CollectionType.HomeVideos, StringComparison.OrdinalIgnoreCase) || - string.Equals(args.GetCollectionType(), CollectionType.Photos, StringComparison.OrdinalIgnoreCase)) + // Must be an image file within a photo collection + var collectionType = args.GetCollectionType(); + + if (string.Equals(collectionType, CollectionType.Photos, StringComparison.OrdinalIgnoreCase) || + (string.Equals(collectionType, CollectionType.HomeVideos, StringComparison.OrdinalIgnoreCase) && args.GetLibraryOptions().EnablePhotos)) { if (HasPhotos(args)) { From 141e5b56b0a9c2cdf125314abc68e61dd414bda9 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Mon, 23 Oct 2017 02:06:11 -0400 Subject: [PATCH 4/4] 3.2.33.19 --- SharedVersion.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SharedVersion.cs b/SharedVersion.cs index 9e5fa9c8e2..67b6004adc 100644 --- a/SharedVersion.cs +++ b/SharedVersion.cs @@ -1,3 +1,3 @@ using System.Reflection; -[assembly: AssemblyVersion("3.2.33.18")] +[assembly: AssemblyVersion("3.2.33.19")]