Merge pull request #4537 from crobibero/session-caps-full
Convert ClientCapabilities to a Dto with JsonConverters
This commit is contained in:
commit
fab03942f5
|
@ -6,6 +6,7 @@ using System.Threading;
|
||||||
using Jellyfin.Api.Constants;
|
using Jellyfin.Api.Constants;
|
||||||
using Jellyfin.Api.Helpers;
|
using Jellyfin.Api.Helpers;
|
||||||
using Jellyfin.Api.ModelBinders;
|
using Jellyfin.Api.ModelBinders;
|
||||||
|
using Jellyfin.Api.Models.SessionDtos;
|
||||||
using Jellyfin.Data.Enums;
|
using Jellyfin.Data.Enums;
|
||||||
using MediaBrowser.Controller.Devices;
|
using MediaBrowser.Controller.Devices;
|
||||||
using MediaBrowser.Controller.Library;
|
using MediaBrowser.Controller.Library;
|
||||||
|
@ -412,14 +413,14 @@ namespace Jellyfin.Api.Controllers
|
||||||
[ProducesResponseType(StatusCodes.Status204NoContent)]
|
[ProducesResponseType(StatusCodes.Status204NoContent)]
|
||||||
public ActionResult PostFullCapabilities(
|
public ActionResult PostFullCapabilities(
|
||||||
[FromQuery] string? id,
|
[FromQuery] string? id,
|
||||||
[FromBody, Required] ClientCapabilities capabilities)
|
[FromBody, Required] ClientCapabilitiesDto capabilities)
|
||||||
{
|
{
|
||||||
if (string.IsNullOrWhiteSpace(id))
|
if (string.IsNullOrWhiteSpace(id))
|
||||||
{
|
{
|
||||||
id = RequestHelpers.GetSession(_sessionManager, _authContext, Request).Id;
|
id = RequestHelpers.GetSession(_sessionManager, _authContext, Request).Id;
|
||||||
}
|
}
|
||||||
|
|
||||||
_sessionManager.ReportCapabilities(id, capabilities);
|
_sessionManager.ReportCapabilities(id, capabilities.ToClientCapabilities());
|
||||||
|
|
||||||
return NoContent();
|
return NoContent();
|
||||||
}
|
}
|
||||||
|
|
87
Jellyfin.Api/Models/SessionDtos/ClientCapabilitiesDto.cs
Normal file
87
Jellyfin.Api/Models/SessionDtos/ClientCapabilitiesDto.cs
Normal file
|
@ -0,0 +1,87 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using MediaBrowser.Common.Json.Converters;
|
||||||
|
using MediaBrowser.Model.Dlna;
|
||||||
|
using MediaBrowser.Model.Session;
|
||||||
|
using Newtonsoft.Json;
|
||||||
|
|
||||||
|
namespace Jellyfin.Api.Models.SessionDtos
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Client capabilities dto.
|
||||||
|
/// </summary>
|
||||||
|
public class ClientCapabilitiesDto
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Gets or sets the list of playable media types.
|
||||||
|
/// </summary>
|
||||||
|
public IReadOnlyList<string> PlayableMediaTypes { get; set; } = Array.Empty<string>();
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets or sets the list of supported commands.
|
||||||
|
/// </summary>
|
||||||
|
[JsonConverter(typeof(JsonCommaDelimitedArrayConverterFactory))]
|
||||||
|
public IReadOnlyList<GeneralCommandType> SupportedCommands { get; set; } = Array.Empty<GeneralCommandType>();
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets or sets a value indicating whether session supports media control.
|
||||||
|
/// </summary>
|
||||||
|
public bool SupportsMediaControl { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets or sets a value indicating whether session supports content uploading.
|
||||||
|
/// </summary>
|
||||||
|
public bool SupportsContentUploading { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets or sets the message callback url.
|
||||||
|
/// </summary>
|
||||||
|
public string? MessageCallbackUrl { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets or sets a value indicating whether session supports a persistent identifier.
|
||||||
|
/// </summary>
|
||||||
|
public bool SupportsPersistentIdentifier { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets or sets a value indicating whether session supports sync.
|
||||||
|
/// </summary>
|
||||||
|
public bool SupportsSync { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets or sets the device profile.
|
||||||
|
/// </summary>
|
||||||
|
public DeviceProfile? DeviceProfile { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets or sets the app store url.
|
||||||
|
/// </summary>
|
||||||
|
public string? AppStoreUrl { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets or sets the icon url.
|
||||||
|
/// </summary>
|
||||||
|
public string? IconUrl { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Convert the dto to the full <see cref="ClientCapabilities"/> model.
|
||||||
|
/// </summary>
|
||||||
|
/// <returns>The converted <see cref="ClientCapabilities"/> model.</returns>
|
||||||
|
public ClientCapabilities ToClientCapabilities()
|
||||||
|
{
|
||||||
|
return new ClientCapabilities
|
||||||
|
{
|
||||||
|
PlayableMediaTypes = PlayableMediaTypes,
|
||||||
|
SupportedCommands = SupportedCommands,
|
||||||
|
SupportsMediaControl = SupportsMediaControl,
|
||||||
|
SupportsContentUploading = SupportsContentUploading,
|
||||||
|
MessageCallbackUrl = MessageCallbackUrl,
|
||||||
|
SupportsPersistentIdentifier = SupportsPersistentIdentifier,
|
||||||
|
SupportsSync = SupportsSync,
|
||||||
|
DeviceProfile = DeviceProfile,
|
||||||
|
AppStoreUrl = AppStoreUrl,
|
||||||
|
IconUrl = IconUrl
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,6 +1,7 @@
|
||||||
#pragma warning disable CS1591
|
#pragma warning disable CS1591
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text.Json.Serialization;
|
using System.Text.Json.Serialization;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
|
@ -54,7 +55,7 @@ namespace MediaBrowser.Controller.Session
|
||||||
/// Gets or sets the playable media types.
|
/// Gets or sets the playable media types.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <value>The playable media types.</value>
|
/// <value>The playable media types.</value>
|
||||||
public string[] PlayableMediaTypes
|
public IReadOnlyList<string> PlayableMediaTypes
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
|
@ -230,7 +231,7 @@ namespace MediaBrowser.Controller.Session
|
||||||
/// Gets or sets the supported commands.
|
/// Gets or sets the supported commands.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <value>The supported commands.</value>
|
/// <value>The supported commands.</value>
|
||||||
public GeneralCommandType[] SupportedCommands
|
public IReadOnlyList<GeneralCommandType> SupportedCommands
|
||||||
=> Capabilities == null ? Array.Empty<GeneralCommandType>() : Capabilities.SupportedCommands;
|
=> Capabilities == null ? Array.Empty<GeneralCommandType>() : Capabilities.SupportedCommands;
|
||||||
|
|
||||||
public Tuple<ISessionController, bool> EnsureController<T>(Func<SessionInfo, ISessionController> factory)
|
public Tuple<ISessionController, bool> EnsureController<T>(Func<SessionInfo, ISessionController> factory)
|
||||||
|
|
|
@ -2,15 +2,16 @@
|
||||||
#pragma warning disable CS1591
|
#pragma warning disable CS1591
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
using MediaBrowser.Model.Dlna;
|
using MediaBrowser.Model.Dlna;
|
||||||
|
|
||||||
namespace MediaBrowser.Model.Session
|
namespace MediaBrowser.Model.Session
|
||||||
{
|
{
|
||||||
public class ClientCapabilities
|
public class ClientCapabilities
|
||||||
{
|
{
|
||||||
public string[] PlayableMediaTypes { get; set; }
|
public IReadOnlyList<string> PlayableMediaTypes { get; set; }
|
||||||
|
|
||||||
public GeneralCommandType[] SupportedCommands { get; set; }
|
public IReadOnlyList<GeneralCommandType> SupportedCommands { get; set; }
|
||||||
|
|
||||||
public bool SupportsMediaControl { get; set; }
|
public bool SupportsMediaControl { get; set; }
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user