/// <summary> /// Loads a Mod from a Manifest /// </summary> /// <param name="uri">the URI where the Manifest lives</param> /// <returns>a Mod</returns> public static Mod LoadFromUrl(string uri) { Mod ret = new Mod(); XDocument manifest = XDocument.Load(uri); if (manifest.Root.Name != Namespace.GetName("manifest")) { throw new Exception("That's not a McModManager manifest"); } ret.Name = manifest.Root.Element(Namespace.GetName("name")).Value; ret.Id = manifest.Root.Element(Namespace.GetName("id")); if (ret.Id.Version != null) { throw new Exception("Manifest IDs cannot include versions"); } if (manifest.Root.Element(Namespace.GetName("url")) != null) { ret.Url = manifest.Root.Element(Namespace.GetName("url")).Value; } using (var dbConn = Database.GetConnection()) using (var tx = dbConn.BeginTransaction()) { ret.Save(dbConn, tx); foreach (var ver in manifest.Root.Element(Namespace.GetName("versions")).Elements(Namespace.GetName("version"))) { var v = ModVersion.LoadVersion(ret, ver, dbConn, tx); v.Save(dbConn, tx); } tx.Commit(); } return(ret); }
/// <summary> /// Loads a Mod from a Manifest /// </summary> /// <param name="uri">the URI where the Manifest lives</param> /// <returns>a Mod</returns> public static Mod LoadFromUrl(string uri) { Mod ret = new Mod(); XDocument manifest = XDocument.Load(uri); if (manifest.Root.Name != Namespace.GetName("manifest")) { throw new Exception("That's not a McModManager manifest"); } ret.Name = manifest.Root.Element(Namespace.GetName("name")).Value; ret.Id = manifest.Root.Element(Namespace.GetName("id")); if (ret.Id.Version != null) { throw new Exception("Manifest IDs cannot include versions"); } if (manifest.Root.Element(Namespace.GetName("url")) != null) { ret.Url = manifest.Root.Element(Namespace.GetName("url")).Value; } using (var dbConn = Database.GetConnection()) using (var tx = dbConn.BeginTransaction()) { ret.Save(dbConn, tx); foreach (var ver in manifest.Root.Element(Namespace.GetName("versions")).Elements(Namespace.GetName("version"))) { var v = ModVersion.LoadVersion(ret, ver, dbConn, tx); v.Save(dbConn, tx); } tx.Commit(); } return ret; }