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();