From 461c545cb0b4c08038f47e9b6147eafc60a53874 Mon Sep 17 00:00:00 2001 From: Guillermo Marcel Date: Sun, 16 Feb 2025 13:36:37 -0300 Subject: [PATCH] refactor: extract dvr scanner and connector to interfaces --- .../AutoScan/DependencyInjectionExtensions.cs | 7 +++++-- .../AutoScan/{ => Implementations}/DVRScanner.cs | 5 +++-- .../{ => Implementations}/ShinobiConnector.cs | 5 +++-- src/CasaBot/AutoScan/Interfaces/IDVRConnector.cs | 9 +++++++++ src/CasaBot/AutoScan/Interfaces/IDVRScanner.cs | 6 ++++++ src/CasaBot/AutoScan/Jobs/DownloaderJob.cs | 13 +++++++------ src/CasaBot/AutoScan/Jobs/ScannerJob.cs | 8 +++++++- 7 files changed, 40 insertions(+), 13 deletions(-) rename src/CasaBot/AutoScan/{ => Implementations}/DVRScanner.cs (95%) rename src/CasaBot/AutoScan/{ => Implementations}/ShinobiConnector.cs (96%) create mode 100644 src/CasaBot/AutoScan/Interfaces/IDVRConnector.cs create mode 100644 src/CasaBot/AutoScan/Interfaces/IDVRScanner.cs diff --git a/src/CasaBot/AutoScan/DependencyInjectionExtensions.cs b/src/CasaBot/AutoScan/DependencyInjectionExtensions.cs index c12985c..32c2147 100644 --- a/src/CasaBot/AutoScan/DependencyInjectionExtensions.cs +++ b/src/CasaBot/AutoScan/DependencyInjectionExtensions.cs @@ -1,3 +1,5 @@ +using AutoScan.Implementations; +using AutoScan.Interfaces; using AutoScan.Listener; using CasaBotApp; using Microsoft.Extensions.DependencyInjection; @@ -9,8 +11,9 @@ public static class DependencyInjectionExtensions { public static void AddAutoScan(this IServiceCollection services) { - services.AddSingleton(); - services.AddSingleton(); + services.AddSingleton(); + services.AddSingleton(); + services.AddSingleton(); services.AddSingleton(); services.AddQuartz(q => diff --git a/src/CasaBot/AutoScan/DVRScanner.cs b/src/CasaBot/AutoScan/Implementations/DVRScanner.cs similarity index 95% rename from src/CasaBot/AutoScan/DVRScanner.cs rename to src/CasaBot/AutoScan/Implementations/DVRScanner.cs index a7caf3b..c07fed6 100644 --- a/src/CasaBot/AutoScan/DVRScanner.cs +++ b/src/CasaBot/AutoScan/Implementations/DVRScanner.cs @@ -1,9 +1,10 @@ +using AutoScan.Interfaces; using Microsoft.Extensions.Logging; using System.Diagnostics; -namespace CasaBotApp; +namespace AutoScan.Implementations; -public class DVRScanner +public class DVRScanner : IDVRScanner { private readonly ILogger _logger; private const string _mediaPath = @".\media"; // Replace with your desired file path diff --git a/src/CasaBot/AutoScan/ShinobiConnector.cs b/src/CasaBot/AutoScan/Implementations/ShinobiConnector.cs similarity index 96% rename from src/CasaBot/AutoScan/ShinobiConnector.cs rename to src/CasaBot/AutoScan/Implementations/ShinobiConnector.cs index 7a180cf..f968bdb 100644 --- a/src/CasaBot/AutoScan/ShinobiConnector.cs +++ b/src/CasaBot/AutoScan/Implementations/ShinobiConnector.cs @@ -1,12 +1,13 @@ +using AutoScan.Interfaces; using AutoScan.Models; using AutoScan.Options; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; using System.Net.Http.Json; -namespace AutoScan; +namespace AutoScan.Implementations; -public class ShinobiConnector +public class ShinobiConnector : IDVRConnector { private readonly ILogger _logger; private readonly HttpClient _httpClient; diff --git a/src/CasaBot/AutoScan/Interfaces/IDVRConnector.cs b/src/CasaBot/AutoScan/Interfaces/IDVRConnector.cs new file mode 100644 index 0000000..1ec664f --- /dev/null +++ b/src/CasaBot/AutoScan/Interfaces/IDVRConnector.cs @@ -0,0 +1,9 @@ +using AutoScan.Models; + +namespace AutoScan.Interfaces; + +public interface IDVRConnector +{ + Task> FetchMonitorVideosBetween(DateTime from, DateTime to); + Task DownloadMonitorVideo(VideoDetail video, string downloadFolder); +} \ No newline at end of file diff --git a/src/CasaBot/AutoScan/Interfaces/IDVRScanner.cs b/src/CasaBot/AutoScan/Interfaces/IDVRScanner.cs new file mode 100644 index 0000000..fd4cfed --- /dev/null +++ b/src/CasaBot/AutoScan/Interfaces/IDVRScanner.cs @@ -0,0 +1,6 @@ +namespace AutoScan.Interfaces; + +public interface IDVRScanner +{ + Task ScanVideos(CancellationToken cancellationToken = default); +} \ No newline at end of file diff --git a/src/CasaBot/AutoScan/Jobs/DownloaderJob.cs b/src/CasaBot/AutoScan/Jobs/DownloaderJob.cs index 5f06c33..f8b09ad 100644 --- a/src/CasaBot/AutoScan/Jobs/DownloaderJob.cs +++ b/src/CasaBot/AutoScan/Jobs/DownloaderJob.cs @@ -1,3 +1,4 @@ +using AutoScan.Interfaces; using AutoScan.Options; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; @@ -9,13 +10,13 @@ public class DownloaderJob : IJob { private readonly ILogger _logger; private readonly AutoScanOptions _options; - private readonly ShinobiConnector _shinobiConnector; + private readonly IDVRConnector _dvrConnector; - public DownloaderJob(ILogger logger, IOptionsSnapshot options, ShinobiConnector shinobiConnector) + public DownloaderJob(ILogger logger, IOptionsSnapshot options, IDVRConnector dvrConnector) { _logger = logger; _options = options.Value; - _shinobiConnector = shinobiConnector; + _dvrConnector = dvrConnector; } public async Task Execute(IJobExecutionContext context) @@ -33,7 +34,7 @@ public class DownloaderJob : IJob return; } - //create from variable with the datetime of last night with the variables in options.From (23:00) and options.FromDayBefore (true) [yesterday] + //time to start retrieving videos //for example, if options.From is 23:00 and options.FromDayBefore is true, from should be yesterday at 23:00 var now = DateTime.Now; var minutes = _options.From.Split(":")[1]; @@ -49,7 +50,7 @@ public class DownloaderJob : IJob var to = new DateTime(now.Year, now.Month, now.Day, int.Parse(hours), int.Parse(minutes), 0); _logger.LogInformation("Fetching videos from {From} to {To}", from, to); - var videos = await _shinobiConnector.FetchMonitorVideosBetween(from, to); + var videos = await _dvrConnector.FetchMonitorVideosBetween(from, to); //if the amount of videos is greater than the max amount in options, log a warning if (_options.MaxAmount > 0 && videos.Count > _options.MaxAmount) @@ -64,7 +65,7 @@ public class DownloaderJob : IJob foreach (var video in videos) { _logger.LogDebug("Downloading video {Filename}", video.filename); - await _shinobiConnector.DownloadMonitorVideo(video, _options.MediaFolder); + await _dvrConnector.DownloadMonitorVideo(video, _options.MediaFolder); } context.Result = new JobResult() diff --git a/src/CasaBot/AutoScan/Jobs/ScannerJob.cs b/src/CasaBot/AutoScan/Jobs/ScannerJob.cs index f0ba22a..db76fb0 100644 --- a/src/CasaBot/AutoScan/Jobs/ScannerJob.cs +++ b/src/CasaBot/AutoScan/Jobs/ScannerJob.cs @@ -1,3 +1,4 @@ +using AutoScan.Interfaces; using Microsoft.Extensions.Logging; using Quartz; @@ -6,13 +7,18 @@ namespace AutoScan.Jobs; public class ScannerJob : IJob { private readonly ILogger _logger; - public ScannerJob(ILogger logger) + private readonly IDVRScanner _scanner; + + public ScannerJob(ILogger logger, IDVRScanner scanner) { _logger = logger; + _scanner = scanner; } public Task Execute(IJobExecutionContext context) { _logger.LogWarning("ScannerJob is not implemented yet!"); + _logger.LogInformation("Scanner {scannerName} is ready to scan!", _scanner.GetType().Name); return Task.CompletedTask; + } } \ No newline at end of file