using System; using System.Collections.Generic; using System.Globalization; namespace MediaBrowser.Common.Plugins { /// /// Local plugin struct. /// public readonly struct LocalPlugin : IEquatable { /// /// Initializes a new instance of the struct. /// /// The plugin id. /// The plugin name. /// The plugin version. /// The plugin path. public LocalPlugin(Guid id, string name, Version version, string path) { Id = id; Name = name; Version = version; Path = path; DllFiles = new List(); } /// /// Gets the plugin id. /// public Guid Id { get; } /// /// Gets the plugin name. /// public string Name { get; } /// /// Gets the plugin version. /// public Version Version { get; } /// /// Gets the plugin path. /// public string Path { get; } /// /// Gets the list of dll files for this plugin. /// public List DllFiles { get; } /// /// == operator. /// /// Left item. /// Right item. /// Comparison result. public static bool operator ==(LocalPlugin left, LocalPlugin right) { return left.Equals(right); } /// /// != operator. /// /// Left item. /// Right item. /// Comparison result. public static bool operator !=(LocalPlugin left, LocalPlugin right) { return !(left == right); } /// /// Compare two . /// /// The first item. /// The second item. /// Comparison result. public static int Compare(LocalPlugin a, LocalPlugin b) { var compare = string.Compare(a.Name, b.Name, true, CultureInfo.InvariantCulture); // Id is not equal but name is. if (a.Id != b.Id && compare == 0) { compare = a.Id.CompareTo(b.Id); } return compare == 0 ? a.Version.CompareTo(b.Version) : compare; } /// public override bool Equals(object obj) { return obj is LocalPlugin other && this.Equals(other); } /// public override int GetHashCode() { return Name.GetHashCode(StringComparison.OrdinalIgnoreCase); } /// public bool Equals(LocalPlugin other) { return Name.Equals(other.Name, StringComparison.OrdinalIgnoreCase) && Id.Equals(other.Id); } } }