From 2bd8f69affd7fc4cd4a296ce18dff376001ca7f4 Mon Sep 17 00:00:00 2001 From: Flaminel Date: Sun, 18 May 2025 02:39:20 +0300 Subject: [PATCH] fix --- .../Configuration/ConfigManager.cs | 82 +++++++++++-------- .../Configuration/ConfigurationExtensions.cs | 3 - .../Configuration/ConfigurationPreloader.cs | 63 -------------- .../Configuration/IConfigManager.cs | 43 +++++----- 4 files changed, 67 insertions(+), 124 deletions(-) delete mode 100644 code/Infrastructure/Configuration/ConfigurationPreloader.cs diff --git a/code/Infrastructure/Configuration/ConfigManager.cs b/code/Infrastructure/Configuration/ConfigManager.cs index 8fdac3fd..c42b5db9 100644 --- a/code/Infrastructure/Configuration/ConfigManager.cs +++ b/code/Infrastructure/Configuration/ConfigManager.cs @@ -16,31 +16,41 @@ public class ConfigManager : IConfigManager private readonly ILogger _logger; private readonly IConfigurationProvider _configProvider; - // Define settings subdirectory - private const string SettingsDirectory = "settings"; - // Define standard config file names with cross-platform paths - private readonly string _generalConfigFile = Path.Combine(SettingsDirectory, "general.json"); - private readonly string _sonarrConfigFile = Path.Combine(SettingsDirectory, "sonarr.json"); - private readonly string _radarrConfigFile = Path.Combine(SettingsDirectory, "radarr.json"); - private readonly string _lidarrConfigFile = Path.Combine(SettingsDirectory, "lidarr.json"); - private readonly string _contentBlockerConfigFile = Path.Combine(SettingsDirectory, "content_blocker.json"); - private readonly string _queueCleanerConfigFile = Path.Combine(SettingsDirectory, "queue_cleaner.json"); - private readonly string _downloadCleanerConfigFile = Path.Combine(SettingsDirectory, "download_cleaner.json"); - private readonly string _downloadClientConfigFile = Path.Combine(SettingsDirectory, "download_client.json"); - private readonly string _ignoredDownloadsConfigFile = Path.Combine(SettingsDirectory, "ignored_downloads.json"); - private readonly string _notificationsConfigFile = Path.Combine(SettingsDirectory, "notifications.json"); + private readonly string _generalConfigFile; + private readonly string _sonarrConfigFile; + private readonly string _radarrConfigFile; + private readonly string _lidarrConfigFile; + private readonly string _contentBlockerConfigFile; + private readonly string _queueCleanerConfigFile; + private readonly string _downloadCleanerConfigFile; + private readonly string _downloadClientConfigFile; + private readonly string _ignoredDownloadsConfigFile; + private readonly string _notificationsConfigFile; public ConfigManager( ILogger logger, - IConfigurationProvider configProvider) + IConfigurationProvider configProvider, + ConfigurationPathProvider pathProvider) { _logger = logger; _configProvider = configProvider; + string settingsPath = pathProvider.GetSettingsPath(); + + _generalConfigFile = Path.Combine(settingsPath, "general.json"); + _sonarrConfigFile = Path.Combine(settingsPath, "sonarr.json"); + _radarrConfigFile = Path.Combine(settingsPath, "radarr.json"); + _lidarrConfigFile = Path.Combine(settingsPath, "lidarr.json"); + _contentBlockerConfigFile = Path.Combine(settingsPath, "content_blocker.json"); + _queueCleanerConfigFile = Path.Combine(settingsPath, "queue_cleaner.json"); + _downloadCleanerConfigFile = Path.Combine(settingsPath, "download_cleaner.json"); + _downloadClientConfigFile = Path.Combine(settingsPath, "download_client.json"); + _ignoredDownloadsConfigFile = Path.Combine(settingsPath, "ignored_downloads.json"); + _notificationsConfigFile = Path.Combine(settingsPath, "notifications.json"); } // Generic configuration methods - public Task GetConfigurationAsync(string configFileName) where T : class, new() + public Task GetConfigurationAsync(string configFileName) where T : class, new() { return _configProvider.ReadConfigurationAsync(configFileName); } @@ -85,52 +95,52 @@ public class ConfigManager : IConfigManager } // Specific configuration type methods - public async Task GetGeneralConfigAsync() + public async Task GetGeneralConfigAsync() { return await _configProvider.ReadConfigurationAsync(_generalConfigFile); } - public async Task GetSonarrConfigAsync() + public async Task GetSonarrConfigAsync() { return await _configProvider.ReadConfigurationAsync(_sonarrConfigFile); } - public async Task GetRadarrConfigAsync() + public async Task GetRadarrConfigAsync() { return await _configProvider.ReadConfigurationAsync(_radarrConfigFile); } - public async Task GetLidarrConfigAsync() + public async Task GetLidarrConfigAsync() { return await _configProvider.ReadConfigurationAsync(_lidarrConfigFile); } - public async Task GetContentBlockerConfigAsync() + public async Task GetContentBlockerConfigAsync() { return await _configProvider.ReadConfigurationAsync(_contentBlockerConfigFile); } - public async Task GetNotificationsConfigAsync() + public async Task GetNotificationsConfigAsync() { return await _configProvider.ReadConfigurationAsync(_notificationsConfigFile); } - public async Task GetQueueCleanerConfigAsync() + public async Task GetQueueCleanerConfigAsync() { return await _configProvider.ReadConfigurationAsync(_queueCleanerConfigFile); } - public async Task GetDownloadCleanerConfigAsync() + public async Task GetDownloadCleanerConfigAsync() { return await _configProvider.ReadConfigurationAsync(_downloadCleanerConfigFile); } - public async Task GetDownloadClientConfigAsync() + public async Task GetDownloadClientConfigAsync() { return await _configProvider.ReadConfigurationAsync(_downloadClientConfigFile); } - public async Task GetIgnoredDownloadsConfigAsync() + public async Task GetIgnoredDownloadsConfigAsync() { return await _configProvider.ReadConfigurationAsync(_ignoredDownloadsConfigFile); } @@ -274,7 +284,7 @@ public class ConfigManager : IConfigManager } // Generic synchronous configuration methods - public T? GetConfiguration(string fileName) where T : class, new() + public T GetConfiguration(string fileName) where T : class, new() { return _configProvider.ReadConfiguration(fileName); } @@ -315,52 +325,52 @@ public class ConfigManager : IConfigManager // Specific synchronous configuration methods for typed configs - public GeneralConfig? GetGeneralConfig() + public GeneralConfig GetGeneralConfig() { return _configProvider.ReadConfiguration(_generalConfigFile); } - public SonarrConfig? GetSonarrConfig() + public SonarrConfig GetSonarrConfig() { return _configProvider.ReadConfiguration(_sonarrConfigFile); } - public RadarrConfig? GetRadarrConfig() + public RadarrConfig GetRadarrConfig() { return _configProvider.ReadConfiguration(_radarrConfigFile); } - public LidarrConfig? GetLidarrConfig() + public LidarrConfig GetLidarrConfig() { return _configProvider.ReadConfiguration(_lidarrConfigFile); } - public QueueCleanerConfig? GetQueueCleanerConfig() + public QueueCleanerConfig GetQueueCleanerConfig() { return GetConfiguration(_queueCleanerConfigFile); } - public ContentBlockerConfig? GetContentBlockerConfig() + public ContentBlockerConfig GetContentBlockerConfig() { return _configProvider.ReadConfiguration(_contentBlockerConfigFile); } - public DownloadCleanerConfig? GetDownloadCleanerConfig() + public DownloadCleanerConfig GetDownloadCleanerConfig() { return _configProvider.ReadConfiguration(_downloadCleanerConfigFile); } - public DownloadClientConfig? GetDownloadClientConfig() + public DownloadClientConfig GetDownloadClientConfig() { return _configProvider.ReadConfiguration(_downloadClientConfigFile); } - public IgnoredDownloadsConfig? GetIgnoredDownloadsConfig() + public IgnoredDownloadsConfig GetIgnoredDownloadsConfig() { return _configProvider.ReadConfiguration(_ignoredDownloadsConfigFile); } - public NotificationsConfig? GetNotificationsConfig() + public NotificationsConfig GetNotificationsConfig() { return _configProvider.ReadConfiguration(_notificationsConfigFile); } diff --git a/code/Infrastructure/Configuration/ConfigurationExtensions.cs b/code/Infrastructure/Configuration/ConfigurationExtensions.cs index 2b646bc8..7c526a89 100644 --- a/code/Infrastructure/Configuration/ConfigurationExtensions.cs +++ b/code/Infrastructure/Configuration/ConfigurationExtensions.cs @@ -20,9 +20,6 @@ public static class ConfigurationExtensions services.AddSingleton(); services.AddSingleton(); - // Register the configuration preloader as a hosted service - services.AddHostedService(); - return services; } } diff --git a/code/Infrastructure/Configuration/ConfigurationPreloader.cs b/code/Infrastructure/Configuration/ConfigurationPreloader.cs deleted file mode 100644 index 3100b374..00000000 --- a/code/Infrastructure/Configuration/ConfigurationPreloader.cs +++ /dev/null @@ -1,63 +0,0 @@ -using Microsoft.Extensions.Hosting; -using Microsoft.Extensions.Logging; - -namespace Infrastructure.Configuration; - -/// -/// Preloads all configurations at application startup to ensure they're cached -/// and ready for fast access -/// -public class ConfigurationPreloader : IHostedService -{ - private readonly IConfigManager _configManager; - private readonly ILogger _logger; - - public ConfigurationPreloader(IConfigManager configManager, ILogger logger) - { - _configManager = configManager; - _logger = logger; - } - - public async Task StartAsync(CancellationToken cancellationToken) - { - _logger.LogInformation("Preloading all configurations..."); - - try - { - // Load all configurations in parallel - await Task.WhenAll( - LoadConfigAsync("General config", _configManager.GetGeneralConfigAsync), - LoadConfigAsync("Sonarr config", _configManager.GetSonarrConfigAsync), - LoadConfigAsync("Radarr config", _configManager.GetRadarrConfigAsync), - LoadConfigAsync("Lidarr config", _configManager.GetLidarrConfigAsync), - LoadConfigAsync("Content blocker config", _configManager.GetContentBlockerConfigAsync), - LoadConfigAsync("Queue cleaner config", _configManager.GetQueueCleanerConfigAsync), - LoadConfigAsync("Download cleaner config", _configManager.GetDownloadCleanerConfigAsync), - LoadConfigAsync("Download client config", _configManager.GetDownloadClientConfigAsync), - LoadConfigAsync("Ignored downloads config", _configManager.GetIgnoredDownloadsConfigAsync), - LoadConfigAsync("Notifications config", _configManager.GetNotificationsConfigAsync) - ); - - _logger.LogInformation("All configurations preloaded successfully"); - } - catch (Exception ex) - { - _logger.LogError(ex, "Error preloading configurations"); - } - } - - private async Task LoadConfigAsync(string configName, Func> loadFunction) where T : class - { - try - { - var config = await loadFunction(); - _logger.LogDebug("Preloaded {configName}", configName); - } - catch (Exception ex) - { - _logger.LogError(ex, "Failed to preload {configName}", configName); - } - } - - public Task StopAsync(CancellationToken cancellationToken) => Task.CompletedTask; -} diff --git a/code/Infrastructure/Configuration/IConfigManager.cs b/code/Infrastructure/Configuration/IConfigManager.cs index 59a2ab67..4aff6b2e 100644 --- a/code/Infrastructure/Configuration/IConfigManager.cs +++ b/code/Infrastructure/Configuration/IConfigManager.cs @@ -6,7 +6,6 @@ using Common.Configuration.General; using Common.Configuration.IgnoredDownloads; using Common.Configuration.Notification; using Common.Configuration.QueueCleaner; -using Infrastructure.Verticals.Notifications.Notifiarr; namespace Infrastructure.Configuration; @@ -16,7 +15,7 @@ namespace Infrastructure.Configuration; public interface IConfigManager { // Configuration files - Async methods - Task GetConfigurationAsync(string configFileName) where T : class, new(); + Task GetConfigurationAsync(string configFileName) where T : class, new(); Task SaveConfigurationAsync(string configFileName, T config) where T : class; Task UpdateConfigurationPropertyAsync(string configFileName, string propertyPath, T value); Task MergeConfigurationAsync(string configFileName, T newValues) where T : class; @@ -31,16 +30,16 @@ public interface IConfigManager bool DeleteConfiguration(string configFileName); // Specific configuration types - Async methods - Task GetGeneralConfigAsync(); - Task GetSonarrConfigAsync(); - Task GetRadarrConfigAsync(); - Task GetLidarrConfigAsync(); - Task GetContentBlockerConfigAsync(); - Task GetQueueCleanerConfigAsync(); - Task GetDownloadCleanerConfigAsync(); - Task GetDownloadClientConfigAsync(); - Task GetIgnoredDownloadsConfigAsync(); - Task GetNotificationsConfigAsync(); + Task GetGeneralConfigAsync(); + Task GetSonarrConfigAsync(); + Task GetRadarrConfigAsync(); + Task GetLidarrConfigAsync(); + Task GetContentBlockerConfigAsync(); + Task GetQueueCleanerConfigAsync(); + Task GetDownloadCleanerConfigAsync(); + Task GetDownloadClientConfigAsync(); + Task GetIgnoredDownloadsConfigAsync(); + Task GetNotificationsConfigAsync(); Task SaveGeneralConfigAsync(GeneralConfig config); Task SaveSonarrConfigAsync(SonarrConfig config); @@ -54,16 +53,16 @@ public interface IConfigManager Task SaveNotificationsConfigAsync(NotificationsConfig config); // Specific configuration types - Sync methods - GeneralConfig? GetGeneralConfig(); - SonarrConfig? GetSonarrConfig(); - RadarrConfig? GetRadarrConfig(); - LidarrConfig? GetLidarrConfig(); - ContentBlockerConfig? GetContentBlockerConfig(); - QueueCleanerConfig? GetQueueCleanerConfig(); - DownloadCleanerConfig? GetDownloadCleanerConfig(); - DownloadClientConfig? GetDownloadClientConfig(); - IgnoredDownloadsConfig? GetIgnoredDownloadsConfig(); - NotificationsConfig? GetNotificationsConfig(); + GeneralConfig GetGeneralConfig(); + SonarrConfig GetSonarrConfig(); + RadarrConfig GetRadarrConfig(); + LidarrConfig GetLidarrConfig(); + ContentBlockerConfig GetContentBlockerConfig(); + QueueCleanerConfig GetQueueCleanerConfig(); + DownloadCleanerConfig GetDownloadCleanerConfig(); + DownloadClientConfig GetDownloadClientConfig(); + IgnoredDownloadsConfig GetIgnoredDownloadsConfig(); + NotificationsConfig GetNotificationsConfig(); bool SaveGeneralConfig(GeneralConfig config); bool SaveSonarrConfig(SonarrConfig config);