Changes as recommended.
This commit is contained in:
parent
c761cbff0e
commit
eb2439f23b
|
@ -396,7 +396,7 @@ namespace Emby.Server.Implementations
|
|||
Logger.LogError("DI Loop detected in the attempted creation of {Type}", type.FullName);
|
||||
foreach (var entry in _creatingInstances)
|
||||
{
|
||||
Logger.LogError("Called from: {stack}", entry.FullName);
|
||||
Logger.LogError("Called from: {TypeName}", entry.FullName);
|
||||
}
|
||||
|
||||
_pluginManager.FailPlugin(type.Assembly);
|
||||
|
|
|
@ -96,9 +96,10 @@ namespace Emby.Server.Implementations
|
|||
|
||||
foreach (var file in plugin.DllFiles)
|
||||
{
|
||||
Assembly assembly;
|
||||
try
|
||||
{
|
||||
plugin.Assembly = Assembly.LoadFrom(file);
|
||||
assembly = Assembly.LoadFrom(file);
|
||||
}
|
||||
catch (FileLoadException ex)
|
||||
{
|
||||
|
@ -107,8 +108,8 @@ namespace Emby.Server.Implementations
|
|||
continue;
|
||||
}
|
||||
|
||||
_logger.LogInformation("Loaded assembly {Assembly} from {Path}", plugin.Assembly.FullName, file);
|
||||
yield return plugin.Assembly;
|
||||
_logger.LogInformation("Loaded assembly {Assembly} from {Path}", assembly.FullName, file);
|
||||
yield return assembly;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -203,6 +204,7 @@ namespace Emby.Server.Implementations
|
|||
return true;
|
||||
}
|
||||
|
||||
_logger.LogWarning("Unable to delete {Path}, so marking as deleteOnStartup.", plugin.Path);
|
||||
// Unable to delete, so disable.
|
||||
return ChangePluginState(plugin, PluginStatus.DeleteOnStartup);
|
||||
}
|
||||
|
@ -310,10 +312,7 @@ namespace Emby.Server.Implementations
|
|||
throw new ArgumentNullException(nameof(assembly));
|
||||
}
|
||||
|
||||
var plugin = _plugins.Where(
|
||||
p => assembly.Equals(p.Assembly)
|
||||
|| string.Equals(assembly.Location, assembly.Location, StringComparison.OrdinalIgnoreCase))
|
||||
.FirstOrDefault();
|
||||
var plugin = _plugins.Where(p => p.DllFiles.Contains(assembly.Location)).FirstOrDefault();
|
||||
if (plugin == null)
|
||||
{
|
||||
// A plugin's assembly didn't cause this issue, so ignore it.
|
||||
|
@ -366,20 +365,7 @@ namespace Emby.Server.Implementations
|
|||
}
|
||||
|
||||
plugin.Manifest.Status = state;
|
||||
SaveManifest(plugin.Manifest, plugin.Path);
|
||||
try
|
||||
{
|
||||
var data = JsonSerializer.Serialize(plugin.Manifest, _jsonOptions);
|
||||
File.WriteAllText(Path.Combine(plugin.Path, "meta.json"), data, Encoding.UTF8);
|
||||
return true;
|
||||
}
|
||||
#pragma warning disable CA1031 // Do not catch general exception types
|
||||
catch (Exception e)
|
||||
#pragma warning restore CA1031 // Do not catch general exception types
|
||||
{
|
||||
_logger.LogWarning(e, "Unable to disable plugin {Path}", plugin.Path);
|
||||
return false;
|
||||
}
|
||||
return SaveManifest(plugin.Manifest, plugin.Path);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
@ -509,15 +495,14 @@ namespace Emby.Server.Implementations
|
|||
// Attempt a cleanup of old folders.
|
||||
try
|
||||
{
|
||||
_logger.LogDebug("Deleting {Path}", plugin.Path);
|
||||
Directory.Delete(plugin.Path, true);
|
||||
_logger.LogDebug("Deleted {Path}", plugin.Path);
|
||||
_plugins.Remove(plugin);
|
||||
}
|
||||
#pragma warning disable CA1031 // Do not catch general exception types
|
||||
catch (Exception e)
|
||||
catch
|
||||
#pragma warning restore CA1031 // Do not catch general exception types
|
||||
{
|
||||
_logger.LogWarning(e, "Unable to delete {Path}", plugin.Path);
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -670,21 +655,23 @@ namespace Emby.Server.Implementations
|
|||
_logger.LogWarning(e, "Unable to delete {Path}", path);
|
||||
}
|
||||
|
||||
versions.RemoveAt(x);
|
||||
}
|
||||
|
||||
if (!cleaned)
|
||||
{
|
||||
if (manifest == null)
|
||||
if (cleaned)
|
||||
{
|
||||
_logger.LogWarning("Unable to disable plugin {Path}", entry.Path);
|
||||
continue;
|
||||
versions.RemoveAt(x);
|
||||
}
|
||||
|
||||
if (manifest.Status != PluginStatus.DeleteOnStartup)
|
||||
else
|
||||
{
|
||||
manifest.Status = PluginStatus.DeleteOnStartup;
|
||||
SaveManifest(manifest, entry.Path);
|
||||
if (manifest == null)
|
||||
{
|
||||
_logger.LogWarning("Unable to disable plugin {Path}", entry.Path);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (manifest.Status != PluginStatus.DeleteOnStartup)
|
||||
{
|
||||
manifest.Status = PluginStatus.DeleteOnStartup;
|
||||
SaveManifest(manifest, entry.Path);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -8,7 +8,6 @@ using System.Linq;
|
|||
using System.Net.Http;
|
||||
using System.Net.Http.Json;
|
||||
using System.Security.Cryptography;
|
||||
using System.Text;
|
||||
using System.Text.Json;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
|
@ -106,18 +105,8 @@ namespace Emby.Server.Implementations.Updates
|
|||
try
|
||||
{
|
||||
List<PackageInfo>? packages;
|
||||
var uri = new Uri(manifest);
|
||||
if (uri.Scheme.StartsWith("http", StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
packages = await _httpClientFactory.CreateClient(NamedClient.Default)
|
||||
.GetFromJsonAsync<List<PackageInfo>>(uri, _jsonSerializerOptions, cancellationToken).ConfigureAwait(false);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Local Packages
|
||||
var data = File.ReadAllText(manifest, Encoding.UTF8);
|
||||
packages = JsonSerializer.Deserialize<List<PackageInfo>>(data, _jsonSerializerOptions);
|
||||
}
|
||||
packages = await _httpClientFactory.CreateClient(NamedClient.Default)
|
||||
.GetFromJsonAsync<List<PackageInfo>>(new Uri(manifest), _jsonSerializerOptions, cancellationToken).ConfigureAwait(false);
|
||||
|
||||
if (packages == null)
|
||||
{
|
||||
|
|
|
@ -44,7 +44,6 @@ namespace Jellyfin.Api.Controllers
|
|||
/// <returns>A <see cref="PackageInfo"/> containing package information.</returns>
|
||||
[HttpGet("Packages/{name}")]
|
||||
[ProducesResponseType(StatusCodes.Status200OK)]
|
||||
[Produces(JsonDefaults.CamelCaseMediaType)]
|
||||
public async Task<ActionResult<PackageInfo>> GetPackageInfo(
|
||||
[FromRoute, Required] string name,
|
||||
[FromQuery] Guid? assemblyGuid)
|
||||
|
@ -71,7 +70,6 @@ namespace Jellyfin.Api.Controllers
|
|||
/// <returns>An <see cref="PackageInfo"/> containing available packages information.</returns>
|
||||
[HttpGet("Packages")]
|
||||
[ProducesResponseType(StatusCodes.Status200OK)]
|
||||
[Produces(JsonDefaults.CamelCaseMediaType)]
|
||||
public async Task<IEnumerable<PackageInfo>> GetPackages()
|
||||
{
|
||||
IEnumerable<PackageInfo> packages = await _installationManager.GetAvailablePackages().ConfigureAwait(false);
|
||||
|
|
|
@ -80,11 +80,6 @@ namespace MediaBrowser.Common.Plugins
|
|||
/// </summary>
|
||||
public PluginManifest Manifest { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets a value indicating the assembly of the plugin.
|
||||
/// </summary>
|
||||
public Assembly? Assembly { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Compare two <see cref="LocalPlugin"/>.
|
||||
/// </summary>
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
#nullable enable
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text.Json.Serialization;
|
||||
|
||||
namespace MediaBrowser.Model.Updates
|
||||
{
|
||||
|
@ -27,30 +28,35 @@ namespace MediaBrowser.Model.Updates
|
|||
/// Gets or sets the name.
|
||||
/// </summary>
|
||||
/// <value>The name.</value>
|
||||
[JsonPropertyName("name")]
|
||||
public string Name { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets a long description of the plugin containing features or helpful explanations.
|
||||
/// </summary>
|
||||
/// <value>The description.</value>
|
||||
/// [JsonPropertyName("description")]
|
||||
public string Description { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets a short overview of what the plugin does.
|
||||
/// </summary>
|
||||
/// <value>The overview.</value>
|
||||
[JsonPropertyName("overview")]
|
||||
public string Overview { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the owner.
|
||||
/// </summary>
|
||||
/// <value>The owner.</value>
|
||||
[JsonPropertyName("owner")]
|
||||
public string Owner { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the category.
|
||||
/// </summary>
|
||||
/// <value>The category.</value>
|
||||
[JsonPropertyName("category")]
|
||||
public string Category { get; set; }
|
||||
|
||||
/// <summary>
|
||||
|
@ -58,6 +64,7 @@ namespace MediaBrowser.Model.Updates
|
|||
/// This is used to identify the proper item for automatic updates.
|
||||
/// </summary>
|
||||
/// <value>The name.</value>
|
||||
[JsonPropertyName("guid")]
|
||||
#pragma warning disable CA1720 // Identifier contains type name
|
||||
public string Guid { get; set; }
|
||||
#pragma warning restore CA1720 // Identifier contains type name
|
||||
|
@ -66,6 +73,7 @@ namespace MediaBrowser.Model.Updates
|
|||
/// Gets or sets the versions.
|
||||
/// </summary>
|
||||
/// <value>The versions.</value>
|
||||
[JsonPropertyName("versions")]
|
||||
#pragma warning disable CA2227 // Collection properties should be read only
|
||||
public IList<VersionInfo> Versions { get; set; }
|
||||
#pragma warning restore CA2227 // Collection properties should be read only
|
||||
|
@ -73,6 +81,7 @@ namespace MediaBrowser.Model.Updates
|
|||
/// <summary>
|
||||
/// Gets or sets the image url for the package.
|
||||
/// </summary>
|
||||
[JsonPropertyName("imageUrl")]
|
||||
public string? ImageUrl { get; set; }
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user