Radarr/src/NzbDrone.Core/ThingiProvider/ProviderRepository.cs

74 lines
2.8 KiB
C#
Raw Normal View History

2019-12-18 21:56:41 +00:00
using System.Collections.Generic;
using System.Text.Json;
using System.Text.Json.Serialization;
2019-12-18 21:56:41 +00:00
using Dapper;
using NzbDrone.Common.Extensions;
using NzbDrone.Common.Reflection;
using NzbDrone.Core.Datastore;
using NzbDrone.Core.Datastore.Converters;
2013-10-01 17:13:40 +00:00
using NzbDrone.Core.Messaging.Events;
namespace NzbDrone.Core.ThingiProvider
{
public class ProviderRepository<TProviderDefinition> : BasicRepository<TProviderDefinition>, IProviderRepository<TProviderDefinition>
2019-12-18 21:56:41 +00:00
where TProviderDefinition : ProviderDefinition, new()
2013-10-01 17:13:40 +00:00
{
protected readonly JsonSerializerOptions _serializerSettings;
protected ProviderRepository(IMainDatabase database, IEventAggregator eventAggregator)
2013-10-01 17:13:40 +00:00
: base(database, eventAggregator)
{
var serializerSettings = new JsonSerializerOptions
{
AllowTrailingCommas = true,
2020-08-25 20:26:45 +00:00
DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingDefault,
PropertyNameCaseInsensitive = true,
DictionaryKeyPolicy = JsonNamingPolicy.CamelCase,
PropertyNamingPolicy = JsonNamingPolicy.CamelCase,
WriteIndented = true
};
serializerSettings.Converters.Add(new JsonStringEnumConverter(JsonNamingPolicy.CamelCase, true));
serializerSettings.Converters.Add(new TimeSpanConverter());
serializerSettings.Converters.Add(new UtcConverter());
_serializerSettings = serializerSettings;
2013-10-01 17:13:40 +00:00
}
2015-01-16 15:32:22 +00:00
protected override List<TProviderDefinition> Query(SqlBuilder builder)
2019-12-18 21:56:41 +00:00
{
var type = typeof(TProviderDefinition);
var sql = builder.Select(type).AddSelectTemplate(type);
2019-12-18 21:56:41 +00:00
var results = new List<TProviderDefinition>();
using (var conn = _database.OpenConnection())
using (var reader = conn.ExecuteReader(sql.RawSql, sql.Parameters))
{
var parser = reader.GetRowParser<TProviderDefinition>(typeof(TProviderDefinition));
var settingsIndex = reader.GetOrdinal(nameof(ProviderDefinition.Settings));
2019-12-18 21:56:41 +00:00
while (reader.Read())
{
var body = reader.IsDBNull(settingsIndex) ? null : reader.GetString(settingsIndex);
var item = parser(reader);
var impType = typeof(IProviderConfig).Assembly.FindTypeByName(item.ConfigContract);
if (body.IsNullOrWhiteSpace())
{
item.Settings = NullConfig.Instance;
}
else
{
item.Settings = (IProviderConfig)JsonSerializer.Deserialize(body, impType, _serializerSettings);
2019-12-18 21:56:41 +00:00
}
results.Add(item);
}
}
return results;
}
2013-10-01 17:13:40 +00:00
}
2019-12-22 21:24:10 +00:00
}