public Task <ModVersion> GetModVersion(ModMetadata metadata, string version) { if (metadata == null) { throw new Exception("Metadata is not defined; cannot get mod versions with it."); } if (!(metadata is CurseforgeModMetadata)) { throw new Exception("Metadata needs to be a curseforge metadata object."); } CurseforgeModMetadata cfMeta = metadata as CurseforgeModMetadata; bool hasVersion = cfMeta.Versions.ContainsKey(cfMeta.MinecraftVersion); if (!hasVersion) { throw new Exception("Mod does not have versions for the requested Minecraft version."); } IEnumerable <ModVersion> versions = cfMeta.Versions[cfMeta.MinecraftVersion]; if (version == null) { return(Task.FromResult(versions.First())); } ModVersion mv = versions.First(v => v.GetModVersion() == version); return(Task.FromResult(mv)); }
public Task <IEnumerable <ModVersion> > GetRecentVersions(ModMetadata meta, int count = 5, ModReleaseType releaseType = ModReleaseType.Any) { if (!(meta is CurseforgeModMetadata)) { throw new Exception("Metadata is not of Curseforge's type. Cannot fetch mod versions with this."); } CurseforgeModMetadata metaCF = (CurseforgeModMetadata)meta; if (String.IsNullOrEmpty(metaCF.MinecraftVersion)) { throw new Exception("Minecraft version was not set on metadata, cannot properly fetch versions."); } if (!metaCF.Versions.ContainsKey(metaCF.MinecraftVersion)) { return(null); } IEnumerable <ModVersion> versions = metaCF.Versions[metaCF.MinecraftVersion]; if (releaseType != ModReleaseType.Any) { versions = versions.Where(v => v.GetReleaseType() == releaseType); } IEnumerable <ModVersion> limitedList = versions.Take(count); foreach (ModVersion mv in limitedList) { mv.MetadataId = meta.Id; } return(Task.FromResult(limitedList)); }
public async Task <ModMetadata> GetModMetadata(string minecraftVersion, string modIdentifier) { Uri api = new Uri(String.Format("{0}/{1}", CurseforgeDomainHandler.ApiURL, modIdentifier)); // if (!String.IsNullOrEmpty(modVersion)) // api = new Uri(String.Format("{0}/{1}?version={2}", CurseforgeDomainHandler.ApiURL, modIdentifier, modVersion)); try { HttpWebRequest req = (HttpWebRequest)WebRequest.Create(api); req.UserAgent = CurseforgeDomainHandler.UserAgent; WebResponse resp = await req.GetResponseAsync(); Stream response = resp.GetResponseStream(); StreamReader reader = new StreamReader(response); String modData = await reader.ReadToEndAsync(); CurseforgeModMetadata modInfo = JsonConvert.DeserializeObject <CurseforgeModMetadata>(modData); modInfo.ModIdentifier = modIdentifier; modInfo.MinecraftVersion = minecraftVersion; resp.Close(); response.Close(); reader.Close(); return(modInfo); } catch (System.Net.WebException we) { HttpStatusCode status = (we.Response as HttpWebResponse).StatusCode; if (status == HttpStatusCode.NotFound) { Console.Error.WriteLine("Could not find that mod. Check your input and try again."); return(null); } } catch (Exception e) { Console.Error.WriteLine(e.Message); } return(null); }