diff options
| author | Ethan Pippin <ethanpippin2343@gmail.com> | 2026-05-21 13:30:24 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-05-21 19:30:24 +0200 |
| commit | 40485aa2f67c903baab2cdde939f4ee13c40b569 (patch) | |
| tree | db9b67ddb53ef18361d7d6d4723106d439cfe2ac | |
| parent | 49cc2f78990d2b78c0dabea327ddd79c8f90e2ef (diff) | |
Have device deletion take list of ids (#12834)
* add delete multiple devices via id
* make atomic
* use Add
* Update Jellyfin.Api/Controllers/DevicesController.cs
Co-authored-by: JPVenson <ger-delta-07@hotmail.de>
* remove model binding, use functional device selection
* use singular id
* use BadRequest instead
---------
Co-authored-by: JPVenson <ger-delta-07@hotmail.de>
| -rw-r--r-- | Jellyfin.Api/Controllers/DevicesController.cs | 33 |
1 files changed, 20 insertions, 13 deletions
diff --git a/Jellyfin.Api/Controllers/DevicesController.cs b/Jellyfin.Api/Controllers/DevicesController.cs index eadb8c9855..2bbfeb40b8 100644 --- a/Jellyfin.Api/Controllers/DevicesController.cs +++ b/Jellyfin.Api/Controllers/DevicesController.cs @@ -1,7 +1,11 @@ using System; +using System.Collections.Generic; using System.ComponentModel.DataAnnotations; +using System.Linq; using System.Threading.Tasks; +using Jellyfin.Api.Attributes; using Jellyfin.Api.Helpers; +using Jellyfin.Api.ModelBinders; using Jellyfin.Data.Dtos; using Jellyfin.Data.Queries; using MediaBrowser.Common.Api; @@ -112,28 +116,31 @@ public class DevicesController : BaseJellyfinApiController } /// <summary> - /// Deletes a device. + /// Deletes devices. /// </summary> - /// <param name="id">Device Id.</param> + /// <param name="id">Device Ids.</param> /// <response code="204">Device deleted.</response> - /// <response code="404">Device not found.</response> - /// <returns>A <see cref="NoContentResult"/> on success, or a <see cref="NotFoundResult"/> if the device could not be found.</returns> + /// <response code="400">A requested device is invalid.</response> + /// <returns>A <see cref="NoContentResult"/> on success, or a <see cref="BadRequestResult"/> if a requested device is invalid.</returns> [HttpDelete] [ProducesResponseType(StatusCodes.Status204NoContent)] - [ProducesResponseType(StatusCodes.Status404NotFound)] - public async Task<ActionResult> DeleteDevice([FromQuery, Required] string id) + [ProducesResponseType(StatusCodes.Status400BadRequest)] + public async Task<ActionResult> DeleteDevice([FromQuery] string[] id) { - var existingDevice = _deviceManager.GetDevice(id); - if (existingDevice is null) + var devices = id.Select(_deviceManager.GetDevice).ToArray(); + if (devices.Any(f => f is null)) { - return NotFound(); + return BadRequest(); } - var sessions = _deviceManager.GetDevices(new DeviceQuery { DeviceId = id }); - - foreach (var session in sessions.Items) + foreach (var device in devices) { - await _sessionManager.Logout(session).ConfigureAwait(false); + var sessions = _deviceManager.GetDevices(new DeviceQuery { DeviceId = device!.Id }); + + foreach (var session in sessions.Items) + { + await _sessionManager.Logout(session).ConfigureAwait(false); + } } return NoContent(); |
