Exemplo n.º 1
0
        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));
        }
Exemplo n.º 2
0
        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));
        }
Exemplo n.º 3
0
        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);
        }