diff --git a/MediaBrowser.Api/VideosService.cs b/MediaBrowser.Api/VideosService.cs index 3f840dbfa3..3f4bb46f45 100644 --- a/MediaBrowser.Api/VideosService.cs +++ b/MediaBrowser.Api/VideosService.cs @@ -114,12 +114,14 @@ namespace MediaBrowser.Api foreach (var link in video.GetLinkedAlternateVersions()) { - link.PrimaryVersionId = null; + link.SetPrimaryVersionId(null); + link.LinkedAlternateVersions = Video.EmptyLinkedChildArray; link.UpdateToRepository(ItemUpdateType.MetadataEdit, CancellationToken.None); } video.LinkedAlternateVersions = Video.EmptyLinkedChildArray; + video.SetPrimaryVersionId(null); video.UpdateToRepository(ItemUpdateType.MetadataEdit, CancellationToken.None); } @@ -174,7 +176,7 @@ namespace MediaBrowser.Api foreach (var item in items.Where(i => i.Id != primaryVersion.Id)) { - item.PrimaryVersionId = primaryVersion.Id.ToString("N"); + item.SetPrimaryVersionId(primaryVersion.Id.ToString("N")); item.UpdateToRepository(ItemUpdateType.MetadataEdit, CancellationToken.None); diff --git a/MediaBrowser.Controller/Entities/Video.cs b/MediaBrowser.Controller/Entities/Video.cs index 52f1dd0514..dca1cfd01b 100644 --- a/MediaBrowser.Controller/Entities/Video.cs +++ b/MediaBrowser.Controller/Entities/Video.cs @@ -84,6 +84,20 @@ namespace MediaBrowser.Controller.Entities } } + public void SetPrimaryVersionId(string id) + { + if (string.IsNullOrWhiteSpace(id)) + { + PrimaryVersionId = null; + } + else + { + PrimaryVersionId = id; + } + + PresentationUniqueKey = CreatePresentationUniqueKey(); + } + public override string CreatePresentationUniqueKey() { if (!string.IsNullOrWhiteSpace(PrimaryVersionId)) @@ -667,8 +681,6 @@ namespace MediaBrowser.Controller.Entities throw new ArgumentNullException("media"); } - var mediaStreams = MediaSourceManager.GetMediaStreams(media.Id); - var locationType = media.LocationType; var info = new MediaSourceInfo @@ -676,8 +688,8 @@ namespace MediaBrowser.Controller.Entities Id = media.Id.ToString("N"), IsoType = media.IsoType, Protocol = locationType == LocationType.Remote ? MediaProtocol.Http : MediaProtocol.File, - MediaStreams = mediaStreams, - Name = GetMediaSourceName(media, mediaStreams), + MediaStreams = MediaSourceManager.GetMediaStreams(media.Id), + Name = GetMediaSourceName(media), Path = enablePathSubstitution ? GetMappedPath(media, media.Path, locationType) : media.Path, RunTimeTicks = media.RunTimeTicks, Video3DFormat = media.Video3DFormat, @@ -740,12 +752,20 @@ namespace MediaBrowser.Controller.Entities return info; } - private static string GetMediaSourceName(Video video, List mediaStreams) + private static string GetMediaSourceName(Video video) { var terms = new List(); - var videoStream = mediaStreams.FirstOrDefault(i => i.Type == MediaStreamType.Video); - var audioStream = mediaStreams.FirstOrDefault(i => i.Type == MediaStreamType.Audio); + var locationType = video.LocationType; + var path = video.Path; + if ((locationType == LocationType.FileSystem || locationType == LocationType.Offline) && !string.IsNullOrWhiteSpace(path)) + { + terms.Add(System.IO.Path.GetFileName(path)); + } + else + { + terms.Add(video.Name); + } if (video.Video3DFormat.HasValue) { @@ -779,50 +799,6 @@ namespace MediaBrowser.Controller.Entities } } - if (videoStream != null) - { - if (videoStream.Width.HasValue) - { - if (videoStream.Width.Value >= 3800) - { - terms.Add("4K"); - } - else if (videoStream.Width.Value >= 1900) - { - terms.Add("1080P"); - } - else if (videoStream.Width.Value >= 1270) - { - terms.Add("720P"); - } - else if (videoStream.Width.Value >= 700) - { - terms.Add("480P"); - } - else - { - terms.Add("SD"); - } - } - } - - if (videoStream != null && !string.IsNullOrWhiteSpace(videoStream.Codec)) - { - terms.Add(videoStream.Codec.ToUpper()); - } - - if (audioStream != null) - { - var audioCodec = string.Equals(audioStream.Codec, "dca", StringComparison.OrdinalIgnoreCase) - ? audioStream.Profile - : audioStream.Codec; - - if (!string.IsNullOrEmpty(audioCodec)) - { - terms.Add(audioCodec.ToUpper()); - } - } - return string.Join("/", terms.ToArray(terms.Count)); }