Explorar o código

Use JsonContent where possible

Should reduce the # of allocated bytes
Bond_009 %!s(int64=3) %!d(string=hai) anos
pai
achega
beafd6eaab

+ 4 - 5
Emby.Server.Implementations/LiveTv/Listings/SchedulesDirect.cs

@@ -9,6 +9,7 @@ using System.Globalization;
 using System.Linq;
 using System.Net;
 using System.Net.Http;
+using System.Net.Http.Json;
 using System.Net.Http.Headers;
 using System.Net.Mime;
 using System.Security.Cryptography;
@@ -101,11 +102,10 @@ namespace Emby.Server.Implementations.LiveTv.Listings
                     }
                 };
 
-            var requestString = JsonSerializer.Serialize(requestList, _jsonOptions);
-            _logger.LogDebug("Request string for schedules is: {RequestString}", requestString);
+            _logger.LogDebug("Request string for schedules is: {@RequestString}", requestList);
 
             using var options = new HttpRequestMessage(HttpMethod.Post, ApiUrl + "/schedules");
-            options.Content = new StringContent(requestString, Encoding.UTF8, MediaTypeNames.Application.Json);
+            options.Content = JsonContent.Create(requestList, options: _jsonOptions);
             options.Headers.TryAddWithoutValidation("token", token);
             using var response = await Send(options, true, info, cancellationToken).ConfigureAwait(false);
             await using var responseStream = await response.Content.ReadAsStreamAsync(cancellationToken).ConfigureAwait(false);
@@ -121,8 +121,7 @@ namespace Emby.Server.Implementations.LiveTv.Listings
             programRequestOptions.Headers.TryAddWithoutValidation("token", token);
 
             var programIds = dailySchedules.SelectMany(d => d.Programs.Select(s => s.ProgramId)).Distinct();
-            programRequestOptions.Content = new ByteArrayContent(JsonSerializer.SerializeToUtf8Bytes(programIds, _jsonOptions));
-            programRequestOptions.Content.Headers.ContentType = MediaTypeHeaderValue.Parse(MediaTypeNames.Application.Json);
+            programRequestOptions.Content = JsonContent.Create(programIds, options: _jsonOptions);
 
             using var innerResponse = await Send(programRequestOptions, true, info, cancellationToken).ConfigureAwait(false);
             await using var innerResponseStream = await innerResponse.Content.ReadAsStreamAsync(cancellationToken).ConfigureAwait(false);

+ 1 - 0
MediaBrowser.Model/Configuration/LibraryOptions.cs

@@ -81,6 +81,7 @@ namespace MediaBrowser.Model.Configuration
         public bool RequirePerfectSubtitleMatch { get; set; }
 
         public bool SaveSubtitlesWithMedia { get; set; }
+
         public bool AutomaticallyAddToCollection { get; set; }
 
         public TypeOptions[] TypeOptions { get; set; }

+ 3 - 3
tests/Jellyfin.Server.Integration.Tests/AuthHelper.cs

@@ -1,6 +1,7 @@
 using System;
 using System.Net;
 using System.Net.Http;
+using System.Net.Http.Json;
 using System.Net.Http.Headers;
 using System.Net.Mime;
 using System.Text.Json;
@@ -26,14 +27,13 @@ namespace Jellyfin.Server.Integration.Tests
             using var completeResponse = await client.PostAsync("/Startup/Complete", new ByteArrayContent(Array.Empty<byte>())).ConfigureAwait(false);
             Assert.Equal(HttpStatusCode.NoContent, completeResponse.StatusCode);
 
-            using var content = new ByteArrayContent(JsonSerializer.SerializeToUtf8Bytes(
+            using var content = JsonContent.Create(
                 new AuthenticateUserByName()
                 {
                     Username = user!.Name,
                     Pw = user.Password,
                 },
-                jsonOptions));
-            content.Headers.ContentType = MediaTypeHeaderValue.Parse(MediaTypeNames.Application.Json);
+                options: jsonOptions);
             content.Headers.Add("X-Emby-Authorization", DummyAuthHeader);
 
             using var authResponse = await client.PostAsync("/Users/AuthenticateByName", content).ConfigureAwait(false);

