|
@@ -267,12 +267,14 @@ namespace MediaBrowser.Server.Implementations.Dto
|
|
PlayableMediaTypes = session.PlayableMediaTypes,
|
|
PlayableMediaTypes = session.PlayableMediaTypes,
|
|
RemoteEndPoint = session.RemoteEndPoint,
|
|
RemoteEndPoint = session.RemoteEndPoint,
|
|
AdditionalUsers = session.AdditionalUsers,
|
|
AdditionalUsers = session.AdditionalUsers,
|
|
- SupportsFullscreenToggle = session.SupportsFullscreenToggle
|
|
|
|
|
|
+ SupportsFullscreenToggle = session.SupportsFullscreenToggle,
|
|
|
|
+ SupportsNavigationControl = session.SupportsNavigationControl,
|
|
|
|
+ SupportsOsdToggle = session.SupportsOsdToggle
|
|
};
|
|
};
|
|
|
|
|
|
if (session.NowPlayingItem != null)
|
|
if (session.NowPlayingItem != null)
|
|
{
|
|
{
|
|
- dto.NowPlayingItem = GetBaseItemInfo(session.NowPlayingItem);
|
|
|
|
|
|
+ dto.NowPlayingItem = GetNowPlayingInfo(session.NowPlayingItem, session.NowPlayingMediaVersionId, session.NowPlayingRunTimeTicks);
|
|
}
|
|
}
|
|
|
|
|
|
if (session.UserId.HasValue)
|
|
if (session.UserId.HasValue)
|
|
@@ -288,9 +290,11 @@ namespace MediaBrowser.Server.Implementations.Dto
|
|
/// Converts a BaseItem to a BaseItemInfo
|
|
/// Converts a BaseItem to a BaseItemInfo
|
|
/// </summary>
|
|
/// </summary>
|
|
/// <param name="item">The item.</param>
|
|
/// <param name="item">The item.</param>
|
|
|
|
+ /// <param name="mediaVersionId">The media version identifier.</param>
|
|
|
|
+ /// <param name="nowPlayingRuntimeTicks">The now playing runtime ticks.</param>
|
|
/// <returns>BaseItemInfo.</returns>
|
|
/// <returns>BaseItemInfo.</returns>
|
|
/// <exception cref="System.ArgumentNullException">item</exception>
|
|
/// <exception cref="System.ArgumentNullException">item</exception>
|
|
- public BaseItemInfo GetBaseItemInfo(BaseItem item)
|
|
|
|
|
|
+ private BaseItemInfo GetNowPlayingInfo(BaseItem item, string mediaVersionId, long? nowPlayingRuntimeTicks)
|
|
{
|
|
{
|
|
if (item == null)
|
|
if (item == null)
|
|
{
|
|
{
|
|
@@ -303,7 +307,8 @@ namespace MediaBrowser.Server.Implementations.Dto
|
|
Name = item.Name,
|
|
Name = item.Name,
|
|
MediaType = item.MediaType,
|
|
MediaType = item.MediaType,
|
|
Type = item.GetClientTypeName(),
|
|
Type = item.GetClientTypeName(),
|
|
- RunTimeTicks = item.RunTimeTicks
|
|
|
|
|
|
+ RunTimeTicks = nowPlayingRuntimeTicks,
|
|
|
|
+ MediaVersionId = mediaVersionId
|
|
};
|
|
};
|
|
|
|
|
|
info.PrimaryImageTag = GetImageCacheTag(item, ImageType.Primary);
|
|
info.PrimaryImageTag = GetImageCacheTag(item, ImageType.Primary);
|
|
@@ -1103,9 +1108,7 @@ namespace MediaBrowser.Server.Implementations.Dto
|
|
|
|
|
|
if (dto.MediaVersions != null && dto.MediaVersions.Count > 0)
|
|
if (dto.MediaVersions != null && dto.MediaVersions.Count > 0)
|
|
{
|
|
{
|
|
- chapters = dto.MediaVersions.Where(i => i.IsPrimaryVersion)
|
|
|
|
- .SelectMany(i => i.Chapters)
|
|
|
|
- .ToList();
|
|
|
|
|
|
+ chapters = _itemRepo.GetChapters(item.Id).Select(c => GetChapterInfoDto(c, item)).ToList();
|
|
}
|
|
}
|
|
else
|
|
else
|
|
{
|
|
{
|
|
@@ -1292,24 +1295,25 @@ namespace MediaBrowser.Server.Implementations.Dto
|
|
|
|
|
|
private List<MediaVersionInfo> GetMediaVersions(Audio item)
|
|
private List<MediaVersionInfo> GetMediaVersions(Audio item)
|
|
{
|
|
{
|
|
- var result = new List<MediaVersionInfo>();
|
|
|
|
-
|
|
|
|
- result.Add(GetVersionInfo(item, true));
|
|
|
|
|
|
+ var result = new List<MediaVersionInfo>
|
|
|
|
+ {
|
|
|
|
+ GetVersionInfo(item, true)
|
|
|
|
+ };
|
|
|
|
|
|
return result;
|
|
return result;
|
|
}
|
|
}
|
|
|
|
|
|
private MediaVersionInfo GetVersionInfo(Video i, bool isPrimary)
|
|
private MediaVersionInfo GetVersionInfo(Video i, bool isPrimary)
|
|
{
|
|
{
|
|
|
|
+ var mediaStreams = _itemRepo.GetMediaStreams(new MediaStreamQuery {ItemId = i.Id}).ToList();
|
|
|
|
+
|
|
return new MediaVersionInfo
|
|
return new MediaVersionInfo
|
|
{
|
|
{
|
|
- Chapters = _itemRepo.GetChapters(i.Id).Select(c => GetChapterInfoDto(c, i)).ToList(),
|
|
|
|
-
|
|
|
|
- ItemId = i.Id.ToString("N"),
|
|
|
|
|
|
+ Id = i.Id.ToString("N"),
|
|
IsoType = i.IsoType,
|
|
IsoType = i.IsoType,
|
|
LocationType = i.LocationType,
|
|
LocationType = i.LocationType,
|
|
- MediaStreams = _itemRepo.GetMediaStreams(new MediaStreamQuery { ItemId = i.Id }).ToList(),
|
|
|
|
- Name = GetAlternateVersionName(i),
|
|
|
|
|
|
+ MediaStreams = mediaStreams,
|
|
|
|
+ Name = GetAlternateVersionName(i, mediaStreams),
|
|
Path = GetMappedPath(i),
|
|
Path = GetMappedPath(i),
|
|
RunTimeTicks = i.RunTimeTicks,
|
|
RunTimeTicks = i.RunTimeTicks,
|
|
Video3DFormat = i.Video3DFormat,
|
|
Video3DFormat = i.Video3DFormat,
|
|
@@ -1322,7 +1326,7 @@ namespace MediaBrowser.Server.Implementations.Dto
|
|
{
|
|
{
|
|
return new MediaVersionInfo
|
|
return new MediaVersionInfo
|
|
{
|
|
{
|
|
- ItemId = i.Id.ToString("N"),
|
|
|
|
|
|
+ Id = i.Id.ToString("N"),
|
|
LocationType = i.LocationType,
|
|
LocationType = i.LocationType,
|
|
MediaStreams = _itemRepo.GetMediaStreams(new MediaStreamQuery { ItemId = i.Id }).ToList(),
|
|
MediaStreams = _itemRepo.GetMediaStreams(new MediaStreamQuery { ItemId = i.Id }).ToList(),
|
|
Name = i.Name,
|
|
Name = i.Name,
|
|
@@ -1351,32 +1355,29 @@ namespace MediaBrowser.Server.Implementations.Dto
|
|
return path;
|
|
return path;
|
|
}
|
|
}
|
|
|
|
|
|
- private string GetAlternateVersionName(Video video)
|
|
|
|
|
|
+ private string GetAlternateVersionName(Video video, List<MediaStream> mediaStreams)
|
|
{
|
|
{
|
|
- var name = "";
|
|
|
|
|
|
+ var terms = new List<string>();
|
|
|
|
|
|
- var videoStream = video.GetDefaultVideoStream();
|
|
|
|
|
|
+ var videoStream = mediaStreams.FirstOrDefault(i => i.Type == MediaStreamType.Video);
|
|
|
|
+ var audioStream = mediaStreams.FirstOrDefault(i => i.Type == MediaStreamType.Audio);
|
|
|
|
|
|
if (video.Video3DFormat.HasValue)
|
|
if (video.Video3DFormat.HasValue)
|
|
{
|
|
{
|
|
- name = "3D " + name;
|
|
|
|
- name = name.Trim();
|
|
|
|
|
|
+ terms.Add("3D");
|
|
}
|
|
}
|
|
|
|
|
|
if (video.VideoType == VideoType.BluRay)
|
|
if (video.VideoType == VideoType.BluRay)
|
|
{
|
|
{
|
|
- name = name + " " + "Bluray";
|
|
|
|
- name = name.Trim();
|
|
|
|
|
|
+ terms.Add("Bluray");
|
|
}
|
|
}
|
|
else if (video.VideoType == VideoType.Dvd)
|
|
else if (video.VideoType == VideoType.Dvd)
|
|
{
|
|
{
|
|
- name = name + " " + "DVD";
|
|
|
|
- name = name.Trim();
|
|
|
|
|
|
+ terms.Add("DVD");
|
|
}
|
|
}
|
|
else if (video.VideoType == VideoType.HdDvd)
|
|
else if (video.VideoType == VideoType.HdDvd)
|
|
{
|
|
{
|
|
- name = name + " " + "HD-DVD";
|
|
|
|
- name = name.Trim();
|
|
|
|
|
|
+ terms.Add("HD-DVD");
|
|
}
|
|
}
|
|
else if (video.VideoType == VideoType.Iso)
|
|
else if (video.VideoType == VideoType.Iso)
|
|
{
|
|
{
|
|
@@ -1384,18 +1385,17 @@ namespace MediaBrowser.Server.Implementations.Dto
|
|
{
|
|
{
|
|
if (video.IsoType.Value == IsoType.BluRay)
|
|
if (video.IsoType.Value == IsoType.BluRay)
|
|
{
|
|
{
|
|
- name = name + " " + "Bluray";
|
|
|
|
|
|
+ terms.Add("Bluray");
|
|
}
|
|
}
|
|
else if (video.IsoType.Value == IsoType.Dvd)
|
|
else if (video.IsoType.Value == IsoType.Dvd)
|
|
{
|
|
{
|
|
- name = name + " " + "DVD";
|
|
|
|
|
|
+ terms.Add("DVD");
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else
|
|
else
|
|
{
|
|
{
|
|
- name = name + " " + "ISO";
|
|
|
|
|
|
+ terms.Add("ISO");
|
|
}
|
|
}
|
|
- name = name.Trim();
|
|
|
|
}
|
|
}
|
|
|
|
|
|
if (videoStream != null)
|
|
if (videoStream != null)
|
|
@@ -1404,44 +1404,45 @@ namespace MediaBrowser.Server.Implementations.Dto
|
|
{
|
|
{
|
|
if (videoStream.Width.Value >= 3800)
|
|
if (videoStream.Width.Value >= 3800)
|
|
{
|
|
{
|
|
- name = name + " " + "4K";
|
|
|
|
- name = name.Trim();
|
|
|
|
|
|
+ terms.Add("4K");
|
|
}
|
|
}
|
|
else if (videoStream.Width.Value >= 1900)
|
|
else if (videoStream.Width.Value >= 1900)
|
|
{
|
|
{
|
|
- name = name + " " + "1080P";
|
|
|
|
- name = name.Trim();
|
|
|
|
|
|
+ terms.Add("1080P");
|
|
}
|
|
}
|
|
else if (videoStream.Width.Value >= 1270)
|
|
else if (videoStream.Width.Value >= 1270)
|
|
{
|
|
{
|
|
- name = name + " " + "720P";
|
|
|
|
- name = name.Trim();
|
|
|
|
|
|
+ terms.Add("720P");
|
|
}
|
|
}
|
|
else if (videoStream.Width.Value >= 700)
|
|
else if (videoStream.Width.Value >= 700)
|
|
{
|
|
{
|
|
- name = name + " " + "480p";
|
|
|
|
- name = name.Trim();
|
|
|
|
|
|
+ terms.Add("480P");
|
|
}
|
|
}
|
|
else
|
|
else
|
|
{
|
|
{
|
|
- name = name + " " + "SD";
|
|
|
|
- name = name.Trim();
|
|
|
|
|
|
+ terms.Add("SD");
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
if (videoStream != null && !string.IsNullOrWhiteSpace(videoStream.Codec))
|
|
if (videoStream != null && !string.IsNullOrWhiteSpace(videoStream.Codec))
|
|
{
|
|
{
|
|
- name = name + " " + videoStream.Codec.ToUpper();
|
|
|
|
- name = name.Trim();
|
|
|
|
|
|
+ terms.Add(videoStream.Codec.ToUpper());
|
|
}
|
|
}
|
|
|
|
|
|
- if (string.IsNullOrWhiteSpace(name))
|
|
|
|
|
|
+ if (audioStream != null)
|
|
{
|
|
{
|
|
- return video.Name;
|
|
|
|
|
|
+ var audioCodec = string.Equals(audioStream.Codec, "dca", StringComparison.OrdinalIgnoreCase)
|
|
|
|
+ ? audioStream.Profile
|
|
|
|
+ : audioStream.Codec;
|
|
|
|
+
|
|
|
|
+ if (!string.IsNullOrEmpty(audioCodec))
|
|
|
|
+ {
|
|
|
|
+ terms.Add(audioCodec.ToUpper());
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
- return name;
|
|
|
|
|
|
+ return string.Join("/", terms.ToArray());
|
|
}
|
|
}
|
|
|
|
|
|
private string GetMappedPath(string path)
|
|
private string GetMappedPath(string path)
|