From 09f65f9a314eb631b2c45f31fcc42d9fe916dc49 Mon Sep 17 00:00:00 2001 From: chrispr Date: Mon, 30 Sep 2024 20:33:07 -0400 Subject: [PATCH] Handled case where TMDB doesn't return a show; First attempt at ordinal-based episode count;Handled null string Overview --- AnimeAnnouncer/Cache/TMDBCacheItem.cs | 1 + AnimeAnnouncer/Program.cs | 27 ++++++++++++++++++++++++--- 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/AnimeAnnouncer/Cache/TMDBCacheItem.cs b/AnimeAnnouncer/Cache/TMDBCacheItem.cs index 0ef9b4f..e39c129 100644 --- a/AnimeAnnouncer/Cache/TMDBCacheItem.cs +++ b/AnimeAnnouncer/Cache/TMDBCacheItem.cs @@ -14,5 +14,6 @@ namespace AnimeAnnouncer.Cache public string? LatestSeasonOverview { get; internal set; } public double VoteAverage { get; internal set; } public string? Overview { get; internal set; } + public int? LatestOrdinalEpisodeNumber { get; internal set; } } } \ No newline at end of file diff --git a/AnimeAnnouncer/Program.cs b/AnimeAnnouncer/Program.cs index 95433ed..cf2fcd0 100644 --- a/AnimeAnnouncer/Program.cs +++ b/AnimeAnnouncer/Program.cs @@ -1,5 +1,6 @@ using System.ComponentModel; using System.Security.Cryptography; +using System.Security.Cryptography.X509Certificates; using AnimeAnnouncer.Cache; using AnimeAnnouncer.RSS; using Mastonet; @@ -93,6 +94,8 @@ namespace AnimeAnnouncer int latestSeasonNumber = 0, latestEpisodeNumber = 0, supposedShowId = 0; + int? latestOrdinalEpisodeNumber = null; + TMDBCacheItem? cachedShow = null; try @@ -103,6 +106,7 @@ namespace AnimeAnnouncer Console.WriteLine("Cache hit"); latestSeasonNumber = cachedShow.LatestSeasonNumber; latestEpisodeNumber = cachedShow.LastEpisodeNumber; + latestOrdinalEpisodeNumber = cachedShow.LatestOrdinalEpisodeNumber; supposedShowId = cachedShow.ShowID; } } @@ -116,6 +120,14 @@ namespace AnimeAnnouncer var searchResults = await tmdbClient.SearchTvShowAsync(title); + Console.WriteLine($"Searching {title} on TMDB"); + + if(!searchResults.Results.Any()) + { + Console.WriteLine("TMDB did not return any results."); + return; + } + supposedShowId = searchResults.Results.First().Id; var showResult = await tmdbClient.GetTvShowAsync(supposedShowId); @@ -132,6 +144,11 @@ namespace AnimeAnnouncer latestEpisodeNumber = latestSeason.EpisodeCount; + if(showResult.Seasons.Count > 1) + { + latestOrdinalEpisodeNumber = showResult.Seasons.Sum(s => s.EpisodeCount); + } + if(tmdbCache != null && searchResults != null) { try @@ -143,6 +160,7 @@ namespace AnimeAnnouncer BackdropPath = showResult.BackdropPath.Length > 0 ? $"https://image.tmdb.org/t/p/original{showResult.BackdropPath}" : String.Empty, LatestSeasonPosterPath = latestSeason.PosterPath.Length > 0 ? $"https://image.tmdb.org/t/p/original{latestSeason.PosterPath}" : String.Empty, LatestSeasonOverview = latestSeason.Overview, + LatestOrdinalEpisodeNumber = latestOrdinalEpisodeNumber, Overview = showResult.Overview, VoteAverage = showResult.VoteAverage, ShowID = supposedShowId, @@ -169,8 +187,11 @@ namespace AnimeAnnouncer if(latestEpisodeNumber != int.Parse(episode)) { - Console.WriteLine($"Failing release due to TMDB's last episode number of {latestEpisodeNumber} not matching title episode number {episode}"); - return; + if(!latestOrdinalEpisodeNumber.HasValue || (latestOrdinalEpisodeNumber.HasValue && latestOrdinalEpisodeNumber.Value != int.Parse(episode))) + { + Console.WriteLine($"Failing release due to TMDB's last episode number of {latestEpisodeNumber}|{latestOrdinalEpisodeNumber ?? 0} not matching title episode number {episode}"); + return; + } } // Announce if unique @@ -213,7 +234,7 @@ namespace AnimeAnnouncer } //Prepare Status String statusText = $"{cachedShow.Title} ({cachedShow.VoteAverage}/10) DUBBED has finished airing season {cachedShow.LatestSeasonNumber}! Episode {cachedShow.LastEpisodeNumber} is now available for download. {Environment.NewLine + Environment.NewLine}"; - String overview = !String.IsNullOrWhiteSpace(cachedShow.LatestSeasonOverview) ? cachedShow.LatestSeasonOverview : cachedShow.Overview; + String overview = !String.IsNullOrWhiteSpace(cachedShow.LatestSeasonOverview) ? cachedShow.LatestSeasonOverview : cachedShow.Overview ?? String.Empty; if(!String.IsNullOrWhiteSpace(overview)) { statusText += $"Overview: {overview}";