You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
recyclarr/src/Recyclarr.Cli/Pipelines/ReleaseProfile/PipelinePhases/ReleaseProfileConfigPhase.cs

54 lines
2.1 KiB

using Recyclarr.Cli.Pipelines.Generic;
using Recyclarr.Cli.Pipelines.ReleaseProfile.Filters;
using Recyclarr.Common.Extensions;
using Recyclarr.Config.Models;
using Recyclarr.TrashGuide.ReleaseProfile;
namespace Recyclarr.Cli.Pipelines.ReleaseProfile.PipelinePhases;
public record ProcessedReleaseProfileData(
ReleaseProfileData Profile,
IReadOnlyCollection<string> Tags
);
public class ReleaseProfileConfigPhase(
ILogger log,
IReleaseProfileGuideService guide,
IReleaseProfileFilterPipeline filters)
: IConfigPipelinePhase<ReleaseProfilePipelineContext>
{
public Task Execute(ReleaseProfilePipelineContext context, IServiceConfiguration config)
{
var releaseProfiles = ((SonarrConfiguration) config).ReleaseProfiles;
if (!releaseProfiles.Any())
{
log.Debug("{Instance} has no release profiles", config.InstanceName);
return Task.CompletedTask;
}
var profilesFromGuide = guide.GetReleaseProfileData();
var filteredProfiles = new List<ProcessedReleaseProfileData>();
var configProfiles = releaseProfiles.SelectMany(x => x.TrashIds.Select(y => (TrashId: y, Config: x)));
foreach (var (trashId, configProfile) in configProfiles)
{
// For each release profile specified in our YAML config, find the matching profile in the guide.
var selectedProfile = profilesFromGuide.FirstOrDefault(x => x.TrashId.EqualsIgnoreCase(trashId));
if (selectedProfile is null)
{
log.Warning("A release profile with Trash ID {TrashId} does not exist", trashId);
continue;
}
log.Debug("Found Release Profile: {ProfileName} ({TrashId})", selectedProfile.Name,
selectedProfile.TrashId);
selectedProfile = filters.Process(selectedProfile, configProfile);
filteredProfiles.Add(new ProcessedReleaseProfileData(selectedProfile, configProfile.Tags));
}
context.ConfigOutput = filteredProfiles;
return Task.CompletedTask;
}
}