diff --git a/AnimeAnnouncer/Cache/TMDBCache.cs b/AnimeAnnouncer/Cache/TMDBCache.cs index 10e26d9..549c1f1 100644 --- a/AnimeAnnouncer/Cache/TMDBCache.cs +++ b/AnimeAnnouncer/Cache/TMDBCache.cs @@ -20,7 +20,7 @@ public class TMDBCache public async Task SetCacheItem(String key, TMDBCacheItem item) { var db = redis.GetDatabase(); - + String jsonItem = JsonSerializer.Serialize(item); await db.StringSetAsync(key, jsonItem, CacheExpiration); } @@ -28,8 +28,8 @@ public class TMDBCache { var db = redis.GetDatabase(); String jsonItem = await db.StringGetAsync(key); - - if(!String.IsNullOrEmpty(jsonItem)) + + if (!String.IsNullOrEmpty(jsonItem)) return JsonSerializer.Deserialize(jsonItem); else return null; @@ -37,7 +37,7 @@ public class TMDBCache public async Task RemoveCacheItem(String key) { - var db =redis.GetDatabase(); + var db = redis.GetDatabase(); _ = await db.KeyDeleteAsync(key); } @@ -52,10 +52,10 @@ public class TMDBCache public async Task> GetAiringList() { var db = redis.GetDatabase(); - + String jsonItem = await db.StringGetAsync("AiringSoon"); - if(!String.IsNullOrEmpty(jsonItem)) + if (!String.IsNullOrEmpty(jsonItem)) return JsonSerializer.Deserialize>(jsonItem); else return null; @@ -70,4 +70,9 @@ public class TMDBCache var db = redis.GetDatabase(); await db.StringSetAsync(key, value); } + public async Task GetStringValue(String key) + { + var db = redis.GetDatabase(); + return await db.StringGetAsync(key); + } } diff --git a/AnimeAnnouncer/Program.cs b/AnimeAnnouncer/Program.cs index cfc0c50..3a7f6e0 100644 --- a/AnimeAnnouncer/Program.cs +++ b/AnimeAnnouncer/Program.cs @@ -5,6 +5,7 @@ using System.Security.Cryptography.X509Certificates; using AnimeAnnouncer.Cache; using AnimeAnnouncer.RSS; using Mastonet; +using Mastonet.Entities; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Logging; using TMDbLib.Client; @@ -60,15 +61,32 @@ namespace AnimeAnnouncer if(airingSoonList == null) airingSoonList = new List(); + if (args.Any(p => p == "--show-airing-list")) + { + PrintAiringList(); + return; + } + nyaaIndexer.NewPost += OnNewPost; nyaaIndexer.RssReadFinished += OnRssReadFinished; - //nyaaIndexer.IterationSleepTime = 60; - nyaaIndexer.Start(true); + nyaaIndexer.IterationSleepTime = 60; + nyaaIndexer.Start(false); Console.WriteLine("Press enter to quit..."); Console.ReadLine(); } + private static void PrintAiringList() + { + var airingThisHalf = airingSoonList.Where(a => a.LastAirDate > DateTime.Now && a.LastAirDate.Value.Subtract(DateTime.Now) < TimeSpan.FromDays(180)).ToList(); + int cnt = 1; + for(int i = 0;i < airingThisHalf.Count;i++) + { + var airing = airingThisHalf[i]; + Console.WriteLine($"{cnt++}. {airing.Title} on {airing.LastAirDate:MM/dd/yyyy}{Environment.NewLine}"); + } + } + static async void OnNewPost(RSS.NyaaItem item) { try @@ -304,7 +322,10 @@ namespace AnimeAnnouncer } // Announce if unique - if(await tmdbCache.KeyExists($"ShowAnnounced-{supposedShowId}")) + var lastAnnouncedSeason = await tmdbCache.GetStringValue($"ShowAnnounced-{supposedShowId}"); + Int32 lastSeason = 0; + if (lastAnnouncedSeason != null && Int32.TryParse(lastAnnouncedSeason, out lastSeason) && + latestSeasonNumber <= lastSeason) { Console.WriteLine($"{title} has been previously announced, so avoiding announcing it again."); return; @@ -409,8 +430,12 @@ namespace AnimeAnnouncer } statusText += $"..{anidbLink}"; - _ = mastodonClient.PublishStatus(statusText, + var status = await mastodonClient.PublishStatus(statusText, Visibility.Public, mediaIds: attachment != null ? new String[] { attachment.Id } : null); + if(String.IsNullOrEmpty(status.Id)) + { + Console.WriteLine("An error has occurred posting the status update"); + } } private static async void UpdateAiringShowList(TMDBCacheItem cachedShow) diff --git a/MassTorrentAdd/Program.cs b/MassTorrentAdd/Program.cs index 7958581..a040beb 100644 --- a/MassTorrentAdd/Program.cs +++ b/MassTorrentAdd/Program.cs @@ -70,7 +70,7 @@ namespace MassTorrentAdd transmissionDirectoryName = System.Text.RegularExpressions.Regex.Replace(transmissionDirectoryName, @"E\d{2,3}.*?(\d{3,4}p)", " $1"); transmissionDirectoryName = System.Text.RegularExpressions.Regex.Replace(transmissionDirectoryName, @"\s\(.*?\)$", ""); transmissionDirectoryName = destinationFolder + (destinationFolder.EndsWith("/") ? String.Empty : "/") + transmissionDirectoryName.Replace(" ", "."); - Console.WriteLine("to " + transmissionDirectoryName); + Console.WriteLine($"{items.Count()} item(s) to {transmissionDirectoryName}"); Console.WriteLine("Continue?"); if(Console.ReadKey().KeyChar != 'y')