public static VersionMatch Match(string version) { if (!VersionControl.IsWellFormattedVersionString(version)) { return(VersionMatch.InvalidVersion); } return(Match(Manifest.ParseVersion(version, null))); }
public static Manifest For(ModMetaData mod) { Manifest manifest; if (_manifestCache.TryGetValue(mod, out manifest)) { return(manifest); } manifest = new Manifest(); manifest.mod = mod; // get from file. var manifestPath = Path.Combine(mod.AboutDir(), ManifestFileName); var modsyncPath = Path.Combine(mod.AboutDir(), ModSyncFileName); // manifest is first choice if (File.Exists(manifestPath)) { try { manifest = DirectXmlLoader.ItemFromXmlFile <Manifest>(manifestPath); manifest.mod = mod; manifest.dependencies.ForEach(d => d.Owner = manifest); manifest.loadBefore.ForEach(d => d.Owner = manifest); manifest.loadAfter.ForEach(d => d.Owner = manifest); if (!manifest.manifestUri.NullOrEmpty()) { try { manifest.ManifestUri = new Uri(manifest.manifestUri); } catch (Exception e) { Log.Warning($"Error parsing manifestUri: {e.Message}\n\n{e.StackTrace}"); } } if (!manifest.targetVersions.NullOrEmpty()) { manifest.TargetVersions = new List <Version>(); foreach (var targetVersion in manifest.targetVersions) { manifest.TargetVersions.Add(manifest.ParseVersion(targetVersion)); } } } catch (Exception e) { manifest = new Manifest(mod); Log.Error($"Error loading manifest for '{mod.Name}':\n{e.Message}\n\n{e.StackTrace}"); } } // modsync manifest can provide some info else if (File.Exists(modsyncPath)) { try { ModSync modsync = DirectXmlLoader.ItemFromXmlFile <ModSync>(modsyncPath); manifest = modsync.Manifest(mod); } catch (Exception e) { manifest = new Manifest(mod); Log.Error($"Error loading ModSync into manifest for '{mod.Name}': {e.Message}\n\n{e.StackTrace}"); } } // resolve version - if set in manifest or modsync that takes priority, // otherwise try to read version from assemblies. manifest.SetVersion(); _manifestCache.Add(mod, manifest); return(manifest); }