diff --git a/Wabbajack.CacheServer/ListValidationService.cs b/Wabbajack.CacheServer/ListValidationService.cs index 8fb58a7e..fa7ae972 100644 --- a/Wabbajack.CacheServer/ListValidationService.cs +++ b/Wabbajack.CacheServer/ListValidationService.cs @@ -13,6 +13,7 @@ using Wabbajack.Lib.Downloaders; using Wabbajack.Lib.ModListRegistry; using MongoDB.Driver.Linq; using Nettle; +using Nettle.Functions; namespace Wabbajack.CacheServer { @@ -24,6 +25,7 @@ namespace Wabbajack.CacheServer Get("/force_recheck", HandleForceRecheck); Get("/status/{Name}.json", HandleGetListJson); Get("/status/{Name}.html", HandleGetListHtml); + Get("/status/{Name}/broken.rss", HandleGetRSSFeed); } @@ -80,7 +82,7 @@ namespace Wabbajack.CacheServer private async Task HandleGetListHtml(dynamic arg) { - + var lst = (await ModListStatus.ByName((string)arg.Name)).DetailedStatus; var response = (Response)HandleGetListTemplate(new { @@ -92,6 +94,39 @@ namespace Wabbajack.CacheServer return response; } + private static readonly Func HandleGetRSSFeedTemplate = NettleEngine.GetCompiler().Compile(@" + + + + {{lst.Name}} - Broken Mods + http://build.wabbajack.org/status/{{lst.Name}}.html + These are mods that are broken and need updating + {{ each $.failed }} + + {{$.Archive.Name}} + {{$.Archive.Name}} + + {{/each}} + + + "); + + public async Task HandleGetRSSFeed(dynamic arg) + { + var metric = Metrics.Log("failed_rss", arg.Name); + var lst = (await ModListStatus.ByName((string)arg.Name)).DetailedStatus; + var response = (Response)HandleGetRSSFeedTemplate(new + { + lst, + failed = lst.Archives.Where(a => a.IsFailing).ToList(), + passed = lst.Archives.Where(a => !a.IsFailing).ToList() + }); + response.ContentType = "application/rss+xml"; + await metric; + return response; + + } + public static void Start() { Task.Run(async () =>