using Recyclarr.Common.Extensions; using Recyclarr.TrashLib.Config.Parsing; using Recyclarr.TrashLib.Config.Services; namespace Recyclarr.TrashLib.Config; public static class ConfigExtensions { public static IEnumerable GetConfigsOfType( this IEnumerable configs, SupportedServices? serviceType) { return configs.Where(x => serviceType is null || serviceType.Value == x.ServiceType); } public static bool IsConfigEmpty(this RootConfigYaml? config) { var sonarr = config?.Sonarr?.Count ?? 0; var radarr = config?.Radarr?.Count ?? 0; return sonarr + radarr == 0; } public static IEnumerable GetConfigsBasedOnSettings( this IEnumerable configs, ConfigFilterCriteria criteria) { // later, if we filter by "operation type" (e.g. release profiles, CFs, quality sizes) it's just another // ".Where()" in the LINQ expression below. return configs.GetConfigsOfType(criteria.Service) .Where(x => criteria.Instances.IsEmpty() || criteria.Instances!.Any(y => y.EqualsIgnoreCase(x.InstanceName))); } public static IEnumerable GetSplitInstances(this IEnumerable configs) { return configs .GroupBy(x => x.BaseUrl) .Where(x => x.Count() > 1) .SelectMany(x => x.Select(y => y.InstanceName)); } public static IEnumerable GetInvalidInstanceNames( this IEnumerable configs, ConfigFilterCriteria criteria) { if (criteria.Instances is null || !criteria.Instances.Any()) { return Array.Empty(); } var configInstances = configs.Select(x => x.InstanceName).ToList(); return criteria.Instances .Where(x => !configInstances.Contains(x, StringComparer.InvariantCultureIgnoreCase)); } }