public override string GetReportEntry(Archive a) { var profile = UploaderProfile.Replace("/games/", "/" + NexusApiUtils.ConvertGameName(GameName).ToLower() + "/"); return(string.Join("\n", $"* [{a.Name}](http://nexusmods.com/{NexusApiUtils.ConvertGameName(GameName)}/mods/{ModID})", $" * Author : [{UploadedBy}]({profile})", $" * Version : {Version}")); }
public void Build(ModList lst) { Text($"### {lst.Name} - Installation Summary"); Text( $"#### Download Summary ({lst.Archives.Count} archives - {lst.Archives.Sum(a => a.Size).ToFileSizeString()})"); foreach (var archive in SortArchives(lst.Archives)) { var hash = archive.Hash.FromBase64().ToHEX(); switch (archive) { case NexusMod m: var profile = m.UploaderProfile.Replace("/games/", "/" + NexusApiUtils.ConvertGameName(m.GameName).ToLower() + "/"); NoWrapText( $"* [{m.Name}](http://nexusmods.com/{NexusApiUtils.ConvertGameName(m.GameName)}/mods/{m.ModID})"); NoWrapText($" * Author : [{m.UploadedBy}]({profile})"); NoWrapText($" * Version : {m.Version}"); break; case MODDBArchive m: NoWrapText($"* MODDB - [{m.Name}]({m.URL})"); break; case MEGAArchive m: NoWrapText($"* MEGA - [{m.Name}]({m.URL})"); break; case GoogleDriveMod m: NoWrapText( $"* GoogleDrive - [{m.Name}](https://drive.google.com/uc?id={m.Id}&export=download)"); break; case DirectURLArchive m: NoWrapText($"* URL - [{m.Name} - {m.URL}]({m.URL})"); break; } NoWrapText($" * Size : {archive.Size.ToFileSizeString()}"); NoWrapText($" * SHA256 : [{hash}](https://www.virustotal.com/gui/file/{hash})"); } Text("\n\n"); var patched = lst.Directives.OfType <PatchedFromArchive>().OrderBy(p => p.To).ToList(); Text($"#### Summary of ({patched.Count}) patches"); foreach (var directive in patched) { NoWrapText( $"* Applying {directive.Patch.Length} byte patch `{directive.FullPath}` to create `{directive.To}`"); } var files = lst.Directives.OrderBy(d => d.To).ToList(); Text($"\n\n### Install Plan of ({files.Count}) files"); Text("(ignoring files that are directly copied from archives or listed in the patches section above)"); foreach (var directive in files.OrderBy(f => f.GetType().Name).ThenByDescending(f => f.To)) { switch (directive) { case FromArchive f: //NoWrapText($"* `{f.To}` from `{f.FullPath}`"); break; case CleanedESM i: NoWrapText($"* `{i.To}` by applying a patch to a game ESM ({i.SourceESMHash})"); break; case RemappedInlineFile i: NoWrapText($"* `{i.To}` by remapping the contents of an inline file"); break; case InlineFile i: NoWrapText($"* `{i.To}` from `{i.SourceData.Length.ToFileSizeString()}` file included in modlist"); break; case CreateBSA i: NoWrapText( $"* `{i.To}` by creating a BSA of files found in `{Consts.BSACreationDir}\\{i.TempID}`"); break; } } var inlined = lst.Directives.OfType <InlineFile>() .Select(f => (f.To, "inlined", f.SourceData.Length)) .Concat(lst.Directives .OfType <PatchedFromArchive>() .Select(f => (f.To, "patched", f.Patch.Length))) .ToHashSet() .OrderByDescending(f => f.Length); NoWrapText("\n\n### Summary of inlined files in this installer"); foreach (var inline in inlined) { NoWrapText($"* {inline.Length.ToFileSizeString()} for {inline.Item2} file {inline.To}"); } }
public override string GetManifestURL(Archive a) { return($"http://nexusmods.com/{NexusApiUtils.ConvertGameName(GameName)}/mods/{ModID}"); }