diff options
Diffstat (limited to 'MediaBrowser.Common')
| -rw-r--r-- | MediaBrowser.Common/Json/Converters/JsonCommaDelimitedArrayConverterFactory.cs | 4 | ||||
| -rw-r--r-- | MediaBrowser.Common/Plugins/LocalPlugin.cs | 113 |
2 files changed, 115 insertions, 2 deletions
diff --git a/MediaBrowser.Common/Json/Converters/JsonCommaDelimitedArrayConverterFactory.cs b/MediaBrowser.Common/Json/Converters/JsonCommaDelimitedArrayConverterFactory.cs index b7b1daf76a..24ed3ea19e 100644 --- a/MediaBrowser.Common/Json/Converters/JsonCommaDelimitedArrayConverterFactory.cs +++ b/MediaBrowser.Common/Json/Converters/JsonCommaDelimitedArrayConverterFactory.cs @@ -21,8 +21,8 @@ namespace MediaBrowser.Common.Json.Converters /// <inheritdoc /> public override JsonConverter CreateConverter(Type typeToConvert, JsonSerializerOptions options) { - var structType = typeToConvert.GetElementType(); + var structType = typeToConvert.GetElementType() ?? typeToConvert.GenericTypeArguments[0]; return (JsonConverter)Activator.CreateInstance(typeof(JsonCommaDelimitedArrayConverter<>).MakeGenericType(structType)); } } -}
\ No newline at end of file +} diff --git a/MediaBrowser.Common/Plugins/LocalPlugin.cs b/MediaBrowser.Common/Plugins/LocalPlugin.cs new file mode 100644 index 0000000000..7927c663d4 --- /dev/null +++ b/MediaBrowser.Common/Plugins/LocalPlugin.cs @@ -0,0 +1,113 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +namespace MediaBrowser.Common.Plugins +{ + /// <summary> + /// Local plugin struct. + /// </summary> + public class LocalPlugin : IEquatable<LocalPlugin> + { + /// <summary> + /// Initializes a new instance of the <see cref="LocalPlugin"/> class. + /// </summary> + /// <param name="id">The plugin id.</param> + /// <param name="name">The plugin name.</param> + /// <param name="version">The plugin version.</param> + /// <param name="path">The plugin path.</param> + public LocalPlugin(Guid id, string name, Version version, string path) + { + Id = id; + Name = name; + Version = version; + Path = path; + DllFiles = new List<string>(); + } + + /// <summary> + /// Gets the plugin id. + /// </summary> + public Guid Id { get; } + + /// <summary> + /// Gets the plugin name. + /// </summary> + public string Name { get; } + + /// <summary> + /// Gets the plugin version. + /// </summary> + public Version Version { get; } + + /// <summary> + /// Gets the plugin path. + /// </summary> + public string Path { get; } + + /// <summary> + /// Gets the list of dll files for this plugin. + /// </summary> + public List<string> DllFiles { get; } + + /// <summary> + /// == operator. + /// </summary> + /// <param name="left">Left item.</param> + /// <param name="right">Right item.</param> + /// <returns>Comparison result.</returns> + public static bool operator ==(LocalPlugin left, LocalPlugin right) + { + return left.Equals(right); + } + + /// <summary> + /// != operator. + /// </summary> + /// <param name="left">Left item.</param> + /// <param name="right">Right item.</param> + /// <returns>Comparison result.</returns> + public static bool operator !=(LocalPlugin left, LocalPlugin right) + { + return !left.Equals(right); + } + + /// <summary> + /// Compare two <see cref="LocalPlugin"/>. + /// </summary> + /// <param name="a">The first item.</param> + /// <param name="b">The second item.</param> + /// <returns>Comparison result.</returns> + 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; + } + + /// <inheritdoc /> + public override bool Equals(object obj) + { + return obj is LocalPlugin other && this.Equals(other); + } + + /// <inheritdoc /> + public override int GetHashCode() + { + return Name.GetHashCode(StringComparison.OrdinalIgnoreCase); + } + + /// <inheritdoc /> + public bool Equals(LocalPlugin other) + { + return Name.Equals(other.Name, StringComparison.OrdinalIgnoreCase) + && Id.Equals(other.Id); + } + } +} |
