Add modlist metadata to the compiler output and the list validation

This commit is contained in:
Timothy Baldridge 2019-11-05 15:11:39 -07:00
parent f2efdeef9d
commit eda43c0df6
3 changed files with 44 additions and 6 deletions

View File

@ -15,6 +15,7 @@ using VFS;
using Wabbajack.Common;
using Wabbajack.Lib.CompilationSteps;
using Wabbajack.Lib.Downloaders;
using Wabbajack.Lib.ModListRegistry;
using Wabbajack.Lib.NexusApi;
using Wabbajack.Lib.Validation;
using Directory = Alphaleonis.Win32.Filesystem.Directory;
@ -346,6 +347,16 @@ namespace Wabbajack.Lib
});
}
}
Utils.Log("Exporting Modlist metadata");
var metadata = new ModlistMetadata.DownloadMetadata
{
Size = File.GetSize(ModListOutputFile),
Hash = ModListOutputFile.FileHash()
};
metadata.ToJSON(ModListOutputFile + ".meta.json");
Utils.Log("Removing modlist staging folder");
Directory.Delete(ModListOutputFolder, true);

View File

@ -51,11 +51,21 @@ namespace Wabbajack.Lib.ModListRegistry
[JsonProperty("download")]
public string Download { get; set; }
[JsonProperty("download_metadata")]
public DownloadMetadata DownloadMetadata { get; set; }
[JsonProperty("machineURL")]
public string MachineURL { get; set; }
}
public class DownloadMetadata
{
public string Hash { get; set; }
public long Size { get; set; }
}
public static List<ModlistMetadata> LoadFromGithub()
{
var client = new HttpClient();
@ -63,5 +73,16 @@ namespace Wabbajack.Lib.ModListRegistry
var result = client.GetStringSync(Consts.ModlistMetadataURL);
return result.FromJSONString<List<ModlistMetadata>>();
}
public bool NeedsDownload(string modlistPath)
{
if (!File.Exists(modlistPath)) return true;
if (Links.DownloadMetadata?.Hash == null)
{
return false;
}
return Links.DownloadMetadata.Hash != modlistPath.FileHash();
}
}
}

View File

@ -36,13 +36,19 @@ namespace Wabbajack.Test.ListValidation
public void ValidateModLists(string name, ModlistMetadata list)
{
Log($"Testing {list.Links.MachineURL} - {list.Title}");
var state = DownloadDispatcher.ResolveArchive(list.Links.Download);
Log($"Downloading {list.Links.MachineURL} - {list.Title}");
var modlist_path = Path.Combine(Consts.ModListDownloadFolder, list.Links.MachineURL + ".wabbajack");
state.Download(modlist_path);
if (list.NeedsDownload(modlist_path))
{
var state = DownloadDispatcher.ResolveArchive(list.Links.Download);
Log($"Downloading {list.Links.MachineURL} - {list.Title}");
state.Download(modlist_path);
}
else
{
Log($"No changes detected from downloaded modlist");
}
Log($"Loading {modlist_path}");