Various minor changes to announcer to support Web version and include Anilist

This commit is contained in:
2026-09-21 14:19:39 -04:00
parent 8831d0ce2f
commit a1ec0ea7f5
4 changed files with 39 additions and 23 deletions
+4 -4
View File
@@ -43,7 +43,7 @@ public class IndexModel : PageModel
TMDBCacheItem? cacheItem = null; TMDBCacheItem? cacheItem = null;
try try
{ {
cacheItem = await _tmdbCache.GetCacheItem($"ShowCache-{airingItem.Title}"); cacheItem = await _tmdbCache.GetCacheItem<TMDBCacheItem>($"ShowCache-{airingItem.Title}");
} }
catch (Exception ex) catch (Exception ex)
{ {
@@ -68,7 +68,7 @@ public class IndexModel : PageModel
}).ToList(); }).ToList();
AiringShows = displayable 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) .OrderBy(x => x.EffectiveLastAirDate)
.ThenBy(x => x.Title) .ThenBy(x => x.Title)
.ToList(); .ToList();
@@ -107,8 +107,8 @@ public class IndexModel : PageModel
return CachedDetails.LatestSeasonPosterPath; return CachedDetails.LatestSeasonPosterPath;
if (!string.IsNullOrWhiteSpace(CachedDetails?.PosterPath)) if (!string.IsNullOrWhiteSpace(CachedDetails?.PosterPath))
return CachedDetails.PosterPath; return CachedDetails.PosterPath;
if (!string.IsNullOrWhiteSpace(CachedDetails?.AnilistPosterPath)) //if (!string.IsNullOrWhiteSpace(CachedDetails?.AnilistPosterPath))
return CachedDetails.AnilistPosterPath; // return CachedDetails.AnilistPosterPath;
return null; return null;
} }
} }
+5 -5
View File
@@ -17,22 +17,22 @@ public class TMDBCache
CacheExpiration = TimeSpan.FromDays(3); CacheExpiration = TimeSpan.FromDays(3);
redis = ConnectionMultiplexer.Connect(redisConnectionString); redis = ConnectionMultiplexer.Connect(redisConnectionString);
} }
public async Task SetCacheItem(String key, TMDBCacheItem item) public async Task SetCacheItem<T>(String key, T item)
{ {
var db = redis.GetDatabase(); var db = redis.GetDatabase();
String jsonItem = JsonSerializer.Serialize(item); String jsonItem = JsonSerializer.Serialize(item);
await db.StringSetAsync(key, jsonItem, CacheExpiration); await db.StringSetAsync(key, jsonItem, CacheExpiration);
} }
public async Task<TMDBCacheItem> GetCacheItem(String key) public async Task<T?> GetCacheItem<T>(String key)
{ {
var db = redis.GetDatabase(); var db = redis.GetDatabase();
String jsonItem = await db.StringGetAsync(key); String? jsonItem = await db.StringGetAsync(key);
if (!String.IsNullOrEmpty(jsonItem)) if (!String.IsNullOrEmpty(jsonItem))
return JsonSerializer.Deserialize<TMDBCacheItem>(jsonItem); return JsonSerializer.Deserialize<T>(jsonItem);
else else
return null; return default;
} }
public async Task RemoveCacheItem(String key) public async Task RemoveCacheItem(String key)
+3 -1
View File
@@ -21,7 +21,9 @@ namespace AnimeAnnouncer.Cache
public int? LatestEpisodeNumber { get; set; } public int? LatestEpisodeNumber { get; set; }
public Boolean? AnilistPopulated { get; set; } public Boolean? AnilistPopulated { get; set; }
public String? AnilistPosterPath { get; set; }
public DateTime? Updated { get; set; }
} }
} }
+26 -12
View File
@@ -146,10 +146,13 @@ namespace AnimeAnnouncer
TMDBCacheItem? cachedShow = null; TMDBCacheItem? cachedShow = null;
latestEpisodeNumber = int.Parse(episode);
try try
{ {
cachedShow = await tmdbCache.GetCacheItem($"ShowCache-{title}"); cachedShow = await tmdbCache.GetCacheItem<TMDBCacheItem>($"ShowCache-{title}");
if(cachedShow != null)
if(cachedShow != null && (cachedShow.Updated.HasValue && DateTime.Now.Subtract(cachedShow.Updated.Value).Days < 6))
{ {
Console.WriteLine("Cache hit"); Console.WriteLine("Cache hit");
latestSeasonNumber = cachedShow.LatestSeasonNumber; latestSeasonNumber = cachedShow.LatestSeasonNumber;
@@ -194,7 +197,7 @@ namespace AnimeAnnouncer
lastEpisodeNumber = latestSeason.EpisodeCount; lastEpisodeNumber = latestSeason.EpisodeCount;
latestEpisodeNumber = int.Parse(episode);
//if nearing the end of a season, confirm it's marked with season finale //if nearing the end of a season, confirm it's marked with season finale
@@ -223,23 +226,34 @@ namespace AnimeAnnouncer
if (latestEpisodeNumber > 3 && anilistClient != null) if (latestEpisodeNumber > 3 && anilistClient != null)
{ {
try try
{
AnilistCacheItem? anilistCacheItem = await tmdbCache.GetCacheItem<AnilistCacheItem>($"AnilistCache-{title}");
if (anilistCacheItem == null)
{ {
Console.WriteLine("Looking up Anilist title " + title); Console.WriteLine("Looking up Anilist title " + title);
var anilistMedia = await anilistClient.RetrieveAiringShowInformation(title); var anilistMedia = await anilistClient.RetrieveAiringShowInformation(title);
if (anilistMedia != null) if (anilistMedia != null)
{ {
if (anilistMedia.Episodes.HasValue && anilistMedia.Episodes != lastEpisodeNumber) anilistCacheItem = AnilistCacheItem.FromMedia(anilistMedia);
{ anilistCacheItem.Updated = DateTime.Now;
Console.WriteLine( _ = tmdbCache.SetCacheItem($"AnilistCache-{title}", anilistCacheItem);
$"Overriding episode count of {lastEpisodeNumber} using Anilist's showID {anilistMedia.Id} titled {anilistMedia.Title.EnglishTitle} with {anilistMedia.Episodes} episodes.");
lastEpisodeNumber = anilistMedia.Episodes.Value;
}
anilistPosterPath = anilistMedia.BannerImageUrl?.ToString();
} }
else else
Console.WriteLine("0 anilist results found"); 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 {anilistCacheItem.ShowID} titled {anilistCacheItem.EnglishTitle} with {anilistCacheItem.Episodes} episodes.");
lastEpisodeNumber = anilistCacheItem.Episodes.Value;
}
anilistPosterPath = anilistCacheItem.BannerImageUrl;
}
}
catch (Exception ex) catch (Exception ex)
{ {
Console.WriteLine($"An error occurred during Anilist lookup: {ex}"); Console.WriteLine($"An error occurred during Anilist lookup: {ex}");
@@ -276,7 +290,7 @@ namespace AnimeAnnouncer
LastAirDate = lastAirDate, LastAirDate = lastAirDate,
LatestEpisodeNumber = latestEpisodeNumber, LatestEpisodeNumber = latestEpisodeNumber,
AnilistPopulated = anilistPosterPath != null, AnilistPopulated = anilistPosterPath != null,
AnilistPosterPath = anilistPosterPath Updated = DateTime.Now
}; };
_ = tmdbCache.SetCacheItem($"ShowCache-{title}", cachedShow); _ = tmdbCache.SetCacheItem($"ShowCache-{title}", cachedShow);
Console.WriteLine($"{title} Added to cache"); Console.WriteLine($"{title} Added to cache");