mirror of
https://github.com/jellyfin/jellyfin.git
synced 2026-06-20 06:30:57 +01:00
Merge branch 'master' into SSDP
This commit is contained in:
20
MediaBrowser.Common/Configuration/ConfigurationStore.cs
Normal file
20
MediaBrowser.Common/Configuration/ConfigurationStore.cs
Normal file
@@ -0,0 +1,20 @@
|
||||
using System;
|
||||
|
||||
namespace MediaBrowser.Common.Configuration
|
||||
{
|
||||
/// <summary>
|
||||
/// Describes a single entry in the application configuration.
|
||||
/// </summary>
|
||||
public class ConfigurationStore
|
||||
{
|
||||
/// <summary>
|
||||
/// Gets or sets the unique identifier for the configuration.
|
||||
/// </summary>
|
||||
public string Key { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the type used to store the data for this configuration entry.
|
||||
/// </summary>
|
||||
public Type ConfigurationType { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -1,3 +1,4 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
using MediaBrowser.Model.Configuration;
|
||||
|
||||
@@ -17,18 +18,25 @@ namespace MediaBrowser.Common.Configuration
|
||||
=> configurationManager.GetConfiguration<EncodingOptions>("encoding");
|
||||
|
||||
/// <summary>
|
||||
/// Retrieves the transcoding temp path from the encoding configuration.
|
||||
/// Retrieves the transcoding temp path from the encoding configuration, falling back to a default if no path
|
||||
/// is specified in configuration. If the directory does not exist, it will be created.
|
||||
/// </summary>
|
||||
/// <param name="configurationManager">The Configuration manager.</param>
|
||||
/// <param name="configurationManager">The configuration manager.</param>
|
||||
/// <returns>The transcoding temp path.</returns>
|
||||
/// <exception cref="UnauthorizedAccessException">If the directory does not exist, and the caller does not have the required permission to create it.</exception>
|
||||
/// <exception cref="NotSupportedException">If there is a custom path transcoding path specified, but it is invalid.</exception>
|
||||
/// <exception cref="IOException">If the directory does not exist, and it also could not be created.</exception>
|
||||
public static string GetTranscodePath(this IConfigurationManager configurationManager)
|
||||
{
|
||||
// Get the configured path and fall back to a default
|
||||
var transcodingTempPath = configurationManager.GetEncodingOptions().TranscodingTempPath;
|
||||
if (string.IsNullOrEmpty(transcodingTempPath))
|
||||
{
|
||||
return Path.Combine(configurationManager.CommonApplicationPaths.ProgramDataPath, "transcodes");
|
||||
transcodingTempPath = Path.Combine(configurationManager.CommonApplicationPaths.ProgramDataPath, "transcodes");
|
||||
}
|
||||
|
||||
// Make sure the directory exists
|
||||
Directory.CreateDirectory(transcodingTempPath);
|
||||
return transcodingTempPath;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,12 +3,12 @@ using MediaBrowser.Model.Configuration;
|
||||
namespace MediaBrowser.Common.Configuration
|
||||
{
|
||||
/// <summary>
|
||||
/// Interface IApplicationPaths
|
||||
/// Interface IApplicationPaths.
|
||||
/// </summary>
|
||||
public interface IApplicationPaths
|
||||
{
|
||||
/// <summary>
|
||||
/// Gets the path to the program data folder
|
||||
/// Gets the path to the program data folder.
|
||||
/// </summary>
|
||||
/// <value>The program data path.</value>
|
||||
string ProgramDataPath { get; }
|
||||
@@ -23,13 +23,13 @@ namespace MediaBrowser.Common.Configuration
|
||||
string WebPath { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the path to the program system folder
|
||||
/// Gets the path to the program system folder.
|
||||
/// </summary>
|
||||
/// <value>The program data path.</value>
|
||||
string ProgramSystemPath { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the folder path to the data directory
|
||||
/// Gets the folder path to the data directory.
|
||||
/// </summary>
|
||||
/// <value>The data directory.</value>
|
||||
string DataPath { get; }
|
||||
@@ -41,43 +41,43 @@ namespace MediaBrowser.Common.Configuration
|
||||
string ImageCachePath { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the path to the plugin directory
|
||||
/// Gets the path to the plugin directory.
|
||||
/// </summary>
|
||||
/// <value>The plugins path.</value>
|
||||
string PluginsPath { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the path to the plugin configurations directory
|
||||
/// Gets the path to the plugin configurations directory.
|
||||
/// </summary>
|
||||
/// <value>The plugin configurations path.</value>
|
||||
string PluginConfigurationsPath { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the path to the log directory
|
||||
/// Gets the path to the log directory.
|
||||
/// </summary>
|
||||
/// <value>The log directory path.</value>
|
||||
string LogDirectoryPath { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the path to the application configuration root directory
|
||||
/// Gets the path to the application configuration root directory.
|
||||
/// </summary>
|
||||
/// <value>The configuration directory path.</value>
|
||||
string ConfigurationDirectoryPath { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the path to the system configuration file
|
||||
/// Gets the path to the system configuration file.
|
||||
/// </summary>
|
||||
/// <value>The system configuration file path.</value>
|
||||
string SystemConfigurationFilePath { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the folder path to the cache directory
|
||||
/// Gets the folder path to the cache directory.
|
||||
/// </summary>
|
||||
/// <value>The cache directory.</value>
|
||||
string CachePath { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the folder path to the temp directory within the cache folder
|
||||
/// Gets the folder path to the temp directory within the cache folder.
|
||||
/// </summary>
|
||||
/// <value>The temp directory.</value>
|
||||
string TempDirectory { get; }
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace MediaBrowser.Common.Configuration
|
||||
@@ -15,33 +14,4 @@ namespace MediaBrowser.Common.Configuration
|
||||
/// <returns>The configuration store.</returns>
|
||||
IEnumerable<ConfigurationStore> GetConfigurations();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Describes a single entry in the application configuration.
|
||||
/// </summary>
|
||||
public class ConfigurationStore
|
||||
{
|
||||
/// <summary>
|
||||
/// Gets or sets the unique identifier for the configuration.
|
||||
/// </summary>
|
||||
public string Key { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the type used to store the data for this configuration entry.
|
||||
/// </summary>
|
||||
public Type ConfigurationType { get; set; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// A configuration store that can be validated.
|
||||
/// </summary>
|
||||
public interface IValidatingConfiguration
|
||||
{
|
||||
/// <summary>
|
||||
/// Validation method to be invoked before saving the configuration.
|
||||
/// </summary>
|
||||
/// <param name="oldConfig">The old configuration.</param>
|
||||
/// <param name="newConfig">The new configuration.</param>
|
||||
void Validate(object oldConfig, object newConfig);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -24,7 +24,7 @@ namespace MediaBrowser.Common.Configuration
|
||||
event EventHandler<ConfigurationUpdateEventArgs> NamedConfigurationUpdated;
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the application paths.
|
||||
/// Gets the application paths.
|
||||
/// </summary>
|
||||
/// <value>The application paths.</value>
|
||||
IApplicationPaths CommonApplicationPaths { get; }
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
namespace MediaBrowser.Common.Configuration
|
||||
{
|
||||
/// <summary>
|
||||
/// A configuration store that can be validated.
|
||||
/// </summary>
|
||||
public interface IValidatingConfiguration
|
||||
{
|
||||
/// <summary>
|
||||
/// Validation method to be invoked before saving the configuration.
|
||||
/// </summary>
|
||||
/// <param name="oldConfig">The old configuration.</param>
|
||||
/// <param name="newConfig">The new configuration.</param>
|
||||
void Validate(object oldConfig, object newConfig);
|
||||
}
|
||||
}
|
||||
@@ -1,3 +1,5 @@
|
||||
#nullable enable
|
||||
|
||||
using System;
|
||||
using System.Security.Cryptography;
|
||||
using System.Text;
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
#nullable enable
|
||||
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace MediaBrowser.Common.Extensions
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
#nullable enable
|
||||
|
||||
using System;
|
||||
|
||||
namespace MediaBrowser.Common.Extensions
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
#nullable enable
|
||||
|
||||
using System;
|
||||
using System.Diagnostics;
|
||||
using System.Threading;
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
#nullable enable
|
||||
#pragma warning disable CS1591
|
||||
|
||||
using System;
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
#nullable enable
|
||||
|
||||
using System;
|
||||
|
||||
namespace MediaBrowser.Common.Extensions
|
||||
|
||||
37
MediaBrowser.Common/Extensions/StringExtensions.cs
Normal file
37
MediaBrowser.Common/Extensions/StringExtensions.cs
Normal file
@@ -0,0 +1,37 @@
|
||||
#nullable enable
|
||||
|
||||
using System;
|
||||
|
||||
namespace MediaBrowser.Common.Extensions
|
||||
{
|
||||
/// <summary>
|
||||
/// Extensions methods to simplify string operations.
|
||||
/// </summary>
|
||||
public static class StringExtensions
|
||||
{
|
||||
/// <summary>
|
||||
/// Returns the part on the left of the <c>needle</c>.
|
||||
/// </summary>
|
||||
/// <param name="haystack">The string to seek.</param>
|
||||
/// <param name="needle">The needle to find.</param>
|
||||
/// <returns>The part left of the <paramref name="needle" />.</returns>
|
||||
public static ReadOnlySpan<char> LeftPart(this ReadOnlySpan<char> haystack, char needle)
|
||||
{
|
||||
var pos = haystack.IndexOf(needle);
|
||||
return pos == -1 ? haystack : haystack[..pos];
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns the part on the left of the <c>needle</c>.
|
||||
/// </summary>
|
||||
/// <param name="haystack">The string to seek.</param>
|
||||
/// <param name="needle">The needle to find.</param>
|
||||
/// <param name="stringComparison">One of the enumeration values that specifies the rules for the search.</param>
|
||||
/// <returns>The part left of the <c>needle</c>.</returns>
|
||||
public static ReadOnlySpan<char> LeftPart(this ReadOnlySpan<char> haystack, ReadOnlySpan<char> needle, StringComparison stringComparison = default)
|
||||
{
|
||||
var pos = haystack.IndexOf(needle, stringComparison);
|
||||
return pos == -1 ? haystack : haystack[..pos];
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,82 @@
|
||||
#nullable enable
|
||||
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Globalization;
|
||||
using System.Reflection;
|
||||
using System.Text.Json;
|
||||
using System.Text.Json.Serialization;
|
||||
|
||||
namespace MediaBrowser.Common.Json.Converters
|
||||
{
|
||||
/// <summary>
|
||||
/// Converter for Dictionaries without string key.
|
||||
/// TODO This can be removed when System.Text.Json supports Dictionaries with non-string keys.
|
||||
/// </summary>
|
||||
/// <typeparam name="TKey">Type of key.</typeparam>
|
||||
/// <typeparam name="TValue">Type of value.</typeparam>
|
||||
internal sealed class JsonNonStringKeyDictionaryConverter<TKey, TValue> : JsonConverter<IDictionary<TKey, TValue>>
|
||||
{
|
||||
/// <summary>
|
||||
/// Read JSON.
|
||||
/// </summary>
|
||||
/// <param name="reader">The Utf8JsonReader.</param>
|
||||
/// <param name="typeToConvert">The type to convert.</param>
|
||||
/// <param name="options">The json serializer options.</param>
|
||||
/// <returns>Typed dictionary.</returns>
|
||||
/// <exception cref="NotSupportedException">Not supported.</exception>
|
||||
public override IDictionary<TKey, TValue> Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
|
||||
{
|
||||
var convertedType = typeof(Dictionary<,>).MakeGenericType(typeof(string), typeToConvert.GenericTypeArguments[1]);
|
||||
var value = JsonSerializer.Deserialize(ref reader, convertedType, options);
|
||||
var instance = (Dictionary<TKey, TValue>)Activator.CreateInstance(
|
||||
typeToConvert,
|
||||
BindingFlags.Instance | BindingFlags.Public,
|
||||
null,
|
||||
null,
|
||||
CultureInfo.CurrentCulture);
|
||||
var enumerator = (IEnumerator)convertedType.GetMethod("GetEnumerator")!.Invoke(value, null);
|
||||
var parse = typeof(TKey).GetMethod(
|
||||
"Parse",
|
||||
0,
|
||||
BindingFlags.Public | BindingFlags.Static,
|
||||
null,
|
||||
CallingConventions.Any,
|
||||
new[] { typeof(string) },
|
||||
null);
|
||||
if (parse == null)
|
||||
{
|
||||
throw new NotSupportedException($"{typeof(TKey)} as TKey in IDictionary<TKey, TValue> is not supported.");
|
||||
}
|
||||
|
||||
while (enumerator.MoveNext())
|
||||
{
|
||||
var element = (KeyValuePair<string?, TValue>)enumerator.Current;
|
||||
instance.Add((TKey)parse.Invoke(null, new[] { (object?)element.Key }), element.Value);
|
||||
}
|
||||
|
||||
return instance;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Write dictionary as Json.
|
||||
/// </summary>
|
||||
/// <param name="writer">The Utf8JsonWriter.</param>
|
||||
/// <param name="value">The dictionary value.</param>
|
||||
/// <param name="options">The Json serializer options.</param>
|
||||
public override void Write(Utf8JsonWriter writer, IDictionary<TKey, TValue> value, JsonSerializerOptions options)
|
||||
{
|
||||
var convertedDictionary = new Dictionary<string?, TValue>(value.Count);
|
||||
foreach (var (k, v) in value)
|
||||
{
|
||||
if (k != null)
|
||||
{
|
||||
convertedDictionary[k.ToString()] = v;
|
||||
}
|
||||
}
|
||||
|
||||
JsonSerializer.Serialize(writer, convertedDictionary, options);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,59 @@
|
||||
#nullable enable
|
||||
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Globalization;
|
||||
using System.Reflection;
|
||||
using System.Text.Json;
|
||||
using System.Text.Json.Serialization;
|
||||
|
||||
namespace MediaBrowser.Common.Json.Converters
|
||||
{
|
||||
/// <summary>
|
||||
/// https://github.com/dotnet/runtime/issues/30524#issuecomment-524619972.
|
||||
/// TODO This can be removed when System.Text.Json supports Dictionaries with non-string keys.
|
||||
/// </summary>
|
||||
internal sealed class JsonNonStringKeyDictionaryConverterFactory : JsonConverterFactory
|
||||
{
|
||||
/// <summary>
|
||||
/// Only convert objects that implement IDictionary and do not have string keys.
|
||||
/// </summary>
|
||||
/// <param name="typeToConvert">Type convert.</param>
|
||||
/// <returns>Conversion ability.</returns>
|
||||
public override bool CanConvert(Type typeToConvert)
|
||||
{
|
||||
if (!typeToConvert.IsGenericType)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
// Let built in converter handle string keys
|
||||
if (typeToConvert.GenericTypeArguments[0] == typeof(string))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
// Only support objects that implement IDictionary
|
||||
return typeToConvert.GetInterface(nameof(IDictionary)) != null;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Create converter for generic dictionary type.
|
||||
/// </summary>
|
||||
/// <param name="typeToConvert">Type to convert.</param>
|
||||
/// <param name="options">Json serializer options.</param>
|
||||
/// <returns>JsonConverter for given type.</returns>
|
||||
public override JsonConverter CreateConverter(Type typeToConvert, JsonSerializerOptions options)
|
||||
{
|
||||
var converterType = typeof(JsonNonStringKeyDictionaryConverter<,>)
|
||||
.MakeGenericType(typeToConvert.GenericTypeArguments[0], typeToConvert.GenericTypeArguments[1]);
|
||||
var converter = (JsonConverter)Activator.CreateInstance(
|
||||
converterType,
|
||||
BindingFlags.Instance | BindingFlags.Public,
|
||||
null,
|
||||
null,
|
||||
CultureInfo.CurrentCulture);
|
||||
return converter;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -23,6 +23,7 @@ namespace MediaBrowser.Common.Json
|
||||
|
||||
options.Converters.Add(new JsonGuidConverter());
|
||||
options.Converters.Add(new JsonStringEnumConverter());
|
||||
options.Converters.Add(new JsonNonStringKeyDictionaryConverterFactory());
|
||||
|
||||
return options;
|
||||
}
|
||||
|
||||
@@ -17,8 +17,8 @@
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.Extensions.Configuration.Abstractions" Version="3.1.3" />
|
||||
<PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="3.1.3" />
|
||||
<PackageReference Include="Microsoft.Extensions.Configuration.Abstractions" Version="3.1.5" />
|
||||
<PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="3.1.5" />
|
||||
<PackageReference Include="Microsoft.Net.Http.Headers" Version="2.2.8" />
|
||||
</ItemGroup>
|
||||
|
||||
@@ -37,7 +37,7 @@
|
||||
<ItemGroup Condition=" '$(Configuration)' == 'Debug' ">
|
||||
<PackageReference Include="Microsoft.CodeAnalysis.FxCopAnalyzers" Version="2.9.8" PrivateAssets="All" />
|
||||
<PackageReference Include="SerilogAnalyzer" Version="0.15.0" PrivateAssets="All" />
|
||||
<!-- <PackageReference Include="StyleCop.Analyzers" Version="1.1.118" PrivateAssets="All" /> -->
|
||||
<PackageReference Include="StyleCop.Analyzers" Version="1.1.118" PrivateAssets="All" />
|
||||
<PackageReference Include="SmartAnalyzers.MultithreadingAnalyzer" Version="1.1.31" PrivateAssets="All" />
|
||||
</ItemGroup>
|
||||
|
||||
|
||||
11
MediaBrowser.Common/Net/CacheMode.cs
Normal file
11
MediaBrowser.Common/Net/CacheMode.cs
Normal file
@@ -0,0 +1,11 @@
|
||||
#pragma warning disable CS1591
|
||||
#pragma warning disable SA1602
|
||||
|
||||
namespace MediaBrowser.Common.Net
|
||||
{
|
||||
public enum CacheMode
|
||||
{
|
||||
None = 0,
|
||||
Unconditional = 1
|
||||
}
|
||||
}
|
||||
15
MediaBrowser.Common/Net/CompressionMethods.cs
Normal file
15
MediaBrowser.Common/Net/CompressionMethods.cs
Normal file
@@ -0,0 +1,15 @@
|
||||
#pragma warning disable CS1591
|
||||
#pragma warning disable SA1602
|
||||
|
||||
using System;
|
||||
|
||||
namespace MediaBrowser.Common.Net
|
||||
{
|
||||
[Flags]
|
||||
public enum CompressionMethods
|
||||
{
|
||||
None = 0b00000001,
|
||||
Deflate = 0b00000010,
|
||||
Gzip = 0b00000100
|
||||
}
|
||||
}
|
||||
@@ -102,18 +102,4 @@ namespace MediaBrowser.Common.Net
|
||||
return value;
|
||||
}
|
||||
}
|
||||
|
||||
public enum CacheMode
|
||||
{
|
||||
None = 0,
|
||||
Unconditional = 1
|
||||
}
|
||||
|
||||
[Flags]
|
||||
public enum CompressionMethods
|
||||
{
|
||||
None = 0b00000001,
|
||||
Deflate = 0b00000010,
|
||||
Gzip = 0b00000100
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,15 +5,16 @@ using System;
|
||||
namespace MediaBrowser.Common.Progress
|
||||
{
|
||||
/// <summary>
|
||||
/// Class ActionableProgress
|
||||
/// Class ActionableProgress.
|
||||
/// </summary>
|
||||
/// <typeparam name="T"></typeparam>
|
||||
/// <typeparam name="T">The type for the action parameter.</typeparam>
|
||||
public class ActionableProgress<T> : IProgress<T>
|
||||
{
|
||||
/// <summary>
|
||||
/// The _actions
|
||||
/// The _actions.
|
||||
/// </summary>
|
||||
private Action<T> _action;
|
||||
|
||||
public event EventHandler<T> ProgressChanged;
|
||||
|
||||
/// <summary>
|
||||
@@ -32,14 +33,4 @@ namespace MediaBrowser.Common.Progress
|
||||
_action?.Invoke(value);
|
||||
}
|
||||
}
|
||||
|
||||
public class SimpleProgress<T> : IProgress<T>
|
||||
{
|
||||
public event EventHandler<T> ProgressChanged;
|
||||
|
||||
public void Report(T value)
|
||||
{
|
||||
ProgressChanged?.Invoke(this, value);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
16
MediaBrowser.Common/Progress/SimpleProgress.cs
Normal file
16
MediaBrowser.Common/Progress/SimpleProgress.cs
Normal file
@@ -0,0 +1,16 @@
|
||||
#pragma warning disable CS1591
|
||||
|
||||
using System;
|
||||
|
||||
namespace MediaBrowser.Common.Progress
|
||||
{
|
||||
public class SimpleProgress<T> : IProgress<T>
|
||||
{
|
||||
public event EventHandler<T> ProgressChanged;
|
||||
|
||||
public void Report(T value)
|
||||
{
|
||||
ProgressChanged?.Invoke(this, value);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -12,28 +12,28 @@ namespace MediaBrowser.Common.Updates
|
||||
{
|
||||
public interface IInstallationManager : IDisposable
|
||||
{
|
||||
event EventHandler<InstallationEventArgs> PackageInstalling;
|
||||
event EventHandler<InstallationInfo> PackageInstalling;
|
||||
|
||||
event EventHandler<InstallationEventArgs> PackageInstallationCompleted;
|
||||
event EventHandler<InstallationInfo> PackageInstallationCompleted;
|
||||
|
||||
event EventHandler<InstallationFailedEventArgs> PackageInstallationFailed;
|
||||
|
||||
event EventHandler<InstallationEventArgs> PackageInstallationCancelled;
|
||||
event EventHandler<InstallationInfo> PackageInstallationCancelled;
|
||||
|
||||
/// <summary>
|
||||
/// Occurs when a plugin is uninstalled.
|
||||
/// </summary>
|
||||
event EventHandler<GenericEventArgs<IPlugin>> PluginUninstalled;
|
||||
event EventHandler<IPlugin> PluginUninstalled;
|
||||
|
||||
/// <summary>
|
||||
/// Occurs when a plugin is updated.
|
||||
/// </summary>
|
||||
event EventHandler<GenericEventArgs<(IPlugin, VersionInfo)>> PluginUpdated;
|
||||
event EventHandler<InstallationInfo> PluginUpdated;
|
||||
|
||||
/// <summary>
|
||||
/// Occurs when a plugin is installed.
|
||||
/// </summary>
|
||||
event EventHandler<GenericEventArgs<VersionInfo>> PluginInstalled;
|
||||
event EventHandler<InstallationInfo> PluginInstalled;
|
||||
|
||||
/// <summary>
|
||||
/// Gets the completed installations.
|
||||
@@ -59,16 +59,6 @@ namespace MediaBrowser.Common.Updates
|
||||
string name = null,
|
||||
Guid guid = default);
|
||||
|
||||
/// <summary>
|
||||
/// Returns all compatible versions ordered from newest to oldest.
|
||||
/// </summary>
|
||||
/// <param name="availableVersions">The available version of the plugin.</param>
|
||||
/// <param name="minVersion">The minimum required version of the plugin.</param>
|
||||
/// <returns>All compatible versions ordered from newest to oldest.</returns>
|
||||
IEnumerable<VersionInfo> GetCompatibleVersions(
|
||||
IEnumerable<VersionInfo> availableVersions,
|
||||
Version minVersion = null);
|
||||
|
||||
/// <summary>
|
||||
/// Returns all compatible versions ordered from newest to oldest.
|
||||
/// </summary>
|
||||
@@ -77,7 +67,7 @@ namespace MediaBrowser.Common.Updates
|
||||
/// <param name="guid">The guid of the plugin.</param>
|
||||
/// <param name="minVersion">The minimum required version of the plugin.</param>
|
||||
/// <returns>All compatible versions ordered from newest to oldest.</returns>
|
||||
IEnumerable<VersionInfo> GetCompatibleVersions(
|
||||
IEnumerable<InstallationInfo> GetCompatibleVersions(
|
||||
IEnumerable<PackageInfo> availablePackages,
|
||||
string name = null,
|
||||
Guid guid = default,
|
||||
@@ -88,7 +78,7 @@ namespace MediaBrowser.Common.Updates
|
||||
/// </summary>
|
||||
/// <param name="cancellationToken">The cancellation token.</param>
|
||||
/// <returns>The available plugin updates.</returns>
|
||||
Task<IEnumerable<VersionInfo>> GetAvailablePluginUpdates(CancellationToken cancellationToken = default);
|
||||
Task<IEnumerable<InstallationInfo>> GetAvailablePluginUpdates(CancellationToken cancellationToken = default);
|
||||
|
||||
/// <summary>
|
||||
/// Installs the package.
|
||||
@@ -96,7 +86,7 @@ namespace MediaBrowser.Common.Updates
|
||||
/// <param name="package">The package.</param>
|
||||
/// <param name="cancellationToken">The cancellation token.</param>
|
||||
/// <returns><see cref="Task" />.</returns>
|
||||
Task InstallPackage(VersionInfo package, CancellationToken cancellationToken = default);
|
||||
Task InstallPackage(InstallationInfo package, CancellationToken cancellationToken = default);
|
||||
|
||||
/// <summary>
|
||||
/// Uninstalls a plugin.
|
||||
|
||||
Reference in New Issue
Block a user