From e553eba31e9f0e05effc30417ee53c02d63304bd Mon Sep 17 00:00:00 2001 From: Bond_009 Date: Wed, 25 Sep 2019 17:43:20 +0200 Subject: Use System.Text.Json api --- .../Data/SqliteDisplayPreferencesRepository.cs | 36 ++++++++++---------- .../Data/SqliteItemRepository.cs | 39 +++++++++------------- .../Data/SqliteUserRepository.cs | 18 +++++----- 3 files changed, 42 insertions(+), 51 deletions(-) (limited to 'Emby.Server.Implementations/Data') diff --git a/Emby.Server.Implementations/Data/SqliteDisplayPreferencesRepository.cs b/Emby.Server.Implementations/Data/SqliteDisplayPreferencesRepository.cs index 1a67ab912..2cd4d65b3 100644 --- a/Emby.Server.Implementations/Data/SqliteDisplayPreferencesRepository.cs +++ b/Emby.Server.Implementations/Data/SqliteDisplayPreferencesRepository.cs @@ -2,44 +2,44 @@ using System; using System.Collections.Generic; using System.Globalization; using System.IO; +using System.Text.Json; using System.Threading; using MediaBrowser.Common.Configuration; using MediaBrowser.Common.Extensions; +using MediaBrowser.Common.Json; using MediaBrowser.Controller.Persistence; using MediaBrowser.Model.Entities; using MediaBrowser.Model.IO; -using MediaBrowser.Model.Serialization; using Microsoft.Extensions.Logging; using SQLitePCL.pretty; namespace Emby.Server.Implementations.Data { /// - /// Class SQLiteDisplayPreferencesRepository + /// Class SQLiteDisplayPreferencesRepository. /// public class SqliteDisplayPreferencesRepository : BaseSqliteRepository, IDisplayPreferencesRepository { private readonly IFileSystem _fileSystem; - public SqliteDisplayPreferencesRepository(ILogger logger, IJsonSerializer jsonSerializer, IApplicationPaths appPaths, IFileSystem fileSystem) + private readonly JsonSerializerOptions _jsonOptions; + + public SqliteDisplayPreferencesRepository(ILogger logger, IApplicationPaths appPaths, IFileSystem fileSystem) : base(logger) { - _jsonSerializer = jsonSerializer; _fileSystem = fileSystem; + + _jsonOptions = JsonDefaults.GetOptions(); + DbFilePath = Path.Combine(appPaths.DataPath, "displaypreferences.db"); } /// - /// Gets the name of the repository + /// Gets the name of the repository. /// /// The name. public string Name => "SQLite"; - /// - /// The _json serializer - /// - private readonly IJsonSerializer _jsonSerializer; - public void Initialize() { try @@ -106,7 +106,7 @@ namespace Emby.Server.Implementations.Data private void SaveDisplayPreferences(DisplayPreferences displayPreferences, Guid userId, string client, IDatabaseConnection connection) { - var serialized = _jsonSerializer.SerializeToBytes(displayPreferences); + var serialized = JsonSerializer.SerializeToUtf8Bytes(displayPreferences, _jsonOptions); using (var statement = connection.PrepareStatement("replace into userdisplaypreferences (id, userid, client, data) values (@id, @userId, @client, @data)")) { @@ -198,15 +198,13 @@ namespace Emby.Server.Implementations.Data var list = new List(); using (var connection = GetConnection(true)) + using (var statement = connection.PrepareStatement("select data from userdisplaypreferences where userId=@userId")) { - using (var statement = connection.PrepareStatement("select data from userdisplaypreferences where userId=@userId")) - { - statement.TryBind("@userId", userId.ToGuidBlob()); + statement.TryBind("@userId", userId.ToGuidBlob()); - foreach (var row in statement.ExecuteQuery()) - { - list.Add(Get(row)); - } + foreach (var row in statement.ExecuteQuery()) + { + list.Add(Get(row)); } } @@ -214,7 +212,7 @@ namespace Emby.Server.Implementations.Data } private DisplayPreferences Get(IReadOnlyList row) - => _jsonSerializer.DeserializeFromString(row.GetString(0)); + => JsonSerializer.Deserialize(row[0].ToBlob(), _jsonOptions); public void SaveDisplayPreferences(DisplayPreferences displayPreferences, string userId, string client, CancellationToken cancellationToken) => SaveDisplayPreferences(displayPreferences, new Guid(userId), client, cancellationToken); diff --git a/Emby.Server.Implementations/Data/SqliteItemRepository.cs b/Emby.Server.Implementations/Data/SqliteItemRepository.cs index 2f083dda4..538beaf33 100644 --- a/Emby.Server.Implementations/Data/SqliteItemRepository.cs +++ b/Emby.Server.Implementations/Data/SqliteItemRepository.cs @@ -5,8 +5,11 @@ using System.IO; using System.Linq; using System.Runtime.Serialization; using System.Text; +using System.Text.Json; +using System.Text.Json.Serialization; using System.Threading; using Emby.Server.Implementations.Playlists; +using MediaBrowser.Common.Json; using MediaBrowser.Controller; using MediaBrowser.Controller.Channels; using MediaBrowser.Controller.Configuration; @@ -38,14 +41,6 @@ namespace Emby.Server.Implementations.Data { private const string ChaptersTableName = "Chapters2"; - private readonly TypeMapper _typeMapper; - - /// - /// Gets the json serializer. - /// - /// The json serializer. - private readonly IJsonSerializer _jsonSerializer; - /// /// The _app paths /// @@ -53,33 +48,31 @@ namespace Emby.Server.Implementations.Data private readonly IServerApplicationHost _appHost; private readonly ILocalizationManager _localization; + private readonly TypeMapper _typeMapper; + private readonly JsonSerializerOptions _jsonOptions; + /// /// Initializes a new instance of the class. /// public SqliteItemRepository( IServerConfigurationManager config, IServerApplicationHost appHost, - IJsonSerializer jsonSerializer, - ILoggerFactory loggerFactory, + ILogger logger, ILocalizationManager localization) - : base(loggerFactory.CreateLogger(nameof(SqliteItemRepository))) + : base(logger) { if (config == null) { throw new ArgumentNullException(nameof(config)); } - if (jsonSerializer == null) - { - throw new ArgumentNullException(nameof(jsonSerializer)); - } - - _appHost = appHost; _config = config; - _jsonSerializer = jsonSerializer; - _typeMapper = new TypeMapper(); + _appHost = appHost; _localization = localization; + _typeMapper = new TypeMapper(); + _jsonOptions = JsonDefaults.GetOptions(); + DbFilePath = Path.Combine(_config.ApplicationPaths.DataPath, "library.db"); } @@ -671,7 +664,7 @@ namespace Emby.Server.Implementations.Data if (TypeRequiresDeserialization(item.GetType())) { - saveItemStatement.TryBind("@data", _jsonSerializer.SerializeToBytes(item)); + saveItemStatement.TryBind("@data", JsonSerializer.SerializeToUtf8Bytes(item, _jsonOptions)); } else { @@ -1302,11 +1295,11 @@ namespace Emby.Server.Implementations.Data { try { - item = _jsonSerializer.DeserializeFromString(reader.GetString(1), type) as BaseItem; + item = JsonSerializer.Deserialize(reader[1].ToBlob(), type, _jsonOptions) as BaseItem; } - catch (SerializationException ex) + catch (JsonException ex) { - Logger.LogError(ex, "Error deserializing item"); + Logger.LogError(ex, "Error deserializing item with JSON: {Data}", reader.GetString(1)); } } diff --git a/Emby.Server.Implementations/Data/SqliteUserRepository.cs b/Emby.Server.Implementations/Data/SqliteUserRepository.cs index 11629b389..80fe278f8 100644 --- a/Emby.Server.Implementations/Data/SqliteUserRepository.cs +++ b/Emby.Server.Implementations/Data/SqliteUserRepository.cs @@ -1,10 +1,11 @@ using System; using System.Collections.Generic; using System.IO; +using System.Text.Json; +using MediaBrowser.Common.Json; using MediaBrowser.Controller; using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Persistence; -using MediaBrowser.Model.Serialization; using Microsoft.Extensions.Logging; using SQLitePCL.pretty; @@ -15,15 +16,14 @@ namespace Emby.Server.Implementations.Data /// public class SqliteUserRepository : BaseSqliteRepository, IUserRepository { - private readonly IJsonSerializer _jsonSerializer; + private readonly JsonSerializerOptions _jsonOptions; public SqliteUserRepository( ILogger logger, - IServerApplicationPaths appPaths, - IJsonSerializer jsonSerializer) + IServerApplicationPaths appPaths) : base(logger) { - _jsonSerializer = jsonSerializer; + _jsonOptions = JsonDefaults.GetOptions();; DbFilePath = Path.Combine(appPaths.DataPath, "users.db"); } @@ -84,7 +84,7 @@ namespace Emby.Server.Implementations.Data } user.Password = null; - var serialized = _jsonSerializer.SerializeToBytes(user); + var serialized = JsonSerializer.SerializeToUtf8Bytes(user, _jsonOptions); connection.RunInTransaction(db => { @@ -108,7 +108,7 @@ namespace Emby.Server.Implementations.Data throw new ArgumentNullException(nameof(user)); } - var serialized = _jsonSerializer.SerializeToBytes(user); + var serialized = JsonSerializer.SerializeToUtf8Bytes(user, _jsonOptions); using (var connection = GetConnection()) { @@ -142,7 +142,7 @@ namespace Emby.Server.Implementations.Data throw new ArgumentNullException(nameof(user)); } - var serialized = _jsonSerializer.SerializeToBytes(user); + var serialized = JsonSerializer.SerializeToUtf8Bytes(user, _jsonOptions); using (var connection = GetConnection()) { @@ -179,7 +179,7 @@ namespace Emby.Server.Implementations.Data var id = row[0].ToInt64(); var guid = row[1].ReadGuidFromBlob(); - var user = _jsonSerializer.DeserializeFromString(row.GetString(2)); + var user = JsonSerializer.Deserialize(row[2].ToBlob(), _jsonOptions); user.InternalId = id; user.Id = guid; return user; -- cgit v1.2.3 From ac93a5a85c6c2b06d6b0031b5389cf8462c7907b Mon Sep 17 00:00:00 2001 From: Bond_009 Date: Tue, 8 Oct 2019 22:17:15 +0200 Subject: Change slow query time logging to debug --- Emby.Server.Implementations/Data/SqliteItemRepository.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Emby.Server.Implementations/Data') diff --git a/Emby.Server.Implementations/Data/SqliteItemRepository.cs b/Emby.Server.Implementations/Data/SqliteItemRepository.cs index 2f083dda4..96f90b831 100644 --- a/Emby.Server.Implementations/Data/SqliteItemRepository.cs +++ b/Emby.Server.Implementations/Data/SqliteItemRepository.cs @@ -2724,7 +2724,7 @@ namespace Emby.Server.Implementations.Data if (elapsed >= SlowThreshold) { - Logger.LogWarning( + Logger.LogDebug( "{Method} query time (slow): {ElapsedMs}ms. Query: {Query}", methodName, elapsed, -- cgit v1.2.3 From 516933aab58eb668d8db20307cd25d6532bd198c Mon Sep 17 00:00:00 2001 From: Bond_009 Date: Fri, 11 Oct 2019 18:22:29 +0200 Subject: Move to netcore3.0 --- Emby.Naming/Emby.Naming.csproj | 2 +- Emby.Naming/Extensions/StringExtensions.cs | 31 ---------------------- Emby.Naming/TV/SeasonPathParser.cs | 2 -- .../Data/SqliteExtensions.cs | 3 +-- .../Emby.Server.Implementations.csproj | 2 +- Jellyfin.Server/Jellyfin.Server.csproj | 2 +- .../Jellyfin.Common.Tests.csproj | 4 +-- .../Jellyfin.MediaEncoding.Tests.csproj | 4 +-- 8 files changed, 8 insertions(+), 42 deletions(-) delete mode 100644 Emby.Naming/Extensions/StringExtensions.cs (limited to 'Emby.Server.Implementations/Data') diff --git a/Emby.Naming/Emby.Naming.csproj b/Emby.Naming/Emby.Naming.csproj index 0b1ce2fce..fca0aa1b3 100644 --- a/Emby.Naming/Emby.Naming.csproj +++ b/Emby.Naming/Emby.Naming.csproj @@ -1,7 +1,7 @@  - netstandard2.0 + netstandard2.1 false diff --git a/Emby.Naming/Extensions/StringExtensions.cs b/Emby.Naming/Extensions/StringExtensions.cs deleted file mode 100644 index 5512127a8..000000000 --- a/Emby.Naming/Extensions/StringExtensions.cs +++ /dev/null @@ -1,31 +0,0 @@ -using System; -using System.Text; - -namespace Emby.Naming.Extensions -{ - public static class StringExtensions - { - // TODO: @bond remove this when moving to netstandard2.1 - public static string Replace(this string str, string oldValue, string newValue, StringComparison comparison) - { - var sb = new StringBuilder(); - - var previousIndex = 0; - var index = str.IndexOf(oldValue, comparison); - - while (index != -1) - { - sb.Append(str.Substring(previousIndex, index - previousIndex)); - sb.Append(newValue); - index += oldValue.Length; - - previousIndex = index; - index = str.IndexOf(oldValue, index, comparison); - } - - sb.Append(str.Substring(previousIndex)); - - return sb.ToString(); - } - } -} diff --git a/Emby.Naming/TV/SeasonPathParser.cs b/Emby.Naming/TV/SeasonPathParser.cs index e81b2bb34..9096ccaf5 100644 --- a/Emby.Naming/TV/SeasonPathParser.cs +++ b/Emby.Naming/TV/SeasonPathParser.cs @@ -2,8 +2,6 @@ using System; using System.Globalization; using System.IO; using System.Linq; -using Emby.Naming.Common; -using Emby.Naming.Extensions; namespace Emby.Naming.TV { diff --git a/Emby.Server.Implementations/Data/SqliteExtensions.cs b/Emby.Server.Implementations/Data/SqliteExtensions.cs index 0fb2c10fd..e7c394b54 100644 --- a/Emby.Server.Implementations/Data/SqliteExtensions.cs +++ b/Emby.Server.Implementations/Data/SqliteExtensions.cs @@ -34,8 +34,7 @@ namespace Emby.Server.Implementations.Data public static Guid ReadGuidFromBlob(this IResultSetValue result) { - // TODO: Remove ToArray when upgrading to netstandard2.1 - return new Guid(result.ToBlob().ToArray()); + return new Guid(result.ToBlob()); } public static string ToDateTimeParamValue(this DateTime dateValue) diff --git a/Emby.Server.Implementations/Emby.Server.Implementations.csproj b/Emby.Server.Implementations/Emby.Server.Implementations.csproj index 2c71f0457..ea4444268 100644 --- a/Emby.Server.Implementations/Emby.Server.Implementations.csproj +++ b/Emby.Server.Implementations/Emby.Server.Implementations.csproj @@ -42,7 +42,7 @@ - netstandard2.0 + netstandard2.1 false true diff --git a/Jellyfin.Server/Jellyfin.Server.csproj b/Jellyfin.Server/Jellyfin.Server.csproj index fa3e9cb35..efdb75f98 100644 --- a/Jellyfin.Server/Jellyfin.Server.csproj +++ b/Jellyfin.Server/Jellyfin.Server.csproj @@ -3,7 +3,7 @@ jellyfin Exe - netcoreapp2.1 + netcoreapp3.0 false true diff --git a/tests/Jellyfin.Common.Tests/Jellyfin.Common.Tests.csproj b/tests/Jellyfin.Common.Tests/Jellyfin.Common.Tests.csproj index 9188b8a02..bb40985a4 100644 --- a/tests/Jellyfin.Common.Tests/Jellyfin.Common.Tests.csproj +++ b/tests/Jellyfin.Common.Tests/Jellyfin.Common.Tests.csproj @@ -1,12 +1,12 @@ - netcoreapp2.2 + netcoreapp3.0 false - + diff --git a/tests/Jellyfin.MediaEncoding.Tests/Jellyfin.MediaEncoding.Tests.csproj b/tests/Jellyfin.MediaEncoding.Tests/Jellyfin.MediaEncoding.Tests.csproj index 9213484fe..70e2d1851 100644 --- a/tests/Jellyfin.MediaEncoding.Tests/Jellyfin.MediaEncoding.Tests.csproj +++ b/tests/Jellyfin.MediaEncoding.Tests/Jellyfin.MediaEncoding.Tests.csproj @@ -1,12 +1,12 @@ - netcoreapp2.2 + netcoreapp3.0 false - + -- cgit v1.2.3