mirror of
https://github.com/jellyfin/jellyfin.git
synced 2024-09-07 03:48:06 +02:00
Merge branch 'master' of https://github.com/MediaBrowser/MediaBrowser
This commit is contained in:
commit
219e0ef19b
12 changed files with 126 additions and 17 deletions
|
@ -46,6 +46,14 @@ namespace MediaBrowser.Api
|
||||||
[ApiMember(Name = "Id", Description = "Session Id", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "POST")]
|
[ApiMember(Name = "Id", Description = "Session Id", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "POST")]
|
||||||
public Guid Id { get; set; }
|
public Guid Id { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets or sets the UserId.
|
||||||
|
/// </summary>
|
||||||
|
/// <value>The id.</value>
|
||||||
|
[ApiMember(Name = "UserId", Description = "The controlling User Id", IsRequired = false, DataType = "string", ParameterType = "path", Verb = "POST")]
|
||||||
|
public Guid UserId { get; set; }
|
||||||
|
//TODO IsRequired = false shall be changed to true once the clients has been updated and the new ApiClient is in use
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Artist, Genre, Studio, Person, or any kind of BaseItem
|
/// Artist, Genre, Studio, Person, or any kind of BaseItem
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -88,6 +96,14 @@ namespace MediaBrowser.Api
|
||||||
[ApiMember(Name = "Id", Description = "Session Id", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "POST")]
|
[ApiMember(Name = "Id", Description = "Session Id", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "POST")]
|
||||||
public Guid Id { get; set; }
|
public Guid Id { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets or sets the UserId.
|
||||||
|
/// </summary>
|
||||||
|
/// <value>The id.</value>
|
||||||
|
[ApiMember(Name = "UserId", Description = "The controlling User Id", IsRequired = false, DataType = "string", ParameterType = "path", Verb = "POST")]
|
||||||
|
public Guid UserId { get; set; }
|
||||||
|
//TODO IsRequired = false shall be changed to true once the clients has been updated and the new ApiClient is in use
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Artist, Genre, Studio, Person, or any kind of BaseItem
|
/// Artist, Genre, Studio, Person, or any kind of BaseItem
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -121,6 +137,14 @@ namespace MediaBrowser.Api
|
||||||
[ApiMember(Name = "Id", Description = "Session Id", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "POST")]
|
[ApiMember(Name = "Id", Description = "Session Id", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "POST")]
|
||||||
public Guid Id { get; set; }
|
public Guid Id { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets or sets the UserId.
|
||||||
|
/// </summary>
|
||||||
|
/// <value>The id.</value>
|
||||||
|
[ApiMember(Name = "UserId", Description = "The controlling User Id", IsRequired = false, DataType = "string", ParameterType = "path", Verb = "POST")]
|
||||||
|
public Guid UserId { get; set; }
|
||||||
|
//TODO IsRequired = false shall be changed to true once the clients has been updated and the new ApiClient is in use
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets the position to seek to
|
/// Gets or sets the position to seek to
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -146,6 +170,14 @@ namespace MediaBrowser.Api
|
||||||
[ApiMember(Name = "Id", Description = "Session Id", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "POST")]
|
[ApiMember(Name = "Id", Description = "Session Id", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "POST")]
|
||||||
public Guid Id { get; set; }
|
public Guid Id { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets or sets the UserId.
|
||||||
|
/// </summary>
|
||||||
|
/// <value>The id.</value>
|
||||||
|
[ApiMember(Name = "UserId", Description = "The controlling User Id", IsRequired = false, DataType = "string", ParameterType = "path", Verb = "POST")]
|
||||||
|
public Guid UserId { get; set; }
|
||||||
|
//TODO IsRequired = false shall be changed to true once the clients has been updated and the new ApiClient is in use
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets the command.
|
/// Gets or sets the command.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -165,6 +197,14 @@ namespace MediaBrowser.Api
|
||||||
[ApiMember(Name = "Id", Description = "Session Id", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "POST")]
|
[ApiMember(Name = "Id", Description = "Session Id", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "POST")]
|
||||||
public Guid Id { get; set; }
|
public Guid Id { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets or sets the UserId.
|
||||||
|
/// </summary>
|
||||||
|
/// <value>The id.</value>
|
||||||
|
[ApiMember(Name = "UserId", Description = "The controlling User Id", IsRequired = false, DataType = "string", ParameterType = "path", Verb = "POST")]
|
||||||
|
public Guid UserId { get; set; }
|
||||||
|
//TODO IsRequired = false shall be changed to true once the clients has been updated and the new ApiClient is in use
|
||||||
|
|
||||||
[ApiMember(Name = "Text", Description = "The message text.", IsRequired = true, DataType = "string", ParameterType = "query", Verb = "POST")]
|
[ApiMember(Name = "Text", Description = "The message text.", IsRequired = true, DataType = "string", ParameterType = "query", Verb = "POST")]
|
||||||
public string Text { get; set; }
|
public string Text { get; set; }
|
||||||
|
|
||||||
|
@ -270,9 +310,10 @@ namespace MediaBrowser.Api
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Post(SendPlaystateCommand request)
|
public void Post(SendPlaystateCommand request)
|
||||||
{
|
{
|
||||||
var command = new PlaystateRequest
|
var command = new PlaystateRequest
|
||||||
{
|
{
|
||||||
|
UserId = request.UserId,
|
||||||
Command = request.Command,
|
Command = request.Command,
|
||||||
SeekPositionTicks = request.SeekPositionTicks
|
SeekPositionTicks = request.SeekPositionTicks
|
||||||
};
|
};
|
||||||
|
@ -290,6 +331,7 @@ namespace MediaBrowser.Api
|
||||||
{
|
{
|
||||||
var command = new BrowseRequest
|
var command = new BrowseRequest
|
||||||
{
|
{
|
||||||
|
UserId = request.UserId,
|
||||||
Context = request.Context,
|
Context = request.Context,
|
||||||
ItemId = request.ItemId,
|
ItemId = request.ItemId,
|
||||||
ItemName = request.ItemName,
|
ItemName = request.ItemName,
|
||||||
|
@ -321,6 +363,7 @@ namespace MediaBrowser.Api
|
||||||
var command = new MessageCommand
|
var command = new MessageCommand
|
||||||
{
|
{
|
||||||
Header = string.IsNullOrEmpty(request.Header) ? "Message from Server" : request.Header,
|
Header = string.IsNullOrEmpty(request.Header) ? "Message from Server" : request.Header,
|
||||||
|
UserId = request.UserId,
|
||||||
TimeoutMs = request.TimeoutMs,
|
TimeoutMs = request.TimeoutMs,
|
||||||
Text = request.Text
|
Text = request.Text
|
||||||
};
|
};
|
||||||
|
@ -339,7 +382,7 @@ namespace MediaBrowser.Api
|
||||||
var command = new PlayRequest
|
var command = new PlayRequest
|
||||||
{
|
{
|
||||||
ItemIds = request.ItemIds.Split(',').ToArray(),
|
ItemIds = request.ItemIds.Split(',').ToArray(),
|
||||||
|
UserId = request.UserId,
|
||||||
PlayCommand = request.PlayCommand,
|
PlayCommand = request.PlayCommand,
|
||||||
StartPositionTicks = request.StartPositionTicks
|
StartPositionTicks = request.StartPositionTicks
|
||||||
};
|
};
|
||||||
|
|
|
@ -53,7 +53,7 @@
|
||||||
</Compile>
|
</Compile>
|
||||||
<Compile Include="PlayTo\Argument.cs" />
|
<Compile Include="PlayTo\Argument.cs" />
|
||||||
<Compile Include="PlayTo\Configuration\DlnaProfile.cs" />
|
<Compile Include="PlayTo\Configuration\DlnaProfile.cs" />
|
||||||
<Compile Include="PlayTo\Configuration\PluginConfiguration.cs" />
|
<Compile Include="PlayTo\Configuration\PlayToConfiguration.cs" />
|
||||||
<Compile Include="PlayTo\Configuration\TranscodeSetting.cs" />
|
<Compile Include="PlayTo\Configuration\TranscodeSetting.cs" />
|
||||||
<Compile Include="PlayTo\CurrentIdEventArgs.cs" />
|
<Compile Include="PlayTo\CurrentIdEventArgs.cs" />
|
||||||
<Compile Include="PlayTo\Device.cs">
|
<Compile Include="PlayTo\Device.cs">
|
||||||
|
|
|
@ -29,7 +29,12 @@
|
||||||
FriendlyName = "^TV$",
|
FriendlyName = "^TV$",
|
||||||
ModelNumber = @"1\.0",
|
ModelNumber = @"1\.0",
|
||||||
ModelName = "Samsung DTV DMR",
|
ModelName = "Samsung DTV DMR",
|
||||||
TranscodeSettings = TranscodeSettings.GetDefaultTranscodingSettings()
|
TranscodeSettings = new[]
|
||||||
|
{
|
||||||
|
new TranscodeSettings {Container = "mkv", MimeType = "x-mkv"},
|
||||||
|
new TranscodeSettings {Container = "flac", TargetContainer = "mp3"},
|
||||||
|
new TranscodeSettings {Container = "m4a", TargetContainer = "mp3"}
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
var profile1 = new DlnaProfile
|
var profile1 = new DlnaProfile
|
||||||
|
@ -38,7 +43,12 @@
|
||||||
ClientType = "DLNA",
|
ClientType = "DLNA",
|
||||||
FriendlyName = @"(^\[TV\][A-Z]{2}\d{2}(E|F)[A-Z]?\d{3,4}.*)|^\[TV\] Samsung",
|
FriendlyName = @"(^\[TV\][A-Z]{2}\d{2}(E|F)[A-Z]?\d{3,4}.*)|^\[TV\] Samsung",
|
||||||
ModelNumber = @"(1\.0)|(AllShare1\.0)",
|
ModelNumber = @"(1\.0)|(AllShare1\.0)",
|
||||||
TranscodeSettings = TranscodeSettings.GetDefaultTranscodingSettings()
|
TranscodeSettings = new[]
|
||||||
|
{
|
||||||
|
new TranscodeSettings {Container = "mkv", MimeType = "x-mkv"},
|
||||||
|
new TranscodeSettings {Container = "flac", TargetContainer = "mp3"},
|
||||||
|
new TranscodeSettings {Container = "m4a", TargetContainer = "mp3"}
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
var profile2 = new DlnaProfile
|
var profile2 = new DlnaProfile
|
||||||
|
@ -47,7 +57,12 @@
|
||||||
ClientType = "DLNA",
|
ClientType = "DLNA",
|
||||||
FriendlyName = @"(^TV-\d{2}C\d{3}.*)|(^\[TV\][A-Z]{2}\d{2}(D)[A-Z]?\d{3,4}.*)|^\[TV\] Samsung",
|
FriendlyName = @"(^TV-\d{2}C\d{3}.*)|(^\[TV\][A-Z]{2}\d{2}(D)[A-Z]?\d{3,4}.*)|^\[TV\] Samsung",
|
||||||
ModelNumber = @"(1\.0)|(AllShare1\.0)",
|
ModelNumber = @"(1\.0)|(AllShare1\.0)",
|
||||||
TranscodeSettings = TranscodeSettings.GetDefaultTranscodingSettings()
|
TranscodeSettings = new[]
|
||||||
|
{
|
||||||
|
new TranscodeSettings {Container = "mkv", MimeType = "x-mkv"},
|
||||||
|
new TranscodeSettings {Container = "flac", TargetContainer = "mp3"},
|
||||||
|
new TranscodeSettings {Container = "m4a", TargetContainer = "mp3"}
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
var profile3 = new DlnaProfile
|
var profile3 = new DlnaProfile
|
|
@ -20,7 +20,13 @@ namespace MediaBrowser.Dlna.PlayTo.Configuration
|
||||||
/// The target container.
|
/// The target container.
|
||||||
/// </value>
|
/// </value>
|
||||||
public string TargetContainer { get; set; }
|
public string TargetContainer { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets or sets the Mimetype to enforce
|
||||||
|
/// </summary>
|
||||||
|
/// <value>
|
||||||
|
/// The MimeType.
|
||||||
|
/// </value>
|
||||||
public string MimeType { get; set; }
|
public string MimeType { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
|
@ -16,6 +16,8 @@ namespace MediaBrowser.Dlna.PlayTo
|
||||||
|
|
||||||
public string FileFormat { get; set; }
|
public string FileFormat { get; set; }
|
||||||
|
|
||||||
|
public string MimeType { get; set; }
|
||||||
|
|
||||||
public int PlayState { get; set; }
|
public int PlayState { get; set; }
|
||||||
|
|
||||||
public string StreamUrl { get; set; }
|
public string StreamUrl { get; set; }
|
||||||
|
@ -51,10 +53,21 @@ namespace MediaBrowser.Dlna.PlayTo
|
||||||
{
|
{
|
||||||
if (string.IsNullOrWhiteSpace(transcodeSetting.Container))
|
if (string.IsNullOrWhiteSpace(transcodeSetting.Container))
|
||||||
continue;
|
continue;
|
||||||
if (path.EndsWith(transcodeSetting.Container))
|
if (path.EndsWith(transcodeSetting.Container) && !string.IsNullOrWhiteSpace(transcodeSetting.TargetContainer))
|
||||||
{
|
{
|
||||||
playlistItem.Transcode = true;
|
playlistItem.Transcode = true;
|
||||||
playlistItem.FileFormat = transcodeSetting.TargetContainer;
|
playlistItem.FileFormat = transcodeSetting.TargetContainer;
|
||||||
|
|
||||||
|
if (string.IsNullOrWhiteSpace(transcodeSetting.MimeType))
|
||||||
|
playlistItem.MimeType = transcodeSetting.MimeType;
|
||||||
|
|
||||||
|
return playlistItem;
|
||||||
|
}
|
||||||
|
if (path.EndsWith(transcodeSetting.Container) && !string.IsNullOrWhiteSpace(transcodeSetting.MimeType))
|
||||||
|
{
|
||||||
|
playlistItem.Transcode = false;
|
||||||
|
playlistItem.FileFormat = transcodeSetting.Container;
|
||||||
|
playlistItem.MimeType = transcodeSetting.MimeType;
|
||||||
return playlistItem;
|
return playlistItem;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -96,9 +96,12 @@ namespace MediaBrowser.Dlna.PlayTo
|
||||||
/// <returns>The url to send to the device</returns>
|
/// <returns>The url to send to the device</returns>
|
||||||
internal static string GetVideoUrl(DeviceProperties deviceProperties, PlaylistItem item, List<MediaStream> streams, string serverAddress)
|
internal static string GetVideoUrl(DeviceProperties deviceProperties, PlaylistItem item, List<MediaStream> streams, string serverAddress)
|
||||||
{
|
{
|
||||||
|
string dlnaCommand = string.Empty;
|
||||||
if (!item.Transcode)
|
if (!item.Transcode)
|
||||||
return string.Format("{0}/Videos/{1}/stream.{2}?Static=True", serverAddress, item.ItemId, item.FileFormat);
|
{
|
||||||
|
dlnaCommand = BuildDlnaUrl(deviceProperties.UUID, !item.Transcode, null, null, null, null, null, null, null, null, null, null, item.MimeType);
|
||||||
|
return string.Format("{0}/Videos/{1}/stream.{2}?{3}", serverAddress, item.ItemId, item.FileFormat, dlnaCommand);
|
||||||
|
}
|
||||||
var videostream = streams.Where(m => m.Type == MediaStreamType.Video).OrderBy(m => m.IsDefault).FirstOrDefault();
|
var videostream = streams.Where(m => m.Type == MediaStreamType.Video).OrderBy(m => m.IsDefault).FirstOrDefault();
|
||||||
var audiostream = streams.Where(m => m.Type == MediaStreamType.Audio).OrderBy(m => m.IsDefault).FirstOrDefault();
|
var audiostream = streams.Where(m => m.Type == MediaStreamType.Audio).OrderBy(m => m.IsDefault).FirstOrDefault();
|
||||||
|
|
||||||
|
@ -117,7 +120,7 @@ namespace MediaBrowser.Dlna.PlayTo
|
||||||
audioChannels = 2;
|
audioChannels = 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
string dlnaCommand = BuildDlnaUrl(deviceProperties.UUID, videoCodec, audioCodec, null, null, videoBitrate, audioChannels, audioBitrate, item.StartPositionTicks, "baseline", "3");
|
dlnaCommand = BuildDlnaUrl(deviceProperties.UUID, !item.Transcode, videoCodec, audioCodec, null, null, videoBitrate, audioChannels, audioBitrate, item.StartPositionTicks, "baseline", "3", item.MimeType);
|
||||||
return string.Format("{0}/Videos/{1}/stream.{2}?{3}", serverAddress, item.ItemId, item.FileFormat, dlnaCommand);
|
return string.Format("{0}/Videos/{1}/stream.{2}?{3}", serverAddress, item.ItemId, item.FileFormat, dlnaCommand);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -162,12 +165,12 @@ namespace MediaBrowser.Dlna.PlayTo
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Builds the dlna URL.
|
/// Builds the dlna URL.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
private static string BuildDlnaUrl(string deviceID, VideoCodecs? videoCodec, AudioCodecs? audioCodec, int? subtitleIndex, int? audiostreamIndex, int? videoBitrate, int? audiochannels, int? audioBitrate, long? startPositionTicks, string profile, string videoLevel)
|
private static string BuildDlnaUrl(string deviceID, bool isStatic, VideoCodecs? videoCodec, AudioCodecs? audioCodec, int? subtitleIndex, int? audiostreamIndex, int? videoBitrate, int? audiochannels, int? audioBitrate, long? startPositionTicks, string profile, string videoLevel, string mimeType)
|
||||||
{
|
{
|
||||||
var usCulture = new CultureInfo("en-US");
|
var usCulture = new CultureInfo("en-US");
|
||||||
|
|
||||||
var dlnaparam = string.Format("Params={0};", deviceID);
|
var dlnaparam = string.Format("Params={0};", deviceID);
|
||||||
|
dlnaparam += isStatic ? "true;" : "false;";
|
||||||
dlnaparam += videoCodec.HasValue ? videoCodec.Value + ";" : ";";
|
dlnaparam += videoCodec.HasValue ? videoCodec.Value + ";" : ";";
|
||||||
dlnaparam += audioCodec.HasValue ? audioCodec.Value + ";" : ";";
|
dlnaparam += audioCodec.HasValue ? audioCodec.Value + ";" : ";";
|
||||||
dlnaparam += audiostreamIndex.HasValue ? audiostreamIndex.Value.ToString(usCulture) + ";" : ";";
|
dlnaparam += audiostreamIndex.HasValue ? audiostreamIndex.Value.ToString(usCulture) + ";" : ";";
|
||||||
|
@ -178,6 +181,7 @@ namespace MediaBrowser.Dlna.PlayTo
|
||||||
dlnaparam += startPositionTicks.HasValue ? startPositionTicks.Value.ToString(usCulture) + ";" : ";";
|
dlnaparam += startPositionTicks.HasValue ? startPositionTicks.Value.ToString(usCulture) + ";" : ";";
|
||||||
dlnaparam += profile + ";";
|
dlnaparam += profile + ";";
|
||||||
dlnaparam += videoLevel + ";";
|
dlnaparam += videoLevel + ";";
|
||||||
|
dlnaparam += mimeType + ";";
|
||||||
|
|
||||||
return dlnaparam;
|
return dlnaparam;
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,12 +11,17 @@
|
||||||
<RootNamespace>MediaBrowser.Model</RootNamespace>
|
<RootNamespace>MediaBrowser.Model</RootNamespace>
|
||||||
<AssemblyName>MediaBrowser.Model</AssemblyName>
|
<AssemblyName>MediaBrowser.Model</AssemblyName>
|
||||||
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
|
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
|
||||||
<TargetFrameworkProfile>Profile104</TargetFrameworkProfile>
|
<TargetFrameworkProfile>Profile158</TargetFrameworkProfile>
|
||||||
<FileAlignment>512</FileAlignment>
|
<FileAlignment>512</FileAlignment>
|
||||||
<ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
|
<ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
|
||||||
<SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\</SolutionDir>
|
<SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\</SolutionDir>
|
||||||
<RestorePackages>true</RestorePackages>
|
<RestorePackages>true</RestorePackages>
|
||||||
<FodyPath>..\packages\Fody.1.19.1.0</FodyPath>
|
<FodyPath>..\packages\Fody.1.19.1.0</FodyPath>
|
||||||
|
<FileUpgradeFlags>
|
||||||
|
</FileUpgradeFlags>
|
||||||
|
<UpgradeBackupLocation>
|
||||||
|
</UpgradeBackupLocation>
|
||||||
|
<OldToolsVersion>4.0</OldToolsVersion>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||||
<DebugSymbols>true</DebugSymbols>
|
<DebugSymbols>true</DebugSymbols>
|
||||||
|
|
|
@ -572,17 +572,18 @@ namespace MediaBrowser.Model.ApiClient
|
||||||
/// Instructs antoher client to browse to a library item.
|
/// Instructs antoher client to browse to a library item.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="sessionId">The session id.</param>
|
/// <param name="sessionId">The session id.</param>
|
||||||
|
/// <param name="userId">The controlling user id.</param>
|
||||||
/// <param name="itemId">The id of the item to browse to.</param>
|
/// <param name="itemId">The id of the item to browse to.</param>
|
||||||
/// <param name="itemName">The name of the item to browse to.</param>
|
/// <param name="itemName">The name of the item to browse to.</param>
|
||||||
/// <param name="itemType">The type of the item to browse to.</param>
|
/// <param name="itemType">The type of the item to browse to.</param>
|
||||||
/// <param name="context">Optional ui context (movies, music, tv, games, etc). The client is free to ignore this.</param>
|
/// <param name="context">Optional ui context (movies, music, tv, games, etc). The client is free to ignore this.</param>
|
||||||
/// <returns>Task.</returns>
|
/// <returns>Task.</returns>
|
||||||
Task SendBrowseCommandAsync(string sessionId, string itemId, string itemName, string itemType, string context);
|
Task SendBrowseCommandAsync(string sessionId, string userId, string itemId, string itemName, string itemType, string context);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Sends the playstate command async.
|
/// Sends the playstate command async.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="sessionId">The session id.</param>
|
/// <param name="sessionId">The session id.</param>
|
||||||
/// <param name="request">The request.</param>
|
/// <param name="request">The request.</param>
|
||||||
/// <returns>Task.</returns>
|
/// <returns>Task.</returns>
|
||||||
Task SendPlaystateCommandAsync(string sessionId, PlaystateRequest request);
|
Task SendPlaystateCommandAsync(string sessionId, PlaystateRequest request);
|
||||||
|
|
|
@ -1,4 +1,6 @@
|
||||||
|
|
||||||
|
using System;
|
||||||
|
|
||||||
namespace MediaBrowser.Model.Session
|
namespace MediaBrowser.Model.Session
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -12,6 +14,8 @@ namespace MediaBrowser.Model.Session
|
||||||
/// <value>The type of the item.</value>
|
/// <value>The type of the item.</value>
|
||||||
public string ItemType { get; set; }
|
public string ItemType { get; set; }
|
||||||
|
|
||||||
|
public Guid UserId { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets the item id.
|
/// Gets or sets the item id.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
|
@ -1,8 +1,11 @@
|
||||||
|
|
||||||
|
using System;
|
||||||
namespace MediaBrowser.Model.Session
|
namespace MediaBrowser.Model.Session
|
||||||
{
|
{
|
||||||
public class MessageCommand
|
public class MessageCommand
|
||||||
{
|
{
|
||||||
|
public Guid UserId { get; set; }
|
||||||
|
|
||||||
public string Header { get; set; }
|
public string Header { get; set; }
|
||||||
|
|
||||||
public string Text { get; set; }
|
public string Text { get; set; }
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
|
|
||||||
|
using System;
|
||||||
namespace MediaBrowser.Model.Session
|
namespace MediaBrowser.Model.Session
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -6,6 +7,11 @@ namespace MediaBrowser.Model.Session
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public class PlayRequest
|
public class PlayRequest
|
||||||
{
|
{
|
||||||
|
public PlayRequest()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets the item ids.
|
/// Gets or sets the item ids.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -23,6 +29,12 @@ namespace MediaBrowser.Model.Session
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <value>The play command.</value>
|
/// <value>The play command.</value>
|
||||||
public PlayCommand PlayCommand { get; set; }
|
public PlayCommand PlayCommand { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets or sets the play command.
|
||||||
|
/// </summary>
|
||||||
|
/// <value>The play command.</value>
|
||||||
|
public Guid UserId { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
|
|
||||||
|
using System;
|
||||||
namespace MediaBrowser.Model.Session
|
namespace MediaBrowser.Model.Session
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -34,6 +35,8 @@ namespace MediaBrowser.Model.Session
|
||||||
|
|
||||||
public class PlaystateRequest
|
public class PlaystateRequest
|
||||||
{
|
{
|
||||||
|
public Guid UserId { get; set; }
|
||||||
|
|
||||||
public PlaystateCommand Command { get; set; }
|
public PlaystateCommand Command { get; set; }
|
||||||
|
|
||||||
public long? SeekPositionTicks { get; set; }
|
public long? SeekPositionTicks { get; set; }
|
||||||
|
|
Loading…
Reference in a new issue