From 3ce1f94f871b85d7ccb2af366f0fb2fe2e0f406a Mon Sep 17 00:00:00 2001 From: Michael Bucari-Tovo Date: Sun, 26 Jun 2022 10:42:52 -0600 Subject: [PATCH] Revert preview feature --- Source/AppScaffolding/AppScaffolding.csproj | 1 - .../ApplicationServices.csproj | 1 - Source/AudibleUtilities/ApiExtended.cs | 28 ++++++++++++------- .../AudibleUtilities/AudibleApiValidators.cs | 15 ++++------ .../AudibleUtilities/AudibleUtilities.csproj | 1 - Source/DtoImporterService/BookImporter.cs | 4 ++- Source/DtoImporterService/CategoryImporter.cs | 4 ++- .../DtoImporterService/ContributorImporter.cs | 10 ++++--- .../DtoImporterService.csproj | 1 - Source/DtoImporterService/ImporterBase.cs | 20 +++++++++---- .../DtoImporterService/LibraryBookImporter.cs | 6 ++-- Source/DtoImporterService/SeriesImporter.cs | 4 ++- Source/FileLiberator/FileLiberator.csproj | 1 - Source/Hangover/Hangover.csproj | 1 - Source/LibationCli/LibationCli.csproj | 1 - .../LibationWinForms/LibationWinForms.csproj | 1 - .../AudibleUtilities.Tests.csproj | 2 -- .../FileLiberator.Tests.csproj | 2 -- 18 files changed, 58 insertions(+), 45 deletions(-) diff --git a/Source/AppScaffolding/AppScaffolding.csproj b/Source/AppScaffolding/AppScaffolding.csproj index 6be592b1..67f36a31 100644 --- a/Source/AppScaffolding/AppScaffolding.csproj +++ b/Source/AppScaffolding/AppScaffolding.csproj @@ -2,7 +2,6 @@ net6.0-windows - True 8.1.4.31 diff --git a/Source/ApplicationServices/ApplicationServices.csproj b/Source/ApplicationServices/ApplicationServices.csproj index 87a0fb18..cb4528e5 100644 --- a/Source/ApplicationServices/ApplicationServices.csproj +++ b/Source/ApplicationServices/ApplicationServices.csproj @@ -2,7 +2,6 @@ net6.0-windows - True diff --git a/Source/AudibleUtilities/ApiExtended.cs b/Source/AudibleUtilities/ApiExtended.cs index 9a8c0254..33e5f41a 100644 --- a/Source/AudibleUtilities/ApiExtended.cs +++ b/Source/AudibleUtilities/ApiExtended.cs @@ -154,19 +154,27 @@ namespace AudibleUtilities #if DEBUG //System.IO.File.WriteAllText(library_json, AudibleApi.Common.Converter.ToJson(items)); #endif - var exceptions = new List(); - - exceptions.AddRange(IValidator.Validate(items)); - exceptions.AddRange(IValidator.Validate(items)); - exceptions.AddRange(IValidator.Validate(items)); - exceptions.AddRange(IValidator.Validate(items)); - exceptions.AddRange(IValidator.Validate(items)); - - if (exceptions.Any()) - throw new AggregateException(exceptions); + var validators = new List(); + validators.AddRange(getValidators()); + foreach (var v in validators) + { + var exceptions = v.Validate(items); + if (exceptions is not null && exceptions.Any()) + throw new AggregateException(exceptions); + } return items; } + private static List getValidators() + { + var type = typeof(IValidator); + var types = AppDomain.CurrentDomain.GetAssemblies() + .SelectMany(s => s.GetTypes()) + .Where(p => type.IsAssignableFrom(p) && !p.IsInterface); + + return types.Select(t => Activator.CreateInstance(t) as IValidator).ToList(); + } + #region episodes and podcasts private async Task> getChildEpisodesAsync(SemaphoreSlim concurrencySemaphore, Item parent) diff --git a/Source/AudibleUtilities/AudibleApiValidators.cs b/Source/AudibleUtilities/AudibleApiValidators.cs index c0b4af43..cae6e812 100644 --- a/Source/AudibleUtilities/AudibleApiValidators.cs +++ b/Source/AudibleUtilities/AudibleApiValidators.cs @@ -7,14 +7,11 @@ namespace AudibleUtilities { public interface IValidator { - public static abstract IEnumerable Validate(IEnumerable items); - public static IEnumerable Validate(IEnumerable items) - where T : IValidator - => T.Validate(items); + IEnumerable Validate(IEnumerable items); } public class LibraryValidator : IValidator { - public static IEnumerable Validate(IEnumerable items) + public IEnumerable Validate(IEnumerable items) { var exceptions = new List(); @@ -28,7 +25,7 @@ namespace AudibleUtilities } public class BookValidator : IValidator { - public static IEnumerable Validate(IEnumerable items) + public IEnumerable Validate(IEnumerable items) { var exceptions = new List(); @@ -46,7 +43,7 @@ namespace AudibleUtilities } public class CategoryValidator : IValidator { - public static IEnumerable Validate(IEnumerable items) + public IEnumerable Validate(IEnumerable items) { var exceptions = new List(); @@ -61,7 +58,7 @@ namespace AudibleUtilities } public class ContributorValidator : IValidator { - public static IEnumerable Validate(IEnumerable items) + public IEnumerable Validate(IEnumerable items) { var exceptions = new List(); @@ -75,7 +72,7 @@ namespace AudibleUtilities } public class SeriesValidator : IValidator { - public static IEnumerable Validate(IEnumerable items) + public IEnumerable Validate(IEnumerable items) { var exceptions = new List(); diff --git a/Source/AudibleUtilities/AudibleUtilities.csproj b/Source/AudibleUtilities/AudibleUtilities.csproj index 191fbd40..42a54f46 100644 --- a/Source/AudibleUtilities/AudibleUtilities.csproj +++ b/Source/AudibleUtilities/AudibleUtilities.csproj @@ -2,7 +2,6 @@ net6.0-windows - True diff --git a/Source/DtoImporterService/BookImporter.cs b/Source/DtoImporterService/BookImporter.cs index ed5d7cde..3e05db63 100644 --- a/Source/DtoImporterService/BookImporter.cs +++ b/Source/DtoImporterService/BookImporter.cs @@ -8,8 +8,10 @@ using Dinah.Core.Collections.Generic; namespace DtoImporterService { - public class BookImporter : ImporterBase + public class BookImporter : ItemsImporterBase { + protected override IValidator Validator => new BookValidator(); + public Dictionary Cache { get; private set; } = new(); private ContributorImporter contributorImporter { get; } diff --git a/Source/DtoImporterService/CategoryImporter.cs b/Source/DtoImporterService/CategoryImporter.cs index 99dda82f..5a3434c6 100644 --- a/Source/DtoImporterService/CategoryImporter.cs +++ b/Source/DtoImporterService/CategoryImporter.cs @@ -8,8 +8,10 @@ using Dinah.Core.Collections.Generic; namespace DtoImporterService { - public class CategoryImporter : ImporterBase + public class CategoryImporter : ItemsImporterBase { + protected override IValidator Validator => new CategoryValidator(); + public Dictionary Cache { get; private set; } = new(); public CategoryImporter(LibationContext context) : base(context) { } diff --git a/Source/DtoImporterService/ContributorImporter.cs b/Source/DtoImporterService/ContributorImporter.cs index f7fa41c5..2f6d255f 100644 --- a/Source/DtoImporterService/ContributorImporter.cs +++ b/Source/DtoImporterService/ContributorImporter.cs @@ -8,8 +8,10 @@ using Dinah.Core.Collections.Generic; namespace DtoImporterService { - public class ContributorImporter : ImporterBase + public class ContributorImporter : ItemsImporterBase { + protected override IValidator Validator => new ContributorValidator(); + public Dictionary Cache { get; private set; } = new(); public ContributorImporter(LibationContext context) : base(context) { } @@ -89,7 +91,7 @@ namespace DtoImporterService return hash.Count; } - private Contributor addContributor(string name, string id = null) + private Contributor addContributor(string name, string id = null) { try { @@ -106,6 +108,6 @@ namespace DtoImporterService Serilog.Log.Logger.Error(ex, "Error adding contributor. {@DebugInfo}", new { name, id }); throw; } - } - } + } + } } diff --git a/Source/DtoImporterService/DtoImporterService.csproj b/Source/DtoImporterService/DtoImporterService.csproj index 749d1a5b..d784be6f 100644 --- a/Source/DtoImporterService/DtoImporterService.csproj +++ b/Source/DtoImporterService/DtoImporterService.csproj @@ -2,7 +2,6 @@ net6.0-windows - True diff --git a/Source/DtoImporterService/ImporterBase.cs b/Source/DtoImporterService/ImporterBase.cs index bb5142c0..5f3298b9 100644 --- a/Source/DtoImporterService/ImporterBase.cs +++ b/Source/DtoImporterService/ImporterBase.cs @@ -7,7 +7,7 @@ using Dinah.Core; namespace DtoImporterService { - public abstract class ImporterBase where TValidate : IValidator + public abstract class ImporterBase { protected LibationContext DbContext { get; } @@ -18,13 +18,13 @@ namespace DtoImporterService } /// LONG RUNNING. call with await Task.Run - public int Import(IEnumerable param) => Run(DoImport, param); + public int Import(T param) => Run(DoImport, param); - public TResult Run(Func, TResult> func, IEnumerable param) + public TResult Run(Func func, T param) { try { - var exceptions = TValidate.Validate(param.Select(i => i.DtoItem)); + var exceptions = Validate(param); if (exceptions is not null && exceptions.Any()) throw new AggregateException($"Importer validation failed", exceptions); } @@ -46,6 +46,16 @@ namespace DtoImporterService } } - protected abstract int DoImport(IEnumerable elements); + protected abstract int DoImport(T elements); + public abstract IEnumerable Validate(T param); + } + + public abstract class ItemsImporterBase : ImporterBase> + { + protected ItemsImporterBase(LibationContext context) : base(context) { } + + protected abstract IValidator Validator { get; } + public sealed override IEnumerable Validate(IEnumerable importItems) + => Validator.Validate(importItems.Select(i => i.DtoItem)); } } diff --git a/Source/DtoImporterService/LibraryBookImporter.cs b/Source/DtoImporterService/LibraryBookImporter.cs index 9590393b..38581b7c 100644 --- a/Source/DtoImporterService/LibraryBookImporter.cs +++ b/Source/DtoImporterService/LibraryBookImporter.cs @@ -7,8 +7,10 @@ using Dinah.Core.Collections.Generic; namespace DtoImporterService { - public class LibraryBookImporter : ImporterBase + public class LibraryBookImporter : ItemsImporterBase { + protected override IValidator Validator => new LibraryValidator(); + private BookImporter bookImporter { get; } public LibraryBookImporter(LibationContext context) : base(context) @@ -47,7 +49,7 @@ namespace DtoImporterService // just use the first var hash = newItems.ToDictionarySafe(dto => dto.DtoItem.ProductId); foreach (var kvp in hash) - { + { var newItem = kvp.Value; var libraryBook = new LibraryBook( diff --git a/Source/DtoImporterService/SeriesImporter.cs b/Source/DtoImporterService/SeriesImporter.cs index e4541d01..67f5d487 100644 --- a/Source/DtoImporterService/SeriesImporter.cs +++ b/Source/DtoImporterService/SeriesImporter.cs @@ -8,8 +8,10 @@ using Dinah.Core.Collections.Generic; namespace DtoImporterService { - public class SeriesImporter : ImporterBase + public class SeriesImporter : ItemsImporterBase { + protected override IValidator Validator => new SeriesValidator(); + public Dictionary Cache { get; private set; } = new(); public SeriesImporter(LibationContext context) : base(context) { } diff --git a/Source/FileLiberator/FileLiberator.csproj b/Source/FileLiberator/FileLiberator.csproj index 5d8093fa..65b461a1 100644 --- a/Source/FileLiberator/FileLiberator.csproj +++ b/Source/FileLiberator/FileLiberator.csproj @@ -2,7 +2,6 @@ net6.0-windows - True diff --git a/Source/Hangover/Hangover.csproj b/Source/Hangover/Hangover.csproj index b421f3e5..d75c4de4 100644 --- a/Source/Hangover/Hangover.csproj +++ b/Source/Hangover/Hangover.csproj @@ -6,7 +6,6 @@ true hangover.ico enable - True true win-x64 false diff --git a/Source/LibationCli/LibationCli.csproj b/Source/LibationCli/LibationCli.csproj index b1edb68b..e3b1fa09 100644 --- a/Source/LibationCli/LibationCli.csproj +++ b/Source/LibationCli/LibationCli.csproj @@ -5,7 +5,6 @@ Exe net6.0-windows true - True win-x64 false false diff --git a/Source/LibationWinForms/LibationWinForms.csproj b/Source/LibationWinForms/LibationWinForms.csproj index 340aecd7..b15b714c 100644 --- a/Source/LibationWinForms/LibationWinForms.csproj +++ b/Source/LibationWinForms/LibationWinForms.csproj @@ -6,7 +6,6 @@ net6.0-windows true libation.ico - True Libation true diff --git a/Source/_Tests/AudibleUtilities.Tests/AudibleUtilities.Tests.csproj b/Source/_Tests/AudibleUtilities.Tests/AudibleUtilities.Tests.csproj index ea2b8e86..f77a9580 100644 --- a/Source/_Tests/AudibleUtilities.Tests/AudibleUtilities.Tests.csproj +++ b/Source/_Tests/AudibleUtilities.Tests/AudibleUtilities.Tests.csproj @@ -2,8 +2,6 @@ net6.0-windows - True - false diff --git a/Source/_Tests/FileLiberator.Tests/FileLiberator.Tests.csproj b/Source/_Tests/FileLiberator.Tests/FileLiberator.Tests.csproj index 8e349d08..4e1d1373 100644 --- a/Source/_Tests/FileLiberator.Tests/FileLiberator.Tests.csproj +++ b/Source/_Tests/FileLiberator.Tests/FileLiberator.Tests.csproj @@ -2,8 +2,6 @@ net6.0-windows - True - false