using IPA.Loader.Features; using IPA.Utilities; using Mono.Cecil; using System.Collections.Generic; using System.IO; using System.Reflection; using Version = SemVer.Version; namespace IPA.Loader { /// /// A class which describes a loaded plugin. /// public class PluginMetadata { /// /// The assembly the plugin was loaded from. /// /// the loaded Assembly that contains the plugin main type public Assembly Assembly { get; internal set; } /// /// The TypeDefinition for the main type of the plugin. /// /// the Cecil definition for the plugin main type public TypeDefinition PluginType { get; internal set; } /// /// The human readable name of the plugin. /// /// the name of the plugin public string Name { get; internal set; } /// /// The BeatMods ID of the plugin, or null if it doesn't have one. /// /// the updater ID of the plugin public string Id { get; internal set; } /// /// The version of the plugin. /// /// the version of the plugin public Version Version { get; internal set; } /// /// The file the plugin was loaded from. /// /// the file the plugin was loaded from public FileInfo File { get; internal set; } // ReSharper disable once UnusedAutoPropertyAccessor.Global /// /// The features this plugin requests. /// /// the list of features requested by the plugin public IReadOnlyList Features => InternalFeatures; internal readonly List InternalFeatures = new List(); internal bool IsSelf; /// /// Whether or not this metadata object represents a bare manifest. /// /// if it is bare, otherwise public bool IsBare { get; internal set; } private PluginManifest manifest; internal HashSet Dependencies { get; } = new HashSet(); internal PluginManifest Manifest { get => manifest; set { manifest = value; Name = value.Name; Version = value.Version; Id = value.Id; } } public RuntimeOptions RuntimeOptions { get; internal set; } public bool IsAttributePlugin { get; internal set; } = false; /// /// Gets all of the metadata as a readable string. /// /// the readable printable metadata string public override string ToString() => $"{Name}({Id}@{Version})({PluginType?.FullName}) from '{Utils.GetRelativePath(File?.FullName, BeatSaber.InstallPath)}'"; } }