diff --git a/AnimeAnnouncer.Web/Pages/Index.cshtml.cs b/AnimeAnnouncer.Web/Pages/Index.cshtml.cs index ab132af..571443e 100644 --- a/AnimeAnnouncer.Web/Pages/Index.cshtml.cs +++ b/AnimeAnnouncer.Web/Pages/Index.cshtml.cs @@ -43,7 +43,7 @@ public class IndexModel : PageModel TMDBCacheItem? cacheItem = null; try { - cacheItem = await _tmdbCache.GetCacheItem($"ShowCache-{airingItem.Title}"); + cacheItem = await _tmdbCache.GetCacheItem($"ShowCache-{airingItem.Title}"); } catch (Exception ex) { @@ -68,7 +68,7 @@ public class IndexModel : PageModel }).ToList(); AiringShows = displayable - .Where(x => x.EffectiveLastAirDate.HasValue && x.EffectiveLastAirDate.Value > DateTime.Now) + .Where(x => x.EffectiveLastAirDate.HasValue && x.EffectiveLastAirDate.Value.Date >= DateTime.Now.Date) .OrderBy(x => x.EffectiveLastAirDate) .ThenBy(x => x.Title) .ToList(); @@ -107,8 +107,8 @@ public class IndexModel : PageModel return CachedDetails.LatestSeasonPosterPath; if (!string.IsNullOrWhiteSpace(CachedDetails?.PosterPath)) return CachedDetails.PosterPath; - if (!string.IsNullOrWhiteSpace(CachedDetails?.AnilistPosterPath)) - return CachedDetails.AnilistPosterPath; + //if (!string.IsNullOrWhiteSpace(CachedDetails?.AnilistPosterPath)) + // return CachedDetails.AnilistPosterPath; return null; } } diff --git a/AnimeAnnouncer/Cache/TMDBCache.cs b/AnimeAnnouncer/Cache/TMDBCache.cs index 549c1f1..2d9729f 100644 --- a/AnimeAnnouncer/Cache/TMDBCache.cs +++ b/AnimeAnnouncer/Cache/TMDBCache.cs @@ -17,22 +17,22 @@ public class TMDBCache CacheExpiration = TimeSpan.FromDays(3); redis = ConnectionMultiplexer.Connect(redisConnectionString); } - public async Task SetCacheItem(String key, TMDBCacheItem item) + public async Task SetCacheItem(String key, T item) { var db = redis.GetDatabase(); String jsonItem = JsonSerializer.Serialize(item); await db.StringSetAsync(key, jsonItem, CacheExpiration); } - public async Task GetCacheItem(String key) + public async Task GetCacheItem(String key) { var db = redis.GetDatabase(); - String jsonItem = await db.StringGetAsync(key); + String? jsonItem = await db.StringGetAsync(key); if (!String.IsNullOrEmpty(jsonItem)) - return JsonSerializer.Deserialize(jsonItem); + return JsonSerializer.Deserialize(jsonItem); else - return null; + return default; } public async Task RemoveCacheItem(String key) diff --git a/AnimeAnnouncer/Cache/TMDBCacheItem.cs b/AnimeAnnouncer/Cache/TMDBCacheItem.cs index 49a3f5d..44be978 100644 --- a/AnimeAnnouncer/Cache/TMDBCacheItem.cs +++ b/AnimeAnnouncer/Cache/TMDBCacheItem.cs @@ -21,7 +21,9 @@ namespace AnimeAnnouncer.Cache public int? LatestEpisodeNumber { get; set; } public Boolean? AnilistPopulated { get; set; } - public String? AnilistPosterPath { get; set; } + + public DateTime? Updated { get; set; } + } } \ No newline at end of file diff --git a/AnimeAnnouncer/Program.cs b/AnimeAnnouncer/Program.cs index a5526d0..d20b9c6 100644 --- a/AnimeAnnouncer/Program.cs +++ b/AnimeAnnouncer/Program.cs @@ -145,11 +145,14 @@ namespace AnimeAnnouncer DateTime? lastAirDate = null; TMDBCacheItem? cachedShow = null; + + latestEpisodeNumber = int.Parse(episode); try { - cachedShow = await tmdbCache.GetCacheItem($"ShowCache-{title}"); - if(cachedShow != null) + cachedShow = await tmdbCache.GetCacheItem($"ShowCache-{title}"); + + if(cachedShow != null && (cachedShow.Updated.HasValue && DateTime.Now.Subtract(cachedShow.Updated.Value).Days < 6)) { Console.WriteLine("Cache hit"); latestSeasonNumber = cachedShow.LatestSeasonNumber; @@ -194,7 +197,7 @@ namespace AnimeAnnouncer lastEpisodeNumber = latestSeason.EpisodeCount; - latestEpisodeNumber = int.Parse(episode); + //if nearing the end of a season, confirm it's marked with season finale @@ -224,21 +227,32 @@ namespace AnimeAnnouncer { try { - Console.WriteLine("Looking up Anilist title " + title); - var anilistMedia = await anilistClient.RetrieveAiringShowInformation(title); - if (anilistMedia != null) + AnilistCacheItem? anilistCacheItem = await tmdbCache.GetCacheItem($"AnilistCache-{title}"); + if (anilistCacheItem == null) { - if (anilistMedia.Episodes.HasValue && anilistMedia.Episodes != lastEpisodeNumber) + Console.WriteLine("Looking up Anilist title " + title); + var anilistMedia = await anilistClient.RetrieveAiringShowInformation(title); + if (anilistMedia != null) + { + anilistCacheItem = AnilistCacheItem.FromMedia(anilistMedia); + anilistCacheItem.Updated = DateTime.Now; + _ = tmdbCache.SetCacheItem($"AnilistCache-{title}", anilistCacheItem); + } + else + Console.WriteLine("0 anilist results found"); + } + + if (anilistCacheItem != null) + { + if (anilistCacheItem.Episodes.HasValue && anilistCacheItem.Episodes != lastEpisodeNumber) { Console.WriteLine( - $"Overriding episode count of {lastEpisodeNumber} using Anilist's showID {anilistMedia.Id} titled {anilistMedia.Title.EnglishTitle} with {anilistMedia.Episodes} episodes."); - lastEpisodeNumber = anilistMedia.Episodes.Value; + $"Overriding episode count of {lastEpisodeNumber} using Anilist's showID {anilistCacheItem.ShowID} titled {anilistCacheItem.EnglishTitle} with {anilistCacheItem.Episodes} episodes."); + lastEpisodeNumber = anilistCacheItem.Episodes.Value; } - anilistPosterPath = anilistMedia.BannerImageUrl?.ToString(); + anilistPosterPath = anilistCacheItem.BannerImageUrl; } - else - Console.WriteLine("0 anilist results found"); } catch (Exception ex) { @@ -276,7 +290,7 @@ namespace AnimeAnnouncer LastAirDate = lastAirDate, LatestEpisodeNumber = latestEpisodeNumber, AnilistPopulated = anilistPosterPath != null, - AnilistPosterPath = anilistPosterPath + Updated = DateTime.Now }; _ = tmdbCache.SetCacheItem($"ShowCache-{title}", cachedShow); Console.WriteLine($"{title} Added to cache");