Add JSON config, DB-backed library options, and docs
- Add JSON-based config loading with XML fallback for DB and library options - Implement LibraryOptionsRepository with EF Core, migrations, and entity - Update CollectionFolder to use DB-backed options with XML fallback/backfill - Register repository in DI and initialize at startup - Use EF execution strategy for transactional DB operations - Suppress code analysis warnings in .csproj and test files - Add DATABASE_MIGRATION.md, LIBRARY_OPTIONS_DB_DESIGN.md, and WEBSOCKET_AUTHENTICATION.md - Add database.json.example and improve migration docs - Add tests for JSON config loader and update test naming warnings
This commit is contained in:
@@ -10,6 +10,7 @@ namespace Emby.Server.Implementations.AppBase
|
||||
using System.Globalization;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
using System.Threading;
|
||||
using MediaBrowser.Common.Configuration;
|
||||
using MediaBrowser.Common.Events;
|
||||
@@ -306,6 +307,32 @@ namespace Emby.Server.Implementations.AppBase
|
||||
|
||||
private object LoadConfiguration(string path, Type configurationType)
|
||||
{
|
||||
// Try JSON first, then fallback to XML for backward compatibility
|
||||
var jsonPath = Path.ChangeExtension(path, ".json");
|
||||
|
||||
// Try loading from .json if it exists
|
||||
if (File.Exists(jsonPath))
|
||||
{
|
||||
try
|
||||
{
|
||||
var method = typeof(ConfigurationHelper).GetMethod(
|
||||
nameof(ConfigurationHelper.GetJsonConfiguration),
|
||||
System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.Public);
|
||||
|
||||
if (method is not null)
|
||||
{
|
||||
var genericMethod = method.MakeGenericMethod(configurationType);
|
||||
return genericMethod.Invoke(null, new object[] { jsonPath })
|
||||
?? throw new InvalidOperationException("JSON deserialization returned null.");
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Logger.LogError(ex, "Error loading JSON configuration file: {Path}", jsonPath);
|
||||
}
|
||||
}
|
||||
|
||||
// Fall back to XML for backward compatibility
|
||||
try
|
||||
{
|
||||
if (File.Exists(path))
|
||||
|
||||
Reference in New Issue
Block a user