|
|
|
@ -53,16 +53,9 @@ namespace Jellyfin.Api.Controllers
|
|
|
|
|
[ProducesResponseType(typeof(string), StatusCodes.Status500InternalServerError)]
|
|
|
|
|
public IActionResult GetDevices([FromQuery] bool? supportsSync, [FromQuery] Guid? userId)
|
|
|
|
|
{
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
var deviceQuery = new DeviceQuery { SupportsSync = supportsSync, UserId = userId ?? Guid.Empty };
|
|
|
|
|
var devices = _deviceManager.GetDevices(deviceQuery);
|
|
|
|
|
return Ok(devices);
|
|
|
|
|
}
|
|
|
|
|
catch (Exception e)
|
|
|
|
|
{
|
|
|
|
|
return StatusCode(StatusCodes.Status500InternalServerError, e.Message);
|
|
|
|
|
}
|
|
|
|
|
var deviceQuery = new DeviceQuery { SupportsSync = supportsSync, UserId = userId ?? Guid.Empty };
|
|
|
|
|
var devices = _deviceManager.GetDevices(deviceQuery);
|
|
|
|
|
return Ok(devices);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
@ -77,20 +70,13 @@ namespace Jellyfin.Api.Controllers
|
|
|
|
|
[ProducesResponseType(typeof(string), StatusCodes.Status500InternalServerError)]
|
|
|
|
|
public IActionResult GetDeviceInfo([FromQuery, BindRequired] string id)
|
|
|
|
|
{
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
var deviceInfo = _deviceManager.GetDevice(id);
|
|
|
|
|
if (deviceInfo == null)
|
|
|
|
|
{
|
|
|
|
|
return NotFound();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return Ok(deviceInfo);
|
|
|
|
|
}
|
|
|
|
|
catch (Exception e)
|
|
|
|
|
var deviceInfo = _deviceManager.GetDevice(id);
|
|
|
|
|
if (deviceInfo == null)
|
|
|
|
|
{
|
|
|
|
|
return StatusCode(StatusCodes.Status500InternalServerError, e.Message);
|
|
|
|
|
return NotFound();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return Ok(deviceInfo);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
@ -105,20 +91,13 @@ namespace Jellyfin.Api.Controllers
|
|
|
|
|
[ProducesResponseType(typeof(string), StatusCodes.Status500InternalServerError)]
|
|
|
|
|
public IActionResult GetDeviceOptions([FromQuery, BindRequired] string id)
|
|
|
|
|
{
|
|
|
|
|
try
|
|
|
|
|
var deviceInfo = _deviceManager.GetDeviceOptions(id);
|
|
|
|
|
if (deviceInfo == null)
|
|
|
|
|
{
|
|
|
|
|
var deviceInfo = _deviceManager.GetDeviceOptions(id);
|
|
|
|
|
if (deviceInfo == null)
|
|
|
|
|
{
|
|
|
|
|
return NotFound();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return Ok(deviceInfo);
|
|
|
|
|
}
|
|
|
|
|
catch (Exception e)
|
|
|
|
|
{
|
|
|
|
|
return StatusCode(StatusCodes.Status500InternalServerError, e.Message);
|
|
|
|
|
return NotFound();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return Ok(deviceInfo);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
@ -136,21 +115,14 @@ namespace Jellyfin.Api.Controllers
|
|
|
|
|
[FromQuery, BindRequired] string id,
|
|
|
|
|
[FromBody, BindRequired] DeviceOptions deviceOptions)
|
|
|
|
|
{
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
var existingDeviceOptions = _deviceManager.GetDeviceOptions(id);
|
|
|
|
|
if (existingDeviceOptions == null)
|
|
|
|
|
{
|
|
|
|
|
return NotFound();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
_deviceManager.UpdateDeviceOptions(id, deviceOptions);
|
|
|
|
|
return Ok();
|
|
|
|
|
}
|
|
|
|
|
catch (Exception e)
|
|
|
|
|
var existingDeviceOptions = _deviceManager.GetDeviceOptions(id);
|
|
|
|
|
if (existingDeviceOptions == null)
|
|
|
|
|
{
|
|
|
|
|
return StatusCode(StatusCodes.Status500InternalServerError, e.Message);
|
|
|
|
|
return NotFound();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
_deviceManager.UpdateDeviceOptions(id, deviceOptions);
|
|
|
|
|
return Ok();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
@ -163,21 +135,14 @@ namespace Jellyfin.Api.Controllers
|
|
|
|
|
[ProducesResponseType(typeof(string), StatusCodes.Status500InternalServerError)]
|
|
|
|
|
public IActionResult DeleteDevice([FromQuery, BindRequired] string id)
|
|
|
|
|
{
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
var sessions = _authenticationRepository.Get(new AuthenticationInfoQuery { DeviceId = id }).Items;
|
|
|
|
|
|
|
|
|
|
foreach (var session in sessions)
|
|
|
|
|
{
|
|
|
|
|
_sessionManager.Logout(session);
|
|
|
|
|
}
|
|
|
|
|
var sessions = _authenticationRepository.Get(new AuthenticationInfoQuery { DeviceId = id }).Items;
|
|
|
|
|
|
|
|
|
|
return Ok();
|
|
|
|
|
}
|
|
|
|
|
catch (Exception e)
|
|
|
|
|
foreach (var session in sessions)
|
|
|
|
|
{
|
|
|
|
|
return StatusCode(StatusCodes.Status500InternalServerError, e.Message);
|
|
|
|
|
_sessionManager.Logout(session);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return Ok();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
@ -190,15 +155,8 @@ namespace Jellyfin.Api.Controllers
|
|
|
|
|
[ProducesResponseType(typeof(string), StatusCodes.Status500InternalServerError)]
|
|
|
|
|
public IActionResult GetCameraUploads([FromQuery, BindRequired] string id)
|
|
|
|
|
{
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
var uploadHistory = _deviceManager.GetCameraUploadHistory(id);
|
|
|
|
|
return Ok(uploadHistory);
|
|
|
|
|
}
|
|
|
|
|
catch (Exception e)
|
|
|
|
|
{
|
|
|
|
|
return StatusCode(StatusCodes.Status500InternalServerError, e.Message);
|
|
|
|
|
}
|
|
|
|
|
var uploadHistory = _deviceManager.GetCameraUploadHistory(id);
|
|
|
|
|
return Ok(uploadHistory);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
@ -219,46 +177,33 @@ namespace Jellyfin.Api.Controllers
|
|
|
|
|
[FromQuery, BindRequired] string name,
|
|
|
|
|
[FromQuery, BindRequired] string id)
|
|
|
|
|
{
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
Stream fileStream;
|
|
|
|
|
string contentType;
|
|
|
|
|
Stream fileStream;
|
|
|
|
|
string contentType;
|
|
|
|
|
|
|
|
|
|
if (Request.HasFormContentType)
|
|
|
|
|
if (Request.HasFormContentType)
|
|
|
|
|
{
|
|
|
|
|
if (Request.Form.Files.Any())
|
|
|
|
|
{
|
|
|
|
|
if (Request.Form.Files.Any())
|
|
|
|
|
{
|
|
|
|
|
fileStream = Request.Form.Files[0].OpenReadStream();
|
|
|
|
|
contentType = Request.Form.Files[0].ContentType;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
return BadRequest();
|
|
|
|
|
}
|
|
|
|
|
fileStream = Request.Form.Files[0].OpenReadStream();
|
|
|
|
|
contentType = Request.Form.Files[0].ContentType;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
fileStream = Request.Body;
|
|
|
|
|
contentType = Request.ContentType;
|
|
|
|
|
return BadRequest();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
await _deviceManager.AcceptCameraUpload(
|
|
|
|
|
deviceId,
|
|
|
|
|
fileStream,
|
|
|
|
|
new LocalFileInfo
|
|
|
|
|
{
|
|
|
|
|
MimeType = contentType,
|
|
|
|
|
Album = album,
|
|
|
|
|
Name = name,
|
|
|
|
|
Id = id
|
|
|
|
|
}).ConfigureAwait(false);
|
|
|
|
|
|
|
|
|
|
return Ok();
|
|
|
|
|
}
|
|
|
|
|
catch (Exception e)
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
return StatusCode(StatusCodes.Status500InternalServerError, e.Message);
|
|
|
|
|
fileStream = Request.Body;
|
|
|
|
|
contentType = Request.ContentType;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
await _deviceManager.AcceptCameraUpload(
|
|
|
|
|
deviceId,
|
|
|
|
|
fileStream,
|
|
|
|
|
new LocalFileInfo { MimeType = contentType, Album = album, Name = name, Id = id }).ConfigureAwait(false);
|
|
|
|
|
|
|
|
|
|
return Ok();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|