aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--MediaBrowser.Api/SessionsService.cs47
-rw-r--r--MediaBrowser.Dlna/MediaBrowser.Dlna.csproj2
-rw-r--r--MediaBrowser.Dlna/PlayTo/Configuration/PlayToConfiguration.cs (renamed from MediaBrowser.Dlna/PlayTo/Configuration/PluginConfiguration.cs)21
-rw-r--r--MediaBrowser.Dlna/PlayTo/Configuration/TranscodeSetting.cs8
-rw-r--r--MediaBrowser.Dlna/PlayTo/PlaylistItem.cs15
-rw-r--r--MediaBrowser.Dlna/PlayTo/StreamHelper.cs14
-rw-r--r--MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj7
-rw-r--r--MediaBrowser.Model/ApiClient/IApiClient.cs5
-rw-r--r--MediaBrowser.Model/Session/BrowseRequest.cs4
-rw-r--r--MediaBrowser.Model/Session/MessageCommand.cs5
-rw-r--r--MediaBrowser.Model/Session/PlayRequest.cs12
-rw-r--r--MediaBrowser.Model/Session/PlaystateCommand.cs3
12 files changed, 126 insertions, 17 deletions
diff --git a/MediaBrowser.Api/SessionsService.cs b/MediaBrowser.Api/SessionsService.cs
index f662e3817..562e45525 100644
--- a/MediaBrowser.Api/SessionsService.cs
+++ b/MediaBrowser.Api/SessionsService.cs
@@ -47,6 +47,14 @@ namespace MediaBrowser.Api
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>
/// Artist, Genre, Studio, Person, or any kind of BaseItem
/// </summary>
/// <value>The type of the item.</value>
@@ -89,6 +97,14 @@ namespace MediaBrowser.Api
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>
/// Artist, Genre, Studio, Person, or any kind of BaseItem
/// </summary>
/// <value>The type of the item.</value>
@@ -122,6 +138,14 @@ namespace MediaBrowser.Api
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>
/// Gets or sets the position to seek to
/// </summary>
[ApiMember(Name = "SeekPositionTicks", Description = "The position to seek to.", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "POST")]
@@ -147,6 +171,14 @@ namespace MediaBrowser.Api
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>
/// Gets or sets the command.
/// </summary>
/// <value>The play command.</value>
@@ -165,6 +197,14 @@ namespace MediaBrowser.Api
[ApiMember(Name = "Id", Description = "Session Id", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "POST")]
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")]
public string Text { get; set; }
@@ -270,9 +310,10 @@ namespace MediaBrowser.Api
}
public void Post(SendPlaystateCommand request)
- {
+ {
var command = new PlaystateRequest
{
+ UserId = request.UserId,
Command = request.Command,
SeekPositionTicks = request.SeekPositionTicks
};
@@ -290,6 +331,7 @@ namespace MediaBrowser.Api
{
var command = new BrowseRequest
{
+ UserId = request.UserId,
Context = request.Context,
ItemId = request.ItemId,
ItemName = request.ItemName,
@@ -321,6 +363,7 @@ namespace MediaBrowser.Api
var command = new MessageCommand
{
Header = string.IsNullOrEmpty(request.Header) ? "Message from Server" : request.Header,
+ UserId = request.UserId,
TimeoutMs = request.TimeoutMs,
Text = request.Text
};
@@ -339,7 +382,7 @@ namespace MediaBrowser.Api
var command = new PlayRequest
{
ItemIds = request.ItemIds.Split(',').ToArray(),
-
+ UserId = request.UserId,
PlayCommand = request.PlayCommand,
StartPositionTicks = request.StartPositionTicks
};
diff --git a/MediaBrowser.Dlna/MediaBrowser.Dlna.csproj b/MediaBrowser.Dlna/MediaBrowser.Dlna.csproj
index 59420c5a1..622ccefbc 100644
--- a/MediaBrowser.Dlna/MediaBrowser.Dlna.csproj
+++ b/MediaBrowser.Dlna/MediaBrowser.Dlna.csproj
@@ -53,7 +53,7 @@
</Compile>
<Compile Include="PlayTo\Argument.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\CurrentIdEventArgs.cs" />
<Compile Include="PlayTo\Device.cs">
diff --git a/MediaBrowser.Dlna/PlayTo/Configuration/PluginConfiguration.cs b/MediaBrowser.Dlna/PlayTo/Configuration/PlayToConfiguration.cs
index 1bd8781bb..d3fcb24ad 100644
--- a/MediaBrowser.Dlna/PlayTo/Configuration/PluginConfiguration.cs
+++ b/MediaBrowser.Dlna/PlayTo/Configuration/PlayToConfiguration.cs
@@ -29,7 +29,12 @@
FriendlyName = "^TV$",
ModelNumber = @"1\.0",
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
@@ -38,7 +43,12 @@
ClientType = "DLNA",
FriendlyName = @"(^\[TV\][A-Z]{2}\d{2}(E|F)[A-Z]?\d{3,4}.*)|^\[TV\] Samsung",
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
@@ -47,7 +57,12 @@
ClientType = "DLNA",
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)",
- 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
diff --git a/MediaBrowser.Dlna/PlayTo/Configuration/TranscodeSetting.cs b/MediaBrowser.Dlna/PlayTo/Configuration/TranscodeSetting.cs
index ddf6f2187..4713dc385 100644
--- a/MediaBrowser.Dlna/PlayTo/Configuration/TranscodeSetting.cs
+++ b/MediaBrowser.Dlna/PlayTo/Configuration/TranscodeSetting.cs
@@ -20,7 +20,13 @@ namespace MediaBrowser.Dlna.PlayTo.Configuration
/// The target container.
/// </value>
public string TargetContainer { get; set; }
-
+
+ /// <summary>
+ /// Gets or sets the Mimetype to enforce
+ /// </summary>
+ /// <value>
+ /// The MimeType.
+ /// </value>
public string MimeType { get; set; }
/// <summary>
diff --git a/MediaBrowser.Dlna/PlayTo/PlaylistItem.cs b/MediaBrowser.Dlna/PlayTo/PlaylistItem.cs
index d2d04c4a8..6523eb9f5 100644
--- a/MediaBrowser.Dlna/PlayTo/PlaylistItem.cs
+++ b/MediaBrowser.Dlna/PlayTo/PlaylistItem.cs
@@ -16,6 +16,8 @@ namespace MediaBrowser.Dlna.PlayTo
public string FileFormat { get; set; }
+ public string MimeType { get; set; }
+
public int PlayState { get; set; }
public string StreamUrl { get; set; }
@@ -51,10 +53,21 @@ namespace MediaBrowser.Dlna.PlayTo
{
if (string.IsNullOrWhiteSpace(transcodeSetting.Container))
continue;
- if (path.EndsWith(transcodeSetting.Container))
+ if (path.EndsWith(transcodeSetting.Container) && !string.IsNullOrWhiteSpace(transcodeSetting.TargetContainer))
{
playlistItem.Transcode = true;
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;
}
}
diff --git a/MediaBrowser.Dlna/PlayTo/StreamHelper.cs b/MediaBrowser.Dlna/PlayTo/StreamHelper.cs
index eed0bb7d7..3492ed182 100644
--- a/MediaBrowser.Dlna/PlayTo/StreamHelper.cs
+++ b/MediaBrowser.Dlna/PlayTo/StreamHelper.cs
@@ -96,9 +96,12 @@ namespace MediaBrowser.Dlna.PlayTo
/// <returns>The url to send to the device</returns>
internal static string GetVideoUrl(DeviceProperties deviceProperties, PlaylistItem item, List<MediaStream> streams, string serverAddress)
{
+ string dlnaCommand = string.Empty;
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 audiostream = streams.Where(m => m.Type == MediaStreamType.Audio).OrderBy(m => m.IsDefault).FirstOrDefault();
@@ -117,7 +120,7 @@ namespace MediaBrowser.Dlna.PlayTo
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);
}
@@ -162,12 +165,12 @@ namespace MediaBrowser.Dlna.PlayTo
/// <summary>
/// Builds the dlna URL.
/// </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 dlnaparam = string.Format("Params={0};", deviceID);
-
+ dlnaparam += isStatic ? "true;" : "false;";
dlnaparam += videoCodec.HasValue ? videoCodec.Value + ";" : ";";
dlnaparam += audioCodec.HasValue ? audioCodec.Value + ";" : ";";
dlnaparam += audiostreamIndex.HasValue ? audiostreamIndex.Value.ToString(usCulture) + ";" : ";";
@@ -178,6 +181,7 @@ namespace MediaBrowser.Dlna.PlayTo
dlnaparam += startPositionTicks.HasValue ? startPositionTicks.Value.ToString(usCulture) + ";" : ";";
dlnaparam += profile + ";";
dlnaparam += videoLevel + ";";
+ dlnaparam += mimeType + ";";
return dlnaparam;
}
diff --git a/MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj b/MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj
index c8df3931d..6c05f8ee5 100644
--- a/MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj
+++ b/MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj
@@ -11,12 +11,17 @@
<RootNamespace>MediaBrowser.Model</RootNamespace>
<AssemblyName>MediaBrowser.Model</AssemblyName>
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
- <TargetFrameworkProfile>Profile104</TargetFrameworkProfile>
+ <TargetFrameworkProfile>Profile158</TargetFrameworkProfile>
<FileAlignment>512</FileAlignment>
<ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
<SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\</SolutionDir>
<RestorePackages>true</RestorePackages>
<FodyPath>..\packages\Fody.1.19.1.0</FodyPath>
+ <FileUpgradeFlags>
+ </FileUpgradeFlags>
+ <UpgradeBackupLocation>
+ </UpgradeBackupLocation>
+ <OldToolsVersion>4.0</OldToolsVersion>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
diff --git a/MediaBrowser.Model/ApiClient/IApiClient.cs b/MediaBrowser.Model/ApiClient/IApiClient.cs
index a0e527a99..292489869 100644
--- a/MediaBrowser.Model/ApiClient/IApiClient.cs
+++ b/MediaBrowser.Model/ApiClient/IApiClient.cs
@@ -572,17 +572,18 @@ namespace MediaBrowser.Model.ApiClient
/// Instructs antoher client to browse to a library item.
/// </summary>
/// <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="itemName">The name 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>
/// <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>
/// Sends the playstate command async.
/// </summary>
- /// <param name="sessionId">The session id.</param>
+ /// <param name="sessionId">The session id.</param>
/// <param name="request">The request.</param>
/// <returns>Task.</returns>
Task SendPlaystateCommandAsync(string sessionId, PlaystateRequest request);
diff --git a/MediaBrowser.Model/Session/BrowseRequest.cs b/MediaBrowser.Model/Session/BrowseRequest.cs
index abb3a30ab..03241860c 100644
--- a/MediaBrowser.Model/Session/BrowseRequest.cs
+++ b/MediaBrowser.Model/Session/BrowseRequest.cs
@@ -1,4 +1,6 @@

+using System;
+
namespace MediaBrowser.Model.Session
{
/// <summary>
@@ -12,6 +14,8 @@ namespace MediaBrowser.Model.Session
/// <value>The type of the item.</value>
public string ItemType { get; set; }
+ public Guid UserId { get; set; }
+
/// <summary>
/// Gets or sets the item id.
/// </summary>
diff --git a/MediaBrowser.Model/Session/MessageCommand.cs b/MediaBrowser.Model/Session/MessageCommand.cs
index 5ab580815..754c057fa 100644
--- a/MediaBrowser.Model/Session/MessageCommand.cs
+++ b/MediaBrowser.Model/Session/MessageCommand.cs
@@ -1,8 +1,11 @@

+using System;
namespace MediaBrowser.Model.Session
{
public class MessageCommand
- {
+ {
+ public Guid UserId { get; set; }
+
public string Header { get; set; }
public string Text { get; set; }
diff --git a/MediaBrowser.Model/Session/PlayRequest.cs b/MediaBrowser.Model/Session/PlayRequest.cs
index c9bb58693..239fb6572 100644
--- a/MediaBrowser.Model/Session/PlayRequest.cs
+++ b/MediaBrowser.Model/Session/PlayRequest.cs
@@ -1,4 +1,5 @@

+using System;
namespace MediaBrowser.Model.Session
{
/// <summary>
@@ -6,6 +7,11 @@ namespace MediaBrowser.Model.Session
/// </summary>
public class PlayRequest
{
+ public PlayRequest()
+ {
+
+ }
+
/// <summary>
/// Gets or sets the item ids.
/// </summary>
@@ -23,6 +29,12 @@ namespace MediaBrowser.Model.Session
/// </summary>
/// <value>The play command.</value>
public PlayCommand PlayCommand { get; set; }
+
+ /// <summary>
+ /// Gets or sets the play command.
+ /// </summary>
+ /// <value>The play command.</value>
+ public Guid UserId { get; set; }
}
/// <summary>
diff --git a/MediaBrowser.Model/Session/PlaystateCommand.cs b/MediaBrowser.Model/Session/PlaystateCommand.cs
index 7e85d9d27..68e80c452 100644
--- a/MediaBrowser.Model/Session/PlaystateCommand.cs
+++ b/MediaBrowser.Model/Session/PlaystateCommand.cs
@@ -1,4 +1,5 @@

+using System;
namespace MediaBrowser.Model.Session
{
/// <summary>
@@ -34,6 +35,8 @@ namespace MediaBrowser.Model.Session
public class PlaystateRequest
{
+ public Guid UserId { get; set; }
+
public PlaystateCommand Command { get; set; }
public long? SeekPositionTicks { get; set; }