From 526ac1b8ab2838f6b28b1c3be984527bb1d7a6c8 Mon Sep 17 00:00:00 2001 From: Zoe Roux Date: Mon, 22 Apr 2024 16:29:36 +0200 Subject: [PATCH] Compute next refresh date automatically for all resources --- .../Models/Resources/Interfaces/IRefreshable.cs | 14 ++++++++++++++ .../Repositories/CollectionRepository.cs | 1 + .../Controllers/Repositories/EpisodeRepository.cs | 10 +--------- .../Controllers/Repositories/MovieRepository.cs | 1 + .../Controllers/Repositories/SeasonRepository.cs | 2 +- .../Controllers/Repositories/ShowRepository.cs | 1 + 6 files changed, 19 insertions(+), 10 deletions(-) diff --git a/back/src/Kyoo.Abstractions/Models/Resources/Interfaces/IRefreshable.cs b/back/src/Kyoo.Abstractions/Models/Resources/Interfaces/IRefreshable.cs index cef2b663..ad7acc73 100644 --- a/back/src/Kyoo.Abstractions/Models/Resources/Interfaces/IRefreshable.cs +++ b/back/src/Kyoo.Abstractions/Models/Resources/Interfaces/IRefreshable.cs @@ -26,4 +26,18 @@ public interface IRefreshable /// The date of the next metadata refresh. Null if auto-refresh is disabled. /// public DateTime? NextMetadataRefresh { get; set; } + + public static DateTime ComputeNextRefreshDate(DateOnly? airDate) + { + if (airDate is null) + return DateTime.UtcNow.AddDays(1); + + int days = airDate.Value.DayNumber - DateOnly.FromDateTime(DateTime.UtcNow).DayNumber; + return days switch + { + <= 7 => DateTime.UtcNow.AddDays(1), + <= 21 => DateTime.UtcNow.AddDays(5), + _ => DateTime.UtcNow.AddMonths(2) + }; + } } diff --git a/back/src/Kyoo.Core/Controllers/Repositories/CollectionRepository.cs b/back/src/Kyoo.Core/Controllers/Repositories/CollectionRepository.cs index d9f8499b..0a81a29b 100644 --- a/back/src/Kyoo.Core/Controllers/Repositories/CollectionRepository.cs +++ b/back/src/Kyoo.Core/Controllers/Repositories/CollectionRepository.cs @@ -53,6 +53,7 @@ public class CollectionRepository(DatabaseContext database, IThumbnailsManager t if (string.IsNullOrEmpty(resource.Name)) throw new ArgumentException("The collection's name must be set and not empty"); + resource.NextMetadataRefresh ??= DateTime.UtcNow.AddMonths(2); await thumbnails.DownloadImages(resource); } diff --git a/back/src/Kyoo.Core/Controllers/Repositories/EpisodeRepository.cs b/back/src/Kyoo.Core/Controllers/Repositories/EpisodeRepository.cs index 2561ad89..e1f2f0bd 100644 --- a/back/src/Kyoo.Core/Controllers/Repositories/EpisodeRepository.cs +++ b/back/src/Kyoo.Core/Controllers/Repositories/EpisodeRepository.cs @@ -92,15 +92,7 @@ public class EpisodeRepository( .FirstOrDefaultAsync(); } - // Refresh metadata every day if the item aired this week, refresh every two mounts otherwise - if ( - resource.ReleaseDate is not DateOnly date - || (date.DayNumber - DateOnly.FromDateTime(DateTime.UtcNow).DayNumber) < 7 - ) - resource.NextMetadataRefresh = DateTime.UtcNow.AddDays(1); - else - resource.NextMetadataRefresh = DateTime.UtcNow.AddMonths(2); - + resource.NextMetadataRefresh ??= IRefreshable.ComputeNextRefreshDate(resource.ReleaseDate); await thumbnails.DownloadImages(resource); } diff --git a/back/src/Kyoo.Core/Controllers/Repositories/MovieRepository.cs b/back/src/Kyoo.Core/Controllers/Repositories/MovieRepository.cs index c04a72cb..2dec59c8 100644 --- a/back/src/Kyoo.Core/Controllers/Repositories/MovieRepository.cs +++ b/back/src/Kyoo.Core/Controllers/Repositories/MovieRepository.cs @@ -74,6 +74,7 @@ public class MovieRepository( resource.StudioId = (await studios.CreateIfNotExists(resource.Studio)).Id; resource.Studio = null; } + resource.NextMetadataRefresh ??= IRefreshable.ComputeNextRefreshDate(resource.AirDate); await thumbnails.DownloadImages(resource); } } diff --git a/back/src/Kyoo.Core/Controllers/Repositories/SeasonRepository.cs b/back/src/Kyoo.Core/Controllers/Repositories/SeasonRepository.cs index aa314440..61297f4a 100644 --- a/back/src/Kyoo.Core/Controllers/Repositories/SeasonRepository.cs +++ b/back/src/Kyoo.Core/Controllers/Repositories/SeasonRepository.cs @@ -23,7 +23,6 @@ using System.Linq; using System.Threading.Tasks; using Kyoo.Abstractions.Controllers; using Kyoo.Abstractions.Models; -using Kyoo.Abstractions.Models.Exceptions; using Kyoo.Abstractions.Models.Utils; using Kyoo.Postgresql; using Microsoft.EntityFrameworkCore; @@ -78,6 +77,7 @@ public class SeasonRepository( throw new ValidationException("Missing show id"); // This is storred in db so it needs to be set before every create/edit (and before events) resource.ShowSlug = (await shows.Get(resource.ShowId)).Slug; + resource.NextMetadataRefresh ??= IRefreshable.ComputeNextRefreshDate(resource.StartDate); await thumbnails.DownloadImages(resource); } } diff --git a/back/src/Kyoo.Core/Controllers/Repositories/ShowRepository.cs b/back/src/Kyoo.Core/Controllers/Repositories/ShowRepository.cs index 17ee8251..13caad26 100644 --- a/back/src/Kyoo.Core/Controllers/Repositories/ShowRepository.cs +++ b/back/src/Kyoo.Core/Controllers/Repositories/ShowRepository.cs @@ -74,6 +74,7 @@ public class ShowRepository( resource.StudioId = (await studios.CreateIfNotExists(resource.Studio)).Id; resource.Studio = null; } + resource.NextMetadataRefresh ??= IRefreshable.ComputeNextRefreshDate(resource.StartAir); await thumbnails.DownloadImages(resource); } }