From 5744ca3bba64e86dfb1f23efa0af0fe33e94ce9d Mon Sep 17 00:00:00 2001 From: Robert Dailey Date: Sun, 26 Jun 2022 13:53:44 -0500 Subject: [PATCH] wip: Begin working on CF page --- src/Recyclarr.Gui/CompositionRoot.cs | 7 ++++ src/Recyclarr.Gui/Shared/MainLayout.razor.cs | 5 +++ .../ViewModels/CustomFormatViewModel.cs | 21 ++++++++++++ .../Guide/CustomFormatGroupParserTest.cs | 1 + .../Guide/CustomFormatGroupParser.cs | 5 ++- .../Guide/ICustomFormatGroupParser.cs | 9 +++++ .../Models/CustomFormatGroupItem.cs | 3 ++ .../Processors/CustomFormatLookup.cs | 34 +++++++++++++++++++ 8 files changed, 82 insertions(+), 3 deletions(-) create mode 100644 src/Recyclarr.Gui/Shared/MainLayout.razor.cs create mode 100644 src/Recyclarr.Gui/ViewModels/CustomFormatViewModel.cs create mode 100644 src/TrashLib/Radarr/CustomFormat/Guide/ICustomFormatGroupParser.cs create mode 100644 src/TrashLib/Radarr/CustomFormat/Models/CustomFormatGroupItem.cs create mode 100644 src/TrashLib/Radarr/CustomFormat/Processors/CustomFormatLookup.cs diff --git a/src/Recyclarr.Gui/CompositionRoot.cs b/src/Recyclarr.Gui/CompositionRoot.cs index 74cad10a..9ba28eb3 100644 --- a/src/Recyclarr.Gui/CompositionRoot.cs +++ b/src/Recyclarr.Gui/CompositionRoot.cs @@ -8,6 +8,13 @@ namespace Recyclarr.Gui; public static class CompositionRoot { + public static IContainer Setup() + { + var builder = new ContainerBuilder(); + Setup(builder); + return builder.Build(); + } + public static void Setup(ContainerBuilder builder) { builder.RegisterLogger(); diff --git a/src/Recyclarr.Gui/Shared/MainLayout.razor.cs b/src/Recyclarr.Gui/Shared/MainLayout.razor.cs new file mode 100644 index 00000000..1eef8e36 --- /dev/null +++ b/src/Recyclarr.Gui/Shared/MainLayout.razor.cs @@ -0,0 +1,5 @@ +namespace Recyclarr.Gui.Shared; + +public partial class MainLayout +{ +} diff --git a/src/Recyclarr.Gui/ViewModels/CustomFormatViewModel.cs b/src/Recyclarr.Gui/ViewModels/CustomFormatViewModel.cs new file mode 100644 index 00000000..eee7cd18 --- /dev/null +++ b/src/Recyclarr.Gui/ViewModels/CustomFormatViewModel.cs @@ -0,0 +1,21 @@ +using ReactiveUI; +using TrashLib.Radarr.CustomFormat.Models; + +namespace Recyclarr.Gui.ViewModels; + +public class CustomFormatGroupViewModel : ReactiveObject +{ + public string GroupName { get; set; } + public ICollection CustomFormats { get; set; } + + public CustomFormatGroupViewModel() + { + } +} + +public class CustomFormatViewModel : ReactiveObject +{ + public CustomFormatViewModel() + { + } +} diff --git a/src/TrashLib.Tests/Radarr/CustomFormat/Guide/CustomFormatGroupParserTest.cs b/src/TrashLib.Tests/Radarr/CustomFormat/Guide/CustomFormatGroupParserTest.cs index 5eb1035e..eb83bcfb 100644 --- a/src/TrashLib.Tests/Radarr/CustomFormat/Guide/CustomFormatGroupParserTest.cs +++ b/src/TrashLib.Tests/Radarr/CustomFormat/Guide/CustomFormatGroupParserTest.cs @@ -5,6 +5,7 @@ using FluentAssertions; using NUnit.Framework; using TestLibrary.AutoFixture; using TrashLib.Radarr.CustomFormat.Guide; +using TrashLib.Radarr.CustomFormat.Models; using TrashLib.Startup; namespace TrashLib.Tests.Radarr.CustomFormat.Guide; diff --git a/src/TrashLib/Radarr/CustomFormat/Guide/CustomFormatGroupParser.cs b/src/TrashLib/Radarr/CustomFormat/Guide/CustomFormatGroupParser.cs index c8869228..bd205794 100644 --- a/src/TrashLib/Radarr/CustomFormat/Guide/CustomFormatGroupParser.cs +++ b/src/TrashLib/Radarr/CustomFormat/Guide/CustomFormatGroupParser.cs @@ -2,13 +2,12 @@ using System.Collections.ObjectModel; using System.IO.Abstractions; using System.Text.RegularExpressions; using Common.Extensions; +using TrashLib.Radarr.CustomFormat.Models; using TrashLib.Startup; namespace TrashLib.Radarr.CustomFormat.Guide; -public record CustomFormatGroupItem(string Name, string Anchor); - -public class CustomFormatGroupParser +public class CustomFormatGroupParser : ICustomFormatGroupParser { private readonly IAppPaths _paths; private static readonly Regex TableRegex = new(@"^\s*\|(.*)\|\s*$"); diff --git a/src/TrashLib/Radarr/CustomFormat/Guide/ICustomFormatGroupParser.cs b/src/TrashLib/Radarr/CustomFormat/Guide/ICustomFormatGroupParser.cs new file mode 100644 index 00000000..28175ba1 --- /dev/null +++ b/src/TrashLib/Radarr/CustomFormat/Guide/ICustomFormatGroupParser.cs @@ -0,0 +1,9 @@ +using System.Collections.ObjectModel; +using TrashLib.Radarr.CustomFormat.Models; + +namespace TrashLib.Radarr.CustomFormat.Guide; + +public interface ICustomFormatGroupParser +{ + IDictionary> Parse(); +} diff --git a/src/TrashLib/Radarr/CustomFormat/Models/CustomFormatGroupItem.cs b/src/TrashLib/Radarr/CustomFormat/Models/CustomFormatGroupItem.cs new file mode 100644 index 00000000..ad698f7f --- /dev/null +++ b/src/TrashLib/Radarr/CustomFormat/Models/CustomFormatGroupItem.cs @@ -0,0 +1,3 @@ +namespace TrashLib.Radarr.CustomFormat.Models; + +public record CustomFormatGroupItem(string Name, string Anchor); diff --git a/src/TrashLib/Radarr/CustomFormat/Processors/CustomFormatLookup.cs b/src/TrashLib/Radarr/CustomFormat/Processors/CustomFormatLookup.cs new file mode 100644 index 00000000..de957e8c --- /dev/null +++ b/src/TrashLib/Radarr/CustomFormat/Processors/CustomFormatLookup.cs @@ -0,0 +1,34 @@ +using Common.Extensions; +using TrashLib.Radarr.CustomFormat.Guide; +using TrashLib.Radarr.CustomFormat.Models; + +namespace TrashLib.Radarr.CustomFormat.Processors; + +public class CustomFormatLookup +{ + private readonly ICustomFormatGroupParser _parser; + private readonly IRadarrGuideService _guide; + + public CustomFormatLookup(ICustomFormatGroupParser parser, IRadarrGuideService guide) + { + _parser = parser; + _guide = guide; + } + + private static CustomFormatData? MatchDataWithCellEntry(ICollection guideCfs, + CustomFormatGroupItem groupItem) + { + return guideCfs.FirstOrDefault(x => x.FileName.EqualsIgnoreCase(groupItem.Anchor)) ?? + guideCfs.FirstOrDefault(x => x.Name.EqualsIgnoreCase(groupItem.Name)); + } + + public Dictionary> MapAllCustomFormats() + { + var guideCfs = _guide.GetCustomFormatData(); + var groups = _parser.Parse(); + + return groups.ToDictionary( + x => x.Key, + x => x.Value.Select(y => MatchDataWithCellEntry(guideCfs, y)).NotNull().ToList()); + } +}