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); } }