/// <summary>Get metadata about a mod from the Nexus API.</summary> /// <param name="id">The Nexus mod ID.</param> /// <returns>Returns the mod info if found, else <c>null</c>.</returns> private async Task <NexusMod> GetModFromApiAsync(uint id) { // fetch mod Mod mod = await this.ApiClient.Mods.GetMod("stardewvalley", (int)id); ModFileList files = await this.ApiClient.ModFiles.GetModFiles("stardewvalley", (int)id, FileCategory.Main, FileCategory.Optional); // yield info return(new NexusMod { Name = mod.Name, Version = SemanticVersion.TryParse(mod.Version, out ISemanticVersion version) ? version?.ToString() : mod.Version, Url = this.GetModUrl(id), Downloads = files.Files .Select(file => (IModDownload) new GenericModDownload(file.Name, file.Description, file.FileVersion)) .ToArray() });
/// <summary>Get metadata about a mod from the Nexus API.</summary> /// <param name="id">The Nexus mod ID.</param> /// <returns>Returns the mod info if found, else <c>null</c>.</returns> private async Task <NexusMod> GetModFromApiAsync(uint id) { // fetch mod Mod mod = await this.ApiClient.Mods.GetMod("stardewvalley", (int)id); ModFileList files = await this.ApiClient.ModFiles.GetModFiles("stardewvalley", (int)id, FileCategory.Main, FileCategory.Optional); // get versions if (!SemanticVersion.TryParse(mod.Version, out ISemanticVersion mainVersion)) { mainVersion = null; } ISemanticVersion latestFileVersion = null; foreach (string rawVersion in files.Files.Select(p => p.FileVersion)) { if (!SemanticVersion.TryParse(rawVersion, out ISemanticVersion cur)) { continue; } if (mainVersion != null && !cur.IsNewerThan(mainVersion)) { continue; } if (latestFileVersion != null && !cur.IsNewerThan(latestFileVersion)) { continue; } latestFileVersion = cur; } // yield info return(new NexusMod { Name = mod.Name, Version = SemanticVersion.TryParse(mod.Version, out ISemanticVersion version) ? version?.ToString() : mod.Version, LatestFileVersion = latestFileVersion, Url = this.GetModUrl(id) });