diff --git a/Jellyfin.Api/Controllers/DevicesController.cs b/Jellyfin.Api/Controllers/DevicesController.cs
index cebb51ccfe..02cf1bc446 100644
--- a/Jellyfin.Api/Controllers/DevicesController.cs
+++ b/Jellyfin.Api/Controllers/DevicesController.cs
@@ -1,6 +1,7 @@
#nullable enable
using System;
+using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
@@ -46,11 +47,12 @@ namespace Jellyfin.Api.Controllers
///
/// /// Gets or sets a value indicating whether [supports synchronize].
/// /// Gets or sets the user identifier.
- /// Device Infos.
+ /// Devices retrieved.
+ /// An containing the list of devices.
[HttpGet]
[Authenticated(Roles = "Admin")]
[ProducesResponseType(StatusCodes.Status200OK)]
- public ActionResult GetDevices([FromQuery] bool? supportsSync, [FromQuery] Guid? userId)
+ public ActionResult> GetDevices([FromQuery] bool? supportsSync, [FromQuery] Guid? userId)
{
var deviceQuery = new DeviceQuery { SupportsSync = supportsSync, UserId = userId ?? Guid.Empty };
var devices = _deviceManager.GetDevices(deviceQuery);
@@ -61,7 +63,9 @@ namespace Jellyfin.Api.Controllers
/// Get info for a device.
///
/// Device Id.
- /// Device Info.
+ /// Device info retrieved.
+ /// Device not found.
+ /// An containing the device info on success, or a if the device could not be found.
[HttpGet("Info")]
[Authenticated(Roles = "Admin")]
[ProducesResponseType(StatusCodes.Status200OK)]
@@ -81,7 +85,9 @@ namespace Jellyfin.Api.Controllers
/// Get options for a device.
///
/// Device Id.
- /// Device Info.
+ /// Device options retrieved.
+ /// Device not found.
+ /// An containing the device info on success, or a if the device could not be found.
[HttpGet("Options")]
[Authenticated(Roles = "Admin")]
[ProducesResponseType(StatusCodes.Status200OK)]
@@ -102,7 +108,9 @@ namespace Jellyfin.Api.Controllers
///
/// Device Id.
/// Device Options.
- /// Status.
+ /// Device options updated.
+ /// Device not found.
+ /// An on success, or a if the device could not be found.
[HttpPost("Options")]
[Authenticated(Roles = "Admin")]
[ProducesResponseType(StatusCodes.Status200OK)]
@@ -125,11 +133,19 @@ namespace Jellyfin.Api.Controllers
/// Deletes a device.
///
/// Device Id.
- /// Status.
+ /// Device deleted.
+ /// Device not found.
+ /// An on success, or a if the device could not be found.
[HttpDelete]
[ProducesResponseType(StatusCodes.Status200OK)]
public ActionResult DeleteDevice([FromQuery, BindRequired] string id)
{
+ var existingDevice = _deviceManager.GetDevice(id);
+ if (existingDevice == null)
+ {
+ return NotFound();
+ }
+
var sessions = _authenticationRepository.Get(new AuthenticationInfoQuery { DeviceId = id }).Items;
foreach (var session in sessions)
@@ -144,11 +160,19 @@ namespace Jellyfin.Api.Controllers
/// Gets camera upload history for a device.
///
/// Device Id.
- /// Content Upload History.
+ /// Device upload history retrieved.
+ /// Device not found.
+ /// An containing the device upload history on success, or a if the device could not be found.
[HttpGet("CameraUploads")]
[ProducesResponseType(StatusCodes.Status200OK)]
public ActionResult GetCameraUploads([FromQuery, BindRequired] string id)
{
+ var existingDevice = _deviceManager.GetDevice(id);
+ if (existingDevice == null)
+ {
+ return NotFound();
+ }
+
var uploadHistory = _deviceManager.GetCameraUploadHistory(id);
return uploadHistory;
}
@@ -160,7 +184,14 @@ namespace Jellyfin.Api.Controllers
/// Album.
/// Name.
/// Id.
- /// Status.
+ /// Contents uploaded.
+ /// No uploaded contents.
+ /// Device not found.
+ ///
+ /// An on success,
+ /// or a if the device could not be found
+ /// or a if the upload contains no files.
+ ///
[HttpPost("CameraUploads")]
[ProducesResponseType(StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status400BadRequest)]
@@ -170,6 +201,12 @@ namespace Jellyfin.Api.Controllers
[FromQuery, BindRequired] string name,
[FromQuery, BindRequired] string id)
{
+ var existingDevice = _deviceManager.GetDevice(id);
+ if (existingDevice == null)
+ {
+ return NotFound();
+ }
+
Stream fileStream;
string contentType;