diff --git a/AnimeAnnouncer/AnimeAnnouncer.csproj b/AnimeAnnouncer/AnimeAnnouncer.csproj
index cf81941..cb2c3bb 100644
--- a/AnimeAnnouncer/AnimeAnnouncer.csproj
+++ b/AnimeAnnouncer/AnimeAnnouncer.csproj
@@ -12,6 +12,12 @@
+
+
+
+ PreserveNewest
+
+
\ No newline at end of file
diff --git a/AnimeAnnouncer/Cache/TMDBCache.cs b/AnimeAnnouncer/Cache/TMDBCache.cs
new file mode 100644
index 0000000..8559f86
--- /dev/null
+++ b/AnimeAnnouncer/Cache/TMDBCache.cs
@@ -0,0 +1,35 @@
+using System.Text.Json;
+using StackExchange.Redis;
+using TMDbLib.Utilities.Converters;
+
+namespace AnimeAnnouncer.Cache;
+
+public class TMDBCache
+{
+ private readonly ConnectionMultiplexer redis;
+
+ public TimeSpan CacheExpiration { get; set; }
+
+
+ public TMDBCache(String redisConnectionString)
+ {
+ CacheExpiration = TimeSpan.FromDays(3);
+ redis = ConnectionMultiplexer.Connect(redisConnectionString);
+ }
+ public async Task SetCacheItem(String key, TMDBCacheItem item)
+ {
+ var db = redis.GetDatabase();
+ String jsonItem = JsonSerializer.Serialize(item);
+ db.StringSetAsync(key, jsonItem, CacheExpiration);
+ }
+ public async Task GetCacheItem(String key)
+ {
+ var db = redis.GetDatabase();
+ String jsonItem = await db.StringGetAsync(key);
+
+ if(!String.IsNullOrEmpty(jsonItem))
+ return JsonSerializer.Deserialize(jsonItem);
+ else
+ return null;
+ }
+}
diff --git a/AnimeAnnouncer/Cache/TMDBCacheItem.cs b/AnimeAnnouncer/Cache/TMDBCacheItem.cs
new file mode 100644
index 0000000..8892d58
--- /dev/null
+++ b/AnimeAnnouncer/Cache/TMDBCacheItem.cs
@@ -0,0 +1,12 @@
+
+namespace AnimeAnnouncer.Cache
+{
+ public class TMDBCacheItem
+ {
+ public required String Title { get; set; }
+ public int ShowID { get; set; }
+
+ public int LatestSeasonNumber { get; set; }
+ public int LastEpisodeNumber { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/AnimeAnnouncer/Program.cs b/AnimeAnnouncer/Program.cs
index 66d2dc3..bc5bc61 100644
--- a/AnimeAnnouncer/Program.cs
+++ b/AnimeAnnouncer/Program.cs
@@ -1,4 +1,6 @@
-using AnimeAnnouncer.RSS;
+using AnimeAnnouncer.Cache;
+using AnimeAnnouncer.RSS;
+using Microsoft.Extensions.Configuration;
using TMDbLib.Client;
namespace AnimeAnnouncer
@@ -7,13 +9,33 @@ namespace AnimeAnnouncer
{
private static NyaaIndexer nyaaIndexer= new NyaaIndexer();
- private const String TMDBApiKey = "";
-
- private static TMDbClient tmdbClient = new TMDbClient(TMDBApiKey);
+ private static TMDbClient tmdbClient;
+ private static TMDBCache tmdbCache;
static void Main(string[] args)
{
Console.WriteLine("Starting...");
+ var configurationBuilder = new ConfigurationBuilder();
+
+ configurationBuilder.SetBasePath(System.IO.Directory.GetCurrentDirectory()); // errors here
+ configurationBuilder.AddJsonFile(path: "appSettings.json", optional: false, reloadOnChange: true); // errors here
+
+ var config = configurationBuilder.Build();
+
+ String TMDBApiKey = config["TMDBApiKey"];
+ if(String.IsNullOrEmpty(TMDBApiKey))
+ {
+ Console.WriteLine("ERROR: API key not found in config.");
+ return;
+ }
+ tmdbClient = new TMDbClient(TMDBApiKey);
+
+ String redisCacheConnectionString = config["redisConnectionString"];
+ if(!String.IsNullOrEmpty(redisCacheConnectionString))
+ {
+ tmdbCache = new TMDBCache(redisCacheConnectionString);
+ }
+
nyaaIndexer.NewPost += OnNewPost;
nyaaIndexer.RssReadFinished += OnRssReadFinished;
nyaaIndexer.Start(true);
@@ -61,7 +83,13 @@ namespace AnimeAnnouncer
var showResult = await tmdbClient.GetTvShowAsync(supposedShowId);
- var latestSeason = showResult.Seasons.OrderByDescending(s => s.SeasonNumber).First();
+ var latestSeason = showResult.Seasons.Where(s => s.AirDate.HasValue && s.AirDate.Value < DateTime.Now).OrderByDescending(s => s.SeasonNumber).FirstOrDefault();
+
+ if(latestSeason == null)
+ {
+ Console.WriteLine("Unable to find a viable season from TMDB.");
+ return;
+ }
if(latestSeason.SeasonNumber != int.Parse(season))
{
diff --git a/AnimeAnnouncer/appSettings.json b/AnimeAnnouncer/appSettings.json
new file mode 100644
index 0000000..fe00107
--- /dev/null
+++ b/AnimeAnnouncer/appSettings.json
@@ -0,0 +1,4 @@
+{
+ "TMDBApiKey": "",
+ "redisConnectionString": "localhost"
+}
\ No newline at end of file