From 6fb1d4ad66e45b87ab45bcc753f5a21a30c4eb13 Mon Sep 17 00:00:00 2001 From: Robert Dailey Date: Fri, 13 Jan 2023 22:46:10 -0600 Subject: [PATCH] feat: Improved preview output for release profiles --- CHANGELOG.md | 2 +- .../ReleaseProfile/ReleaseProfileUpdater.cs | 97 +++++++++++-------- 2 files changed, 56 insertions(+), 43 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2034ba27..966df540 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,7 +17,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed - The CLI has been completely redesigned to be more consistent and structured (#142). -- Improved preview output for quality sizes +- Improved preview output for quality sizes, custom formats, and release profiles. ### Deprecated diff --git a/src/Recyclarr.TrashLib/Services/Sonarr/ReleaseProfile/ReleaseProfileUpdater.cs b/src/Recyclarr.TrashLib/Services/Sonarr/ReleaseProfile/ReleaseProfileUpdater.cs index 63e7fbf9..ca84c4aa 100644 --- a/src/Recyclarr.TrashLib/Services/Sonarr/ReleaseProfile/ReleaseProfileUpdater.cs +++ b/src/Recyclarr.TrashLib/Services/Sonarr/ReleaseProfile/ReleaseProfileUpdater.cs @@ -59,68 +59,81 @@ public class ReleaseProfileUpdater : IReleaseProfileUpdater if (isPreview) { - foreach (var profile in filteredProfiles.Select(x => x.Profile)) - { - PrintTermsAndScores(profile); - } - + PreviewReleaseProfiles(filteredProfiles.Select(x => x.Profile)); return; } await ProcessReleaseProfiles(filteredProfiles); } - private void PrintTermsAndScores(ReleaseProfileData profile) + private void PreviewReleaseProfiles(IEnumerable profiles) { - void PrintPreferredTerms(string title, IReadOnlyCollection preferredTerms) + var tree = new Tree("Release Profiles [red](Preview)[/]"); + + foreach (var profile in profiles) { - if (preferredTerms.Count <= 0) - { - return; - } + PrintTermsAndScores(tree, profile); + } - _console.WriteLine($" {title}:"); - foreach (var (score, terms) in preferredTerms) - { - foreach (var term in terms) - { - _console.WriteLine($" {score,-10} {term}"); - } - } + _console.WriteLine(); + _console.Write(tree); + } - _console.WriteLine(""); - } + private void PrintTermsAndScores(Tree tree, ReleaseProfileData profile) + { + var rpNode = tree.AddNode($"[yellow]{profile.Name}[/]"); + + var incPreferred = profile.IncludePreferredWhenRenaming ? "[green]YES[/]" : "[red]NO[/]"; + rpNode.AddNode($"Include Preferred when Renaming? {incPreferred}"); + + PrintTerms(rpNode, "Must Contain", profile.Required); + PrintTerms(rpNode, "Must Not Contain", profile.Ignored); + PrintPreferredTerms(rpNode, "Preferred", profile.Preferred); + + _console.WriteLine(""); + } - void PrintTerms(string title, IReadOnlyCollection terms) + private static void PrintTerms(TreeNode tree, string title, IReadOnlyCollection terms) + { + if (terms.Count == 0) { - if (terms.Count == 0) - { - return; - } + return; + } - _console.WriteLine($" {title}:"); - foreach (var term in terms) - { - _console.WriteLine($" {term}"); - } + var table = new Table() + .AddColumn("[bold]Term[/]"); - _console.WriteLine(""); + foreach (var term in terms) + { + table.AddRow(Markup.Escape(term.Term)); } - _console.WriteLine(""); + tree.AddNode(title) + .AddNode(table); + } - _console.WriteLine(profile.Name); + private static void PrintPreferredTerms(TreeNode tree, string title, + IReadOnlyCollection preferredTerms) + { + if (preferredTerms.Count <= 0) + { + return; + } - _console.WriteLine(" Include Preferred when Renaming?"); - _console.WriteLine(" " + - (profile.IncludePreferredWhenRenaming ? "YES" : "NO")); - _console.WriteLine(""); + var table = new Table() + .AddColumn("[bold]Score[/]") + .AddColumn("[bold]Term[/]"); - PrintTerms("Must Contain", profile.Required); - PrintTerms("Must Not Contain", profile.Ignored); - PrintPreferredTerms("Preferred", profile.Preferred); + foreach (var (score, terms) in preferredTerms) + { + foreach (var term in terms) + { + table.AddRow(score.ToString(), Markup.Escape(term.Term)); + } + } - _console.WriteLine(""); + tree.AddNode(title) + .AddNode(table); } private async Task ProcessReleaseProfiles(