/// <summary>Get metadata about a mod in the repository.</summary> /// <param name="id">The mod ID in this repository.</param> public override async Task <ModInfoModel> GetModInfoAsync(string id) { // validate ID format if (!uint.TryParse(id, out uint nexusID)) { return(new ModInfoModel().SetError(RemoteModStatus.DoesNotExist, $"The value '{id}' isn't a valid Nexus mod ID, must be an integer ID.")); } // fetch info try { NexusMod mod = await this.Client.GetModAsync(nexusID); if (mod == null) { return(new ModInfoModel().SetError(RemoteModStatus.DoesNotExist, "Found no Nexus mod with this ID.")); } if (mod.Error != null) { RemoteModStatus remoteStatus = mod.Status == NexusModStatus.Hidden || mod.Status == NexusModStatus.NotPublished ? RemoteModStatus.DoesNotExist : RemoteModStatus.TemporaryError; return(new ModInfoModel().SetError(remoteStatus, mod.Error)); } return(new ModInfoModel(name: mod.Name, version: this.NormalizeVersion(mod.Version), previewVersion: mod.LatestFileVersion?.ToString(), url: mod.Url)); } catch (Exception ex) { return(new ModInfoModel().SetError(RemoteModStatus.TemporaryError, ex.ToString())); } }
/// <summary>Get metadata about a mod in the repository.</summary> /// <param name="id">The mod ID in this repository.</param> public override async Task <ModInfoModel> GetModInfoAsync(string id) { // validate ID format if (!uint.TryParse(id, out uint nexusID)) { return(new ModInfoModel($"The value '{id}' isn't a valid Nexus mod ID, must be an integer ID.")); } // fetch info try { NexusMod mod = await this.Client.GetModAsync(nexusID); if (mod == null) { return(new ModInfoModel("Found no mod with this ID.")); } if (mod.Error != null) { return(new ModInfoModel(mod.Error)); } return(new ModInfoModel(mod.Name, this.NormaliseVersion(mod.Version), mod.Url)); } catch (Exception ex) { return(new ModInfoModel(ex.ToString())); } }
public string GetNexusDownloadLink(NexusMod archive, bool cache = false) { if (cache && TryGetCachedLink(archive, out var result)) { return(result); } ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; var url = $"https://api.nexusmods.com/v1/games/{ConvertGameName(archive.GameName)}/mods/{archive.ModID}/files/{archive.FileID}/download_link.json"; return(Get <List <DownloadLink> >(url).First().URI); }
public EndorsementResponse EndorseMod(NexusMod mod) { Utils.Status($"Endorsing ${mod.GameName} - ${mod.ModID}"); var url = $"https://api.nexusmods.com/v1/games/{ConvertGameName(mod.GameName)}/mods/{mod.ModID}/endorse.json"; var content = new FormUrlEncodedContent(new Dictionary <string, string> { { "version", mod.Version } }); using (var stream = _httpClient.PostStreamSync(url, content)) { return(stream.FromJSON <EndorsementResponse>()); } }
private bool TryGetCachedLink(NexusMod archive, out string result) { if (!Directory.Exists(Consts.NexusCacheDirectory)) { Directory.CreateDirectory(Consts.NexusCacheDirectory); } var path = Path.Combine(Consts.NexusCacheDirectory, $"link-{archive.GameName}-{archive.ModID}-{archive.FileID}.txt"); if (!File.Exists(path) || (DateTime.Now - new FileInfo(path).LastWriteTime).TotalHours > 24) { File.Delete(path); result = GetNexusDownloadLink(archive); File.WriteAllText(path, result); return(true); } result = File.ReadAllText(path); return(true); }
public ModInfo GetModInfo(NexusMod archive) { if (!Directory.Exists(Consts.NexusCacheDirectory)) { Directory.CreateDirectory(Consts.NexusCacheDirectory); } ModInfo result = null; TOP: var path = Path.Combine(Consts.NexusCacheDirectory, $"mod-info-{archive.GameName}-{archive.ModID}.json"); try { if (File.Exists(path)) { result = path.FromJSON <ModInfo>(); if (result._internal_version != CACHED_VERSION_NUMBER) { File.Delete(path); goto TOP; } return(result); } } catch (Exception) { File.Delete(path); } var url = $"https://api.nexusmods.com/v1/games/{ConvertGameName(archive.GameName)}/mods/{archive.ModID}.json"; result = Get <ModInfo>(url); result.game_name = archive.GameName; result.mod_id = archive.ModID; result._internal_version = CACHED_VERSION_NUMBER; result.ToJSON(path); return(result); }
/// <summary> /// Initializes the NXMWorker pipe listener. /// </summary> private void InitializeDownloadHandle() { if (NoMissingMods) { return; } var nexusProtocol = new NexusProtocol(); // Start capturing piped messages from the NXMWorker, handle any progress reports. nexusProtocol.StartRecievingProtocolValues(new Progress <CaptureProtocolValuesProgress>(async x => { var matchingMods = MissingMods.Where(y => y.NexusModId == x.ModId); if (!matchingMods.Any()) { return; } var matchingMod = matchingMods.First(); if (matchingMod != null) { WindowNotificationControls.MoveToFront(); // Start downloading the mod file. await NexusMod.DownloadModFile(matchingMod, x.FileId, new Progress <DownloadModFileProgress>(downloadProgress => { MissingMods[MissingMods.IndexOf(matchingMod)].CurrentDownloadPercentage = downloadProgress.CurrentDownloadPercentage; if (downloadProgress.IsDownloadComplete) { Modpack.UpdateModArchivePaths(matchingMod, downloadProgress.DownloadLocation); MissingMods.Remove(matchingMod); NoMissingMods = MissingMods.Count == 0; } })); } })); }
/// <summary> /// Takes all the permissions for a given Nexus mods and merges them down to a single permissions record /// the more specific record having precedence in each field. /// </summary> /// <param name="mod"></param> /// <returns></returns> public Permissions FilePermissions(NexusMod mod) { var author_permissions = AuthorPermissions.GetOrDefault(mod.Author)?.Permissions; var game_permissions = AuthorPermissions.GetOrDefault(mod.Author)?.Games.GetOrDefault(mod.GameName)?.Permissions; var mod_permissions = AuthorPermissions.GetOrDefault(mod.Author)?.Games.GetOrDefault(mod.GameName)?.Mods.GetOrDefault(mod.ModID) ?.Permissions; var file_permissions = AuthorPermissions.GetOrDefault(mod.Author)?.Games.GetOrDefault(mod.GameName)?.Mods .GetOrDefault(mod.ModID)?.Files.GetOrDefault(mod.FileID)?.Permissions; return(new Permissions { CanExtractBSAs = file_permissions?.CanExtractBSAs ?? mod_permissions?.CanExtractBSAs ?? game_permissions?.CanExtractBSAs ?? author_permissions?.CanExtractBSAs ?? true, CanModifyAssets = file_permissions?.CanModifyAssets ?? mod_permissions?.CanModifyAssets ?? game_permissions?.CanModifyAssets ?? author_permissions?.CanModifyAssets ?? true, CanModifyESPs = file_permissions?.CanModifyESPs ?? mod_permissions?.CanModifyESPs ?? game_permissions?.CanModifyESPs ?? author_permissions?.CanModifyESPs ?? true, CanUseInOtherGames = file_permissions?.CanUseInOtherGames ?? mod_permissions?.CanUseInOtherGames ?? game_permissions?.CanUseInOtherGames ?? author_permissions?.CanUseInOtherGames ?? true, }); }
public NexusFileInfo GetFileInfo(NexusMod mod) { var url = $"https://api.nexusmods.com/v1/games/{ConvertGameName(mod.GameName)}/mods/{mod.ModID}/files/{mod.FileID}.json"; return(Get <NexusFileInfo>(url)); }