+ 4 - 6
tests/Jellyfin.Server.Integration.Tests/Controllers/DlnaControllerTests.cs

@@ -2,6 +2,7 @@ using System;
 using System.Linq;
 using System.Net;
 using System.Net.Http;
+using System.Net.Http.Json;
 using System.Net.Http.Headers;
 using System.Net.Mime;
 using System.Text;
@@ -62,8 +63,7 @@ namespace Jellyfin.Server.Integration.Tests.Controllers
                 Name = "ThisProfileDoesNotExist"
             };
 
-            using var content = new ByteArrayContent(JsonSerializer.SerializeToUtf8Bytes(deviceProfile, _jsonOptions));
-            content.Headers.ContentType = MediaTypeHeaderValue.Parse(MediaTypeNames.Application.Json);
+            using var content = JsonContent.Create(deviceProfile, options: _jsonOptions);
             using var getResponse = await client.PostAsync("/Dlna/Profiles/" + NonExistentProfile, content).ConfigureAwait(false);
             Assert.Equal(HttpStatusCode.NotFound, getResponse.StatusCode);
         }
@@ -80,8 +80,7 @@ namespace Jellyfin.Server.Integration.Tests.Controllers
                 Name = "ThisProfileIsNew"
             };
 
-            using var content = new ByteArrayContent(JsonSerializer.SerializeToUtf8Bytes(deviceProfile, _jsonOptions));
-            content.Headers.ContentType = MediaTypeHeaderValue.Parse(MediaTypeNames.Application.Json);
+            using var content = JsonContent.Create(deviceProfile, options: _jsonOptions);
             using var getResponse = await client.PostAsync("/Dlna/Profiles", content).ConfigureAwait(false);
             Assert.Equal(HttpStatusCode.NoContent, getResponse.StatusCode);
         }
@@ -120,8 +119,7 @@ namespace Jellyfin.Server.Integration.Tests.Controllers
                 Id = _newDeviceProfileId
             };
 
-            using var content = new ByteArrayContent(JsonSerializer.SerializeToUtf8Bytes(updatedProfile, _jsonOptions));
-            content.Headers.ContentType = MediaTypeHeaderValue.Parse(MediaTypeNames.Application.Json);
+            using var content = JsonContent.Create(updatedProfile, options: _jsonOptions);
             using var getResponse = await client.PostAsync("/Dlna/Profiles", content).ConfigureAwait(false);
             Assert.Equal(HttpStatusCode.NoContent, getResponse.StatusCode);
         }

+ 3 - 4
tests/Jellyfin.Server.Integration.Tests/Controllers/MediaStructureControllerTests.cs

@@ -1,6 +1,7 @@
 using System;
 using System.Net;
 using System.Net.Http;
+using System.Net.Http.Json;
 using System.Net.Http.Headers;
 using System.Net.Mime;
 using System.Text.Json;
@@ -71,8 +72,7 @@ namespace Jellyfin.Server.Integration.Tests.Controllers
                 Path = "/this/path/doesnt/exist"
             };
 
-            using var postContent = new ByteArrayContent(JsonSerializer.SerializeToUtf8Bytes(data, _jsonOptions));
-            postContent.Headers.ContentType = MediaTypeHeaderValue.Parse(MediaTypeNames.Application.Json);
+            using var postContent = JsonContent.Create(data, options: _jsonOptions);
             var response = await client.PostAsync("Library/VirtualFolders/Paths", postContent).ConfigureAwait(false);
 
             Assert.Equal(HttpStatusCode.NotFound, response.StatusCode);
