diff --git a/Directory.Build.targets b/Directory.Build.targets
index 7a9fdf0..12edcbc 100644
--- a/Directory.Build.targets
+++ b/Directory.Build.targets
@@ -8,11 +8,16 @@
+
+
+
+
-
-
-
-
+
+
+
+
+
@@ -23,12 +28,12 @@
runtime; build; native; contentfiles; analyzers; buildtransitive
all
-
+
runtime; build; native; contentfiles; analyzers; buildtransitive
all
-
+
diff --git a/PriceChecker.Core.Tests/PriceChecker.Core.Tests.csproj b/PriceChecker.Core.Tests/PriceChecker.Core.Tests.csproj
index 75df198..ffe3f36 100644
--- a/PriceChecker.Core.Tests/PriceChecker.Core.Tests.csproj
+++ b/PriceChecker.Core.Tests/PriceChecker.Core.Tests.csproj
@@ -8,7 +8,10 @@
-
+
+
+
+
diff --git a/PriceChecker.Core.Tests/Repositories/AgentRepositoryTests.cs b/PriceChecker.Core.Tests/Repositories/AgentRepositoryTests.cs
index 2ce99b1..4d9e387 100644
--- a/PriceChecker.Core.Tests/Repositories/AgentRepositoryTests.cs
+++ b/PriceChecker.Core.Tests/Repositories/AgentRepositoryTests.cs
@@ -2,11 +2,11 @@
using System.Collections.Generic;
using System.Linq;
using AutoFixture;
+using Genius.Atom.Infrastructure.Events;
using Genius.PriceChecker.Core.Messages;
using Genius.PriceChecker.Core.Models;
using Genius.PriceChecker.Core.Repositories;
using Genius.PriceChecker.Core.Services;
-using Genius.PriceChecker.Infrastructure.Events;
using Microsoft.Extensions.Logging;
using Moq;
using Xunit;
@@ -19,9 +19,7 @@ public class AgentRepositoryTests
private readonly Fixture _fixture = new();
private readonly Mock _eventBusMock = new();
private readonly Mock _persisterMock = new();
- private readonly Mock _agentRepoMock = new();
- private readonly List _products = new();
private readonly List _agents = new();
public AgentRepositoryTests()
diff --git a/PriceChecker.Core.Tests/Repositories/ProductRepositoryTests.cs b/PriceChecker.Core.Tests/Repositories/ProductRepositoryTests.cs
index 756b561..072d004 100644
--- a/PriceChecker.Core.Tests/Repositories/ProductRepositoryTests.cs
+++ b/PriceChecker.Core.Tests/Repositories/ProductRepositoryTests.cs
@@ -6,7 +6,7 @@
using Genius.PriceChecker.Core.Models;
using Genius.PriceChecker.Core.Repositories;
using Genius.PriceChecker.Core.Services;
-using Genius.PriceChecker.Infrastructure.Events;
+using Genius.Atom.Infrastructure.Events;
using Microsoft.Extensions.Logging;
using Moq;
using Xunit;
diff --git a/PriceChecker.Core.Tests/Repositories/SettingsRepositoryTests.cs b/PriceChecker.Core.Tests/Repositories/SettingsRepositoryTests.cs
index be767a7..94004fc 100644
--- a/PriceChecker.Core.Tests/Repositories/SettingsRepositoryTests.cs
+++ b/PriceChecker.Core.Tests/Repositories/SettingsRepositoryTests.cs
@@ -4,7 +4,7 @@
using Genius.PriceChecker.Core.Models;
using Genius.PriceChecker.Core.Repositories;
using Genius.PriceChecker.Core.Services;
-using Genius.PriceChecker.Infrastructure.Events;
+using Genius.Atom.Infrastructure.Events;
using Microsoft.Extensions.Logging;
using Moq;
using Xunit;
diff --git a/PriceChecker.Core/Messages/AgentDeletedEvent.cs b/PriceChecker.Core/Messages/AgentDeletedEvent.cs
index 6854a78..00351a1 100644
--- a/PriceChecker.Core/Messages/AgentDeletedEvent.cs
+++ b/PriceChecker.Core/Messages/AgentDeletedEvent.cs
@@ -1,5 +1,5 @@
using Genius.PriceChecker.Core.Models;
-using Genius.PriceChecker.Infrastructure.Events;
+using Genius.Atom.Infrastructure.Events;
namespace Genius.PriceChecker.Core.Messages
{
diff --git a/PriceChecker.Core/Messages/AgentsUpdatedEvent.cs b/PriceChecker.Core/Messages/AgentsUpdatedEvent.cs
index b317b04..32d2371 100644
--- a/PriceChecker.Core/Messages/AgentsUpdatedEvent.cs
+++ b/PriceChecker.Core/Messages/AgentsUpdatedEvent.cs
@@ -1,4 +1,4 @@
-using Genius.PriceChecker.Infrastructure.Events;
+using Genius.Atom.Infrastructure.Events;
namespace Genius.PriceChecker.Core.Messages
{
diff --git a/PriceChecker.Core/Messages/ProductAddedEvent.cs b/PriceChecker.Core/Messages/ProductAddedEvent.cs
index 7f620ba..73ba299 100644
--- a/PriceChecker.Core/Messages/ProductAddedEvent.cs
+++ b/PriceChecker.Core/Messages/ProductAddedEvent.cs
@@ -1,5 +1,5 @@
using Genius.PriceChecker.Core.Models;
-using Genius.PriceChecker.Infrastructure.Events;
+using Genius.Atom.Infrastructure.Events;
namespace Genius.PriceChecker.Core.Messages
{
diff --git a/PriceChecker.Core/Messages/ProductAutoScanStartedEvent.cs b/PriceChecker.Core/Messages/ProductAutoScanStartedEvent.cs
index b1f03c9..dbdf4df 100644
--- a/PriceChecker.Core/Messages/ProductAutoScanStartedEvent.cs
+++ b/PriceChecker.Core/Messages/ProductAutoScanStartedEvent.cs
@@ -1,4 +1,4 @@
-using Genius.PriceChecker.Infrastructure.Events;
+using Genius.Atom.Infrastructure.Events;
namespace Genius.PriceChecker.Core.Messages
{
diff --git a/PriceChecker.Core/Messages/ProductScanFailedEvent.cs b/PriceChecker.Core/Messages/ProductScanFailedEvent.cs
index 717dd6f..82b084c 100644
--- a/PriceChecker.Core/Messages/ProductScanFailedEvent.cs
+++ b/PriceChecker.Core/Messages/ProductScanFailedEvent.cs
@@ -1,5 +1,5 @@
using Genius.PriceChecker.Core.Models;
-using Genius.PriceChecker.Infrastructure.Events;
+using Genius.Atom.Infrastructure.Events;
namespace Genius.PriceChecker.Core.Messages
{
diff --git a/PriceChecker.Core/Messages/ProductScanStartedEvent.cs b/PriceChecker.Core/Messages/ProductScanStartedEvent.cs
index 43c6dff..114bbfd 100644
--- a/PriceChecker.Core/Messages/ProductScanStartedEvent.cs
+++ b/PriceChecker.Core/Messages/ProductScanStartedEvent.cs
@@ -1,5 +1,5 @@
using Genius.PriceChecker.Core.Models;
-using Genius.PriceChecker.Infrastructure.Events;
+using Genius.Atom.Infrastructure.Events;
namespace Genius.PriceChecker.Core.Messages
{
diff --git a/PriceChecker.Core/Messages/ProductScannedEvent.cs b/PriceChecker.Core/Messages/ProductScannedEvent.cs
index a664b7a..bd020c8 100644
--- a/PriceChecker.Core/Messages/ProductScannedEvent.cs
+++ b/PriceChecker.Core/Messages/ProductScannedEvent.cs
@@ -1,5 +1,5 @@
using Genius.PriceChecker.Core.Models;
-using Genius.PriceChecker.Infrastructure.Events;
+using Genius.Atom.Infrastructure.Events;
namespace Genius.PriceChecker.Core.Messages
{
diff --git a/PriceChecker.Core/Messages/ProductUpdatedEvent.cs b/PriceChecker.Core/Messages/ProductUpdatedEvent.cs
index 801b9d5..a4d92d9 100644
--- a/PriceChecker.Core/Messages/ProductUpdatedEvent.cs
+++ b/PriceChecker.Core/Messages/ProductUpdatedEvent.cs
@@ -1,5 +1,5 @@
using Genius.PriceChecker.Core.Models;
-using Genius.PriceChecker.Infrastructure.Events;
+using Genius.Atom.Infrastructure.Events;
namespace Genius.PriceChecker.Core.Messages
{
diff --git a/PriceChecker.Core/Messages/SettingsUpdatedEvent.cs b/PriceChecker.Core/Messages/SettingsUpdatedEvent.cs
index f86e340..4f04150 100644
--- a/PriceChecker.Core/Messages/SettingsUpdatedEvent.cs
+++ b/PriceChecker.Core/Messages/SettingsUpdatedEvent.cs
@@ -1,5 +1,5 @@
using Genius.PriceChecker.Core.Models;
-using Genius.PriceChecker.Infrastructure.Events;
+using Genius.Atom.Infrastructure.Events;
namespace Genius.PriceChecker.Core.Messages
{
diff --git a/PriceChecker.Core/PriceChecker.Core.csproj b/PriceChecker.Core/PriceChecker.Core.csproj
index e657d96..a6d6923 100644
--- a/PriceChecker.Core/PriceChecker.Core.csproj
+++ b/PriceChecker.Core/PriceChecker.Core.csproj
@@ -15,12 +15,9 @@
-
-
-
-
+
diff --git a/PriceChecker.Core/Repositories/AgentRepository.cs b/PriceChecker.Core/Repositories/AgentRepository.cs
index 3ab128a..636f0da 100644
--- a/PriceChecker.Core/Repositories/AgentRepository.cs
+++ b/PriceChecker.Core/Repositories/AgentRepository.cs
@@ -1,10 +1,10 @@
using System;
using System.Collections.Generic;
using System.Linq;
+using Genius.Atom.Infrastructure.Events;
using Genius.PriceChecker.Core.Messages;
using Genius.PriceChecker.Core.Models;
using Genius.PriceChecker.Core.Services;
-using Genius.PriceChecker.Infrastructure.Events;
using Microsoft.Extensions.Logging;
namespace Genius.PriceChecker.Core.Repositories
diff --git a/PriceChecker.Core/Repositories/ProductRepository.cs b/PriceChecker.Core/Repositories/ProductRepository.cs
index d138e78..fccb17f 100644
--- a/PriceChecker.Core/Repositories/ProductRepository.cs
+++ b/PriceChecker.Core/Repositories/ProductRepository.cs
@@ -4,7 +4,7 @@
using Genius.PriceChecker.Core.Messages;
using Genius.PriceChecker.Core.Models;
using Genius.PriceChecker.Core.Services;
-using Genius.PriceChecker.Infrastructure.Events;
+using Genius.Atom.Infrastructure.Events;
using Microsoft.Extensions.Logging;
namespace Genius.PriceChecker.Core.Repositories
diff --git a/PriceChecker.Core/Repositories/SettingsRepository.cs b/PriceChecker.Core/Repositories/SettingsRepository.cs
index c5c5ce1..aae55f9 100644
--- a/PriceChecker.Core/Repositories/SettingsRepository.cs
+++ b/PriceChecker.Core/Repositories/SettingsRepository.cs
@@ -2,7 +2,7 @@
using Genius.PriceChecker.Core.Messages;
using Genius.PriceChecker.Core.Models;
using Genius.PriceChecker.Core.Services;
-using Genius.PriceChecker.Infrastructure.Events;
+using Genius.Atom.Infrastructure.Events;
using Microsoft.Extensions.Logging;
namespace Genius.PriceChecker.Core.Repositories
diff --git a/PriceChecker.Core/Services/ProductPriceManager.cs b/PriceChecker.Core/Services/ProductPriceManager.cs
index 1dc17fb..32d282f 100644
--- a/PriceChecker.Core/Services/ProductPriceManager.cs
+++ b/PriceChecker.Core/Services/ProductPriceManager.cs
@@ -7,7 +7,7 @@
using Genius.PriceChecker.Core.Messages;
using Genius.PriceChecker.Core.Models;
using Genius.PriceChecker.Core.Repositories;
-using Genius.PriceChecker.Infrastructure.Events;
+using Genius.Atom.Infrastructure.Events;
using Microsoft.Extensions.Logging;
namespace Genius.PriceChecker.Core.Services
diff --git a/PriceChecker.Core/Services/TrickyHttpClient.cs b/PriceChecker.Core/Services/TrickyHttpClient.cs
index 2694ea8..f7af825 100644
--- a/PriceChecker.Core/Services/TrickyHttpClient.cs
+++ b/PriceChecker.Core/Services/TrickyHttpClient.cs
@@ -82,14 +82,14 @@ private async Task DownloadInternal(string url, CancellationToken cancel
return null;
}
- private string CreateRandomUserAgent()
+ private static string CreateRandomUserAgent()
{
var platform = new [] { "Machintosh", "Windows", "X11" }.TakeRandom();
var os = (platform switch {
"Machintosh" => new [] { "68K", "PPC" },
"Windows" => new [] { "Win3.11", "WinNT3.51", "WinNT4.0", "Windows NT 5.0", "Windows NT 5.1", "Windows NT 5.2", "Windows NT 6.0", "Windows NT 6.1", "Windows NT 6.2", "Win95", "Win98", "Win 9x 4.90", "WindowsCE" },
"X11" => new [] { "Linux i686", "Linux x86_64" },
- _ => new string[] {}
+ _ => Array.Empty()
}).TakeRandom();
var browser = new [] { "Chrome", "Firefox", "IE" }.TakeRandom();
diff --git a/PriceChecker.Infrastructure/CompositeDisposable.cs b/PriceChecker.Infrastructure/CompositeDisposable.cs
deleted file mode 100644
index 42e7580..0000000
--- a/PriceChecker.Infrastructure/CompositeDisposable.cs
+++ /dev/null
@@ -1,22 +0,0 @@
-using System;
-
-namespace Genius.PriceChecker.Infrastructure
-{
- public class CompositeDisposable : IDisposable
- {
- private readonly IDisposable[] _disposables;
-
- public CompositeDisposable(params IDisposable[] disposables)
- {
- _disposables = disposables;
- }
-
- public void Dispose()
- {
- foreach (var disposable in _disposables)
- {
- disposable.Dispose();
- }
- }
- }
-}
diff --git a/PriceChecker.Infrastructure/DisposableAction.cs b/PriceChecker.Infrastructure/DisposableAction.cs
deleted file mode 100644
index d486703..0000000
--- a/PriceChecker.Infrastructure/DisposableAction.cs
+++ /dev/null
@@ -1,19 +0,0 @@
-using System;
-
-namespace Genius.PriceChecker.Infrastructure
-{
- public class DisposableAction : IDisposable
- {
- private readonly Action _disposeAction;
-
- public DisposableAction(Action disposeAction)
- {
- _disposeAction = disposeAction;
- }
-
- public void Dispose()
- {
- _disposeAction();
- }
- }
-}
diff --git a/PriceChecker.Infrastructure/Events/EventBus.cs b/PriceChecker.Infrastructure/Events/EventBus.cs
deleted file mode 100644
index ff3b5aa..0000000
--- a/PriceChecker.Infrastructure/Events/EventBus.cs
+++ /dev/null
@@ -1,64 +0,0 @@
-using System;
-using System.Reactive;
-using System.Reactive.Linq;
-
-namespace Genius.PriceChecker.Infrastructure.Events
-{
- public interface IEventBus
- {
- void Publish(IEventMessage @event);
- IObservable WhenFired()
- where T : IEventMessage;
- IObservable WhenFired()
- where T1 : IEventMessage
- where T2 : IEventMessage;
- IObservable WhenFired()
- where T1 : IEventMessage
- where T2 : IEventMessage
- where T3 : IEventMessage;
- }
-
- internal sealed class EventBus : IEventBus
- {
- private event EventHandler _eventAdded;
- private readonly IObservable _mainObservable;
-
- public EventBus()
- {
- _mainObservable = Observable.FromEventPattern(
- x => this._eventAdded += x,
- x => this._eventAdded -= x)
- .Select(x => x.EventArgs);
- }
-
- public void Publish(IEventMessage message)
- {
- _eventAdded?.Invoke(this, new EventPublishedArgs(message));
- }
-
- public IObservable WhenFired()
- where T : IEventMessage
- {
- return _mainObservable
- .Where(x => x.Event is T)
- .Select(x => (T)x.Event);
- }
-
- public IObservable WhenFired()
- where T1 : IEventMessage
- where T2 : IEventMessage
- {
- return WhenFired().Select(x => Unit.Default)
- .Merge(WhenFired().Select(x => Unit.Default));
- }
-
- public IObservable WhenFired()
- where T1 : IEventMessage
- where T2 : IEventMessage
- where T3 : IEventMessage
- {
- return WhenFired()
- .Merge(WhenFired().Select(x => Unit.Default));
- }
- }
-}
diff --git a/PriceChecker.Infrastructure/Events/EventPublishedArgs.cs b/PriceChecker.Infrastructure/Events/EventPublishedArgs.cs
deleted file mode 100644
index 3bdf8b1..0000000
--- a/PriceChecker.Infrastructure/Events/EventPublishedArgs.cs
+++ /dev/null
@@ -1,14 +0,0 @@
-using System;
-
-namespace Genius.PriceChecker.Infrastructure.Events
-{
- internal sealed class EventPublishedArgs : EventArgs
- {
- public EventPublishedArgs(IEventMessage @event)
- {
- Event = @event;
- }
-
- public IEventMessage Event { get; }
- }
-}
\ No newline at end of file
diff --git a/PriceChecker.Infrastructure/Events/IEventMessage.cs b/PriceChecker.Infrastructure/Events/IEventMessage.cs
deleted file mode 100644
index ce788a5..0000000
--- a/PriceChecker.Infrastructure/Events/IEventMessage.cs
+++ /dev/null
@@ -1,6 +0,0 @@
-namespace Genius.PriceChecker.Infrastructure.Events
-{
- public interface IEventMessage
- {
- }
-}
diff --git a/PriceChecker.Infrastructure/ExpressionHelpers.cs b/PriceChecker.Infrastructure/ExpressionHelpers.cs
deleted file mode 100644
index b51991d..0000000
--- a/PriceChecker.Infrastructure/ExpressionHelpers.cs
+++ /dev/null
@@ -1,20 +0,0 @@
-using System;
-using System.Linq.Expressions;
-
-namespace Genius.PriceChecker.Infrastructure
-{
- public static class ExpressionHelpers
- {
- public static string GetPropertyName(Expression> propertyLambda)
- {
- MemberExpression body = propertyLambda.Body as MemberExpression;
-
- if (body == null) {
- UnaryExpression ubody = (UnaryExpression)propertyLambda.Body;
- body = ubody.Operand as MemberExpression;
- }
-
- return body.Member.Name;
- }
- }
-}
diff --git a/PriceChecker.Infrastructure/Logging/EventBasedLogger.cs b/PriceChecker.Infrastructure/Logging/EventBasedLogger.cs
deleted file mode 100644
index 7970ad4..0000000
--- a/PriceChecker.Infrastructure/Logging/EventBasedLogger.cs
+++ /dev/null
@@ -1,49 +0,0 @@
-using System;
-using System.Linq;
-using Genius.PriceChecker.Infrastructure.Events;
-using Microsoft.Extensions.Logging;
-
-namespace Genius.PriceChecker.Infrastructure.Logging
-{
- internal sealed class EventBasedLogger : ILogger
- {
- private readonly IEventBus _eventBus;
- private readonly string _name;
- private readonly string _shortName;
-
- public EventBasedLogger(string name, IEventBus eventBus)
- {
- _name = name;
- _shortName = CreateShortNameFrom(name);
- _eventBus = eventBus;
- }
-
- public IDisposable BeginScope(TState state) => default;
-
- public bool IsEnabled(LogLevel logLevel)
- // Ignore all log events below Information
- => logLevel >= LogLevel.Information;
-
- public void Log(LogLevel logLevel, EventId eventId, TState state, Exception exception, Func formatter)
- {
- if (!IsEnabled(logLevel))
- {
- return;
- }
-
- var message = formatter(state, exception);
-
- _eventBus.Publish(new LogEvent(logLevel, _shortName, message));
- }
-
- private string CreateShortNameFrom(string name)
- {
- if (name.StartsWith("Genius."))
- {
- return string.Join('.', name.Split('.').Skip(3));
- }
-
- return name;
- }
- }
-}
diff --git a/PriceChecker.Infrastructure/Logging/EventBasedLoggerProvider.cs b/PriceChecker.Infrastructure/Logging/EventBasedLoggerProvider.cs
deleted file mode 100644
index cede43f..0000000
--- a/PriceChecker.Infrastructure/Logging/EventBasedLoggerProvider.cs
+++ /dev/null
@@ -1,29 +0,0 @@
-using System.Collections.Concurrent;
-using Genius.PriceChecker.Infrastructure.Events;
-using Microsoft.Extensions.Logging;
-
-namespace Genius.PriceChecker.Infrastructure.Logging
-{
- public sealed class EventBasedLoggerProvider : ILoggerProvider
- {
- private readonly IEventBus _eventBus;
-
- private readonly ConcurrentDictionary _loggers =
- new ConcurrentDictionary();
-
- public EventBasedLoggerProvider(IEventBus eventBus)
- {
- _eventBus = eventBus;
- }
-
- public ILogger CreateLogger(string categoryName)
- {
- return _loggers.GetOrAdd(categoryName, name => new EventBasedLogger(name, _eventBus));
- }
-
- public void Dispose()
- {
- _loggers.Clear();
- }
- }
-}
diff --git a/PriceChecker.Infrastructure/Logging/LogEvent.cs b/PriceChecker.Infrastructure/Logging/LogEvent.cs
deleted file mode 100644
index 1b46c5b..0000000
--- a/PriceChecker.Infrastructure/Logging/LogEvent.cs
+++ /dev/null
@@ -1,19 +0,0 @@
-using Genius.PriceChecker.Infrastructure.Events;
-using Microsoft.Extensions.Logging;
-
-namespace Genius.PriceChecker.Infrastructure.Logging
-{
- public sealed class LogEvent : IEventMessage
- {
- public LogEvent(LogLevel severity, string logger, string message)
- {
- Severity = severity;
- Logger = logger;
- Message = message;
- }
-
- public LogLevel Severity { get; }
- public string Logger { get; }
- public string Message { get; }
- }
-}
diff --git a/PriceChecker.Infrastructure/Module.cs b/PriceChecker.Infrastructure/Module.cs
deleted file mode 100644
index 980bfbe..0000000
--- a/PriceChecker.Infrastructure/Module.cs
+++ /dev/null
@@ -1,15 +0,0 @@
-using System.Diagnostics.CodeAnalysis;
-using Genius.PriceChecker.Infrastructure.Events;
-using Microsoft.Extensions.DependencyInjection;
-
-namespace Genius.PriceChecker.Infrastructure
-{
- [ExcludeFromCodeCoverage]
- public static class Module
- {
- public static void Configure(IServiceCollection services)
- {
- services.AddSingleton();
- }
- }
-}
diff --git a/PriceChecker.Infrastructure/PriceChecker.Infrastructure.csproj b/PriceChecker.Infrastructure/PriceChecker.Infrastructure.csproj
deleted file mode 100644
index ab99415..0000000
--- a/PriceChecker.Infrastructure/PriceChecker.Infrastructure.csproj
+++ /dev/null
@@ -1,14 +0,0 @@
-
-
-
- net5.0
- Genius.PriceChecker.Infrastructure
-
-
-
-
-
-
-
-
-
diff --git a/PriceChecker.UI.Forms.Tests/PriceChecker.UI.Forms.Tests.csproj b/PriceChecker.UI.Forms.Tests/PriceChecker.UI.Forms.Tests.csproj
deleted file mode 100644
index 36f317f..0000000
--- a/PriceChecker.UI.Forms.Tests/PriceChecker.UI.Forms.Tests.csproj
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
- net5.0-windows
- Genius.PriceChecker.UI.Forms.Tests
- false
-
-
-
-
-
-
-
diff --git a/PriceChecker.UI.Forms/ActionCommand.cs b/PriceChecker.UI.Forms/ActionCommand.cs
deleted file mode 100644
index 6de3449..0000000
--- a/PriceChecker.UI.Forms/ActionCommand.cs
+++ /dev/null
@@ -1,83 +0,0 @@
-using System;
-using System.Reactive;
-using System.Reactive.Subjects;
-using System.Threading.Tasks;
-using System.Windows;
-using System.Windows.Input;
-
-namespace Genius.PriceChecker.UI.Forms
-{
- public interface IActionCommand : ICommand
- {
- IObservable Executed { get; }
- }
-
- public class ActionCommand : IActionCommand
- {
- private Func