aboutsummaryrefslogtreecommitdiff
path: root/Jellyfin.Api/Controllers/PluginsController.cs
diff options
context:
space:
mode:
authorGreenback <jimcartlidge@yahoo.co.uk>2020-12-15 09:29:51 +0000
committerGreenback <jimcartlidge@yahoo.co.uk>2020-12-15 09:30:19 +0000
commitdddcfa6dbbca04ed69597ec335007612e2e2b8e8 (patch)
treef8900a3c8229673c3669d7903505ce7b18fc166e /Jellyfin.Api/Controllers/PluginsController.cs
parent41466c430de6ad8b3aa2599af9e6e41f1f63c785 (diff)
Suggested changes.
Diffstat (limited to 'Jellyfin.Api/Controllers/PluginsController.cs')
-rw-r--r--Jellyfin.Api/Controllers/PluginsController.cs60
1 files changed, 31 insertions, 29 deletions
diff --git a/Jellyfin.Api/Controllers/PluginsController.cs b/Jellyfin.Api/Controllers/PluginsController.cs
index 36e37b7ad..c84dc6a13 100644
--- a/Jellyfin.Api/Controllers/PluginsController.cs
+++ b/Jellyfin.Api/Controllers/PluginsController.cs
@@ -167,7 +167,7 @@ namespace Jellyfin.Api.Controllers
}
/// <summary>
- /// Uninstalls a plugin.
+ /// Uninstalls a plugin by version.
/// </summary>
/// <param name="pluginId">Plugin id.</param>
/// <param name="version">Plugin version.</param>
@@ -178,7 +178,7 @@ namespace Jellyfin.Api.Controllers
[Authorize(Policy = Policies.RequiresElevation)]
[ProducesResponseType(StatusCodes.Status204NoContent)]
[ProducesResponseType(StatusCodes.Status404NotFound)]
- public ActionResult UninstallPlugin([FromRoute, Required] Guid pluginId, [FromRoute, Required] Version version)
+ public ActionResult UninstallPluginByVersion([FromRoute, Required] Guid pluginId, [FromRoute, Required] Version version)
{
if (!_pluginManager.TryGetPlugin(pluginId, version, out var plugin))
{
@@ -190,6 +190,35 @@ namespace Jellyfin.Api.Controllers
}
/// <summary>
+ /// Uninstalls a plugin.
+ /// </summary>
+ /// <param name="pluginId">Plugin id.</param>
+ /// <response code="204">Plugin uninstalled.</response>
+ /// <response code="404">Plugin not found.</response>
+ /// <returns>An <see cref="NoContentResult"/> on success, or a <see cref="NotFoundResult"/> if the file could not be found.</returns>
+ [HttpDelete("{pluginId}")]
+ [Authorize(Policy = Policies.RequiresElevation)]
+ [ProducesResponseType(StatusCodes.Status204NoContent)]
+ [ProducesResponseType(StatusCodes.Status404NotFound)]
+ [Obsolete("Please use the UninstallByVersion API.")]
+ public ActionResult UninstallPlugin([FromRoute, Required] Guid pluginId)
+ {
+ // If no version is given, return the current instance.
+ var plugins = _pluginManager.Plugins.Where(p => p.Id.Equals(pluginId));
+
+ // Select the un-instanced one first.
+ var plugin = plugins.FirstOrDefault(p => p.Instance != null);
+ if (plugin == null)
+ {
+ // Then by the status.
+ plugin = plugins.OrderBy(p => p.Manifest.Status).FirstOrDefault();
+ }
+
+ _installationManager.UninstallPlugin(plugin!);
+ return NoContent();
+ }
+
+ /// <summary>
/// Gets plugin configuration.
/// </summary>
/// <param name="pluginId">Plugin id.</param>
@@ -282,33 +311,6 @@ namespace Jellyfin.Api.Controllers
}
/// <summary>
- /// Gets a plugin's status image.
- /// </summary>
- /// <param name="pluginId">Plugin id.</param>
- /// <param name="version">Plugin version.</param>
- /// <response code="200">Plugin image returned.</response>
- /// <returns>Plugin's image.</returns>
- [HttpGet("{pluginId}/{version}/StatusImage")]
- [ProducesResponseType(StatusCodes.Status200OK)]
- [ProducesResponseType(StatusCodes.Status404NotFound)]
- [ProducesImageFile]
- [AllowAnonymous]
- public ActionResult GetPluginStatusImage([FromRoute, Required] Guid pluginId, [FromRoute, Required] Version version)
- {
- if (!_pluginManager.TryGetPlugin(pluginId, version, out var plugin))
- {
- return NotFound();
- }
-
- // Icons from http://www.fatcow.com/free-icons
- var status = plugin!.Manifest.Status;
-
- var type = _pluginManager.GetType();
- var stream = type.Assembly.GetManifestResourceStream($"{type.Namespace}.Plugins.{status}.png");
- return File(stream, "image/png");
- }
-
- /// <summary>
/// Gets a plugin's manifest.
/// </summary>
/// <param name="pluginId">Plugin id.</param>