@@ -90,8 +90,7 @@ namespace Jellyfin.Server.Integration.Tests.Controllers
                 PathInfo = new MediaPathInfo("test")
             };
 
-            using var postContent = new ByteArrayContent(JsonSerializer.SerializeToUtf8Bytes(data, _jsonOptions));
-            postContent.Headers.ContentType = MediaTypeHeaderValue.Parse(MediaTypeNames.Application.Json);
+            using var postContent = JsonContent.Create(data, options: _jsonOptions);
             var response = await client.PostAsync("Library/VirtualFolders/Paths/Update", postContent).ConfigureAwait(false);
 
             Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode);

+ 3 - 4
tests/Jellyfin.Server.Integration.Tests/Controllers/StartupControllerTests.cs

@@ -1,6 +1,7 @@
 using System;
 using System.Net;
 using System.Net.Http;
+using System.Net.Http.Json;
 using System.Net.Http.Headers;
 using System.Net.Mime;
 using System.Text.Json;
@@ -36,8 +37,7 @@ namespace Jellyfin.Server.Integration.Tests.Controllers
                 PreferredMetadataLanguage = "nl"
             };
 
-            using var postContent = new ByteArrayContent(JsonSerializer.SerializeToUtf8Bytes(config, _jsonOptions));
-            postContent.Headers.ContentType = MediaTypeHeaderValue.Parse(MediaTypeNames.Application.Json);
+            using var postContent = JsonContent.Create(config, options: _jsonOptions);
             using var postResponse = await client.PostAsync("/Startup/Configuration", postContent).ConfigureAwait(false);
             Assert.Equal(HttpStatusCode.NoContent, postResponse.StatusCode);
 
@@ -80,8 +80,7 @@ namespace Jellyfin.Server.Integration.Tests.Controllers
                 Password = "NewPassword"
             };
 
-            using var postContent = new ByteArrayContent(JsonSerializer.SerializeToUtf8Bytes(user, _jsonOptions));
-            postContent.Headers.ContentType = MediaTypeHeaderValue.Parse(MediaTypeNames.Application.Json);
+            using var postContent = JsonContent.Create(user, options: _jsonOptions);
             var postResponse = await client.PostAsync("/Startup/User", postContent).ConfigureAwait(false);
             Assert.Equal(HttpStatusCode.NoContent, postResponse.StatusCode);
 

+ 3 - 4
tests/Jellyfin.Server.Integration.Tests/Controllers/UserControllerTests.cs

@@ -3,6 +3,7 @@ using System.Globalization;
 using System.Linq;
 using System.Net;
 using System.Net.Http;
+using System.Net.Http.Json;
 using System.Net.Http.Headers;
 using System.Net.Mime;
 using System.Text.Json;
@@ -32,15 +33,13 @@ namespace Jellyfin.Server.Integration.Tests.Controllers
 
         private Task<HttpResponseMessage> CreateUserByName(HttpClient httpClient, CreateUserByName request)
         {
-            using var postContent = new ByteArrayContent(JsonSerializer.SerializeToUtf8Bytes(request, _jsonOpions));
-            postContent.Headers.ContentType = MediaTypeHeaderValue.Parse(MediaTypeNames.Application.Json);
+            using var postContent = JsonContent.Create(request, options: _jsonOpions);
             return httpClient.PostAsync("Users/New", postContent);
         }
 
         private Task<HttpResponseMessage> UpdateUserPassword(HttpClient httpClient, Guid userId, UpdateUserPassword request)
         {
-            using var postContent = new ByteArrayContent(JsonSerializer.SerializeToUtf8Bytes(request, _jsonOpions));
-            postContent.Headers.ContentType = MediaTypeHeaderValue.Parse(MediaTypeNames.Application.Json);
+            using var postContent = JsonContent.Create(request, options: _jsonOpions);
             return httpClient.PostAsync("Users/" + userId.ToString("N", CultureInfo.InvariantCulture) + "/Password", postContent);
         }