From 7a0ef2a380a44fb71a8c7b91a0e113f2781cd027 Mon Sep 17 00:00:00 2001 From: Timothy Baldridge <tbaldridge@gmail.com> Date: Sat, 19 Oct 2019 04:55:05 -0600 Subject: [PATCH 1/2] rework modlist metadata code to use static site json --- Wabbajack.Common/Consts.cs | 2 +- Wabbajack.Common/GameMetaData.cs | 4 + .../ModListRegistry/ModListMetadata.cs | 77 ++++++++----------- Wabbajack.Test/ModlistMetadataTests.cs | 10 +-- 4 files changed, 44 insertions(+), 49 deletions(-) diff --git a/Wabbajack.Common/Consts.cs b/Wabbajack.Common/Consts.cs index 0ecf9975..fbaf45b9 100644 --- a/Wabbajack.Common/Consts.cs +++ b/Wabbajack.Common/Consts.cs @@ -50,7 +50,7 @@ namespace Wabbajack.Common public static string ModPermissionsURL = "https://raw.githubusercontent.com/wabbajack-tools/opt-out-lists/master/NexusModPermissions.yml"; public static string ServerWhitelistURL = "https://raw.githubusercontent.com/wabbajack-tools/opt-out-lists/master/ServerWhitelist.yml"; - public static string ModlistMetadataURL = "https://raw.githubusercontent.com/wabbajack-tools/mod-lists/master/Modlists.yaml"; + public static string ModlistMetadataURL = "https://raw.githubusercontent.com/wabbajack-tools/wabbajack-tools.github.io/code/src/assets/states/modlistState.json"; public static string UserAgent { diff --git a/Wabbajack.Common/GameMetaData.cs b/Wabbajack.Common/GameMetaData.cs index 0ab94bd7..01594316 100644 --- a/Wabbajack.Common/GameMetaData.cs +++ b/Wabbajack.Common/GameMetaData.cs @@ -11,6 +11,7 @@ using Microsoft.Win32; namespace Wabbajack.Common { public enum Game { + Morrowind, Oblivion, Fallout3, FalloutNewVegas, @@ -55,6 +56,9 @@ namespace Wabbajack.Common public static Dictionary<Game, GameMetaData> Games = new Dictionary<Game, GameMetaData> { + { + Game.Morrowind, new GameMetaData() + }, { Game.Oblivion, new GameMetaData { diff --git a/Wabbajack.Lib/ModListRegistry/ModListMetadata.cs b/Wabbajack.Lib/ModListRegistry/ModListMetadata.cs index d59b6446..5668abd1 100644 --- a/Wabbajack.Lib/ModListRegistry/ModListMetadata.cs +++ b/Wabbajack.Lib/ModListRegistry/ModListMetadata.cs @@ -6,6 +6,7 @@ using System.Net.Http; using System.Text; using System.Threading.Tasks; using System.Windows.Media.Imaging; +using Newtonsoft.Json; using Wabbajack.Common; using Wabbajack.Lib.Downloaders; using Wabbajack.Lib.Validation; @@ -18,59 +19,49 @@ namespace Wabbajack.Lib.ModListRegistry { public class ModlistMetadata { - /// <summary> - /// Name of the modlist - /// </summary> - public string Name { get; set; } + [JsonProperty("title")] + public string Title { get; set; } - /// <summary> - /// Name of the author of the modlist - /// </summary> - public string Author { get; set; } - - /// <summary> - /// Game this modlist is for - /// </summary> - public Game Game { get; set; } - - /// <summary> - /// Short description of the modlist - /// </summary> + [JsonProperty("description")] public string Description { get; set; } - /// <summary> - /// URL of the logo for the modlist - /// </summary> - public string LogoUrl { get; set; } + [JsonProperty("author")] + public string Author { get; set; } - [YamlIgnore] - public BitmapSource Logo { get; set; } + [JsonProperty("game")] + public Game Game { get; set; } + + [JsonProperty("verified")] + public bool Verified { get; set; } + + [JsonProperty("links")] + public LinksObject Links { get; set; } = new LinksObject(); + + public class LinksObject + { + [JsonProperty("image")] + public string ImageUri { get; set; } + + [JsonIgnore] + public BitmapImage Image { get; set; } + + [JsonProperty("readme")] + public string Readme { get; set; } + + [JsonProperty("download")] + public string Download { get; set; } + + [JsonProperty("machineURL")] + public string MachineURL { get; set; } + } - /// <summary> - /// Download URL - /// </summary> - public string DownloadUrl { get; set; } public static List<ModlistMetadata> LoadFromGithub() { - var d = new DeserializerBuilder() - .WithNamingConvention(PascalCaseNamingConvention.Instance) - .Build(); var client = new HttpClient(); Utils.Log("Loading Modlists from Github"); - using (var result = new StringReader(client.GetStringSync(Consts.ModlistMetadataURL))) - { - return d.Deserialize<List<ModlistMetadata>>(result); - } - } - - public ModlistMetadata LoadLogo() - { - // Todo: look at making this stream based instead of requiring a file - var temp_file = Path.GetTempFileName(); - DownloadDispatcher.ResolveArchive(LogoUrl).Download(new Archive {Name = LogoUrl}, temp_file); - Logo = new BitmapImage(new Uri(temp_file)); - return this; + var result = client.GetStringSync(Consts.ModlistMetadataURL); + return result.FromJSONString<List<ModlistMetadata>>(); } } } diff --git a/Wabbajack.Test/ModlistMetadataTests.cs b/Wabbajack.Test/ModlistMetadataTests.cs index 0b09aa7c..268346e7 100644 --- a/Wabbajack.Test/ModlistMetadataTests.cs +++ b/Wabbajack.Test/ModlistMetadataTests.cs @@ -24,14 +24,14 @@ namespace Wabbajack.Test { var modlists = ModlistMetadata.LoadFromGithub(); - foreach (var modlist in modlists) + foreach (var modlist in modlists.Select(m => m.Links)) { - var logo_state = DownloadDispatcher.ResolveArchive(modlist.LogoUrl); + var logo_state = DownloadDispatcher.ResolveArchive(modlist.ImageUri); Assert.IsNotNull(logo_state); - Assert.IsTrue(logo_state.Verify(), $"{modlist.LogoUrl} is not valid"); + Assert.IsTrue(logo_state.Verify(), $"{modlist.ImageUri} is not valid"); - modlist.LoadLogo(); - Assert.IsNotNull(modlist.Logo); + //modlist.LoadLogo(); + //Assert.IsNotNull(modlist.Logo); } } } From 60925a1f9f8092af76ecd7087a4fa21e319585a6 Mon Sep 17 00:00:00 2001 From: Timothy Baldridge <tbaldridge@gmail.com> Date: Sat, 19 Oct 2019 05:22:23 -0600 Subject: [PATCH 2/2] verified->official --- Wabbajack.Lib/ModListRegistry/ModListMetadata.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Wabbajack.Lib/ModListRegistry/ModListMetadata.cs b/Wabbajack.Lib/ModListRegistry/ModListMetadata.cs index 5668abd1..8e1a9d68 100644 --- a/Wabbajack.Lib/ModListRegistry/ModListMetadata.cs +++ b/Wabbajack.Lib/ModListRegistry/ModListMetadata.cs @@ -31,8 +31,8 @@ namespace Wabbajack.Lib.ModListRegistry [JsonProperty("game")] public Game Game { get; set; } - [JsonProperty("verified")] - public bool Verified { get; set; } + [JsonProperty("official")] + public bool Official { get; set; } [JsonProperty("links")] public LinksObject Links { get; set; } = new LinksObject();