コード例 #1
0
        private void MergeVideos(IEnumerable <BaseItem> videos)
        {
            List <BaseItem> elegibleToMerge = new List <BaseItem>();

            foreach (var video in videos)
            {
                if (isElegible(video))
                {
                    elegibleToMerge.Add(video);
                }
            }

            var mv = new MediaBrowser.Api.MergeVersions
            {
                Ids = String.Join(',', elegibleToMerge.Select(m => m.Id))
            };

            if (elegibleToMerge.Count() > 1)
            {
                _logger.LogInformation($"Merging {videos.ElementAt(0).OriginalTitle} ({videos.ElementAt(0).ProductionYear})");
                _logger.LogDebug($"ids are {mv.Ids}\nMerging...");
                _videoService.Post(mv);
                _logger.LogDebug("merged");
            }
        }
        private void MergeMovies(IEnumerable <BaseItem> movies)
        {
            var mv = new MediaBrowser.Api.MergeVersions
            {
                Ids = String.Join(',', movies.Select(m => m.Id))
            };

            _logger.LogDebug($"ids are {mv.Ids}\nMerging...");
            _videoService.Post(mv);
            _logger.LogDebug("merged");
        }
コード例 #3
0
        public void Post(MergeVersions request)
        {
            var task = PostAsync(request);

            Task.WaitAll(task);
        }
コード例 #4
0
        public void Post(MergeVersions request)
        {
            var items = request.Ids.Split(',')
                        .Select(i => _libraryManager.GetItemById(i))
                        .OfType <Video>()
                        .ToList();

            if (items.Count < 2)
            {
                throw new ArgumentException("Please supply at least two videos to merge.");
            }

            var videosWithVersions = items.Where(i => i.MediaSourceCount > 1)
                                     .ToList();

            if (videosWithVersions.Count > 1)
            {
                throw new ArgumentException("Videos with sub-versions cannot be merged.");
            }

            var primaryVersion = videosWithVersions.FirstOrDefault();

            if (primaryVersion == null)
            {
                primaryVersion = items.OrderBy(i =>
                {
                    if (i.Video3DFormat.HasValue)
                    {
                        return(1);
                    }

                    if (i.VideoType != Model.Entities.VideoType.VideoFile)
                    {
                        return(1);
                    }

                    return(0);
                })
                                 .ThenByDescending(i =>
                {
                    var stream = i.GetDefaultVideoStream();

                    return(stream == null || stream.Width == null ? 0 : stream.Width.Value);
                }).First();
            }

            var list = primaryVersion.LinkedAlternateVersions.ToList();

            foreach (var item in items.Where(i => i.Id != primaryVersion.Id))
            {
                item.PrimaryVersionId = primaryVersion.Id.ToString("N");

                item.UpdateToRepository(ItemUpdateType.MetadataEdit, CancellationToken.None);

                list.Add(new LinkedChild
                {
                    Path   = item.Path,
                    ItemId = item.Id
                });
            }

            primaryVersion.LinkedAlternateVersions = list.ToArray();

            primaryVersion.UpdateToRepository(ItemUpdateType.MetadataEdit, CancellationToken.None);
        }
コード例 #5
0
ファイル: VideosService.cs プロジェクト: xbl3/jellyfin
        public void Post(MergeVersions request)
        {
            var items = request.Ids.Split(',')
                        .Select(i => _libraryManager.GetItemById(i))
                        .OfType <Video>()
                        .ToList();

            if (items.Count < 2)
            {
                throw new ArgumentException("Please supply at least two videos to merge.");
            }

            var videosWithVersions = items.Where(i => i.MediaSourceCount > 1)
                                     .ToList();

            var primaryVersion = videosWithVersions.FirstOrDefault();

            if (primaryVersion == null)
            {
                primaryVersion = items.OrderBy(i =>
                {
                    if (i.Video3DFormat.HasValue || i.VideoType != Model.Entities.VideoType.VideoFile)
                    {
                        return(1);
                    }

                    return(0);
                })
                                 .ThenByDescending(i =>
                {
                    return(i.GetDefaultVideoStream()?.Width ?? 0);
                }).First();
            }

            var list = primaryVersion.LinkedAlternateVersions.ToList();

            foreach (var item in items.Where(i => i.Id != primaryVersion.Id))
            {
                item.SetPrimaryVersionId(primaryVersion.Id.ToString("N", CultureInfo.InvariantCulture));

                item.UpdateToRepository(ItemUpdateType.MetadataEdit, CancellationToken.None);

                list.Add(new LinkedChild
                {
                    Path   = item.Path,
                    ItemId = item.Id
                });

                foreach (var linkedItem in item.LinkedAlternateVersions)
                {
                    if (!list.Any(i => string.Equals(i.Path, linkedItem.Path, StringComparison.OrdinalIgnoreCase)))
                    {
                        list.Add(linkedItem);
                    }
                }

                if (item.LinkedAlternateVersions.Length > 0)
                {
                    item.LinkedAlternateVersions = Array.Empty <LinkedChild>();
                    item.UpdateToRepository(ItemUpdateType.MetadataEdit, CancellationToken.None);
                }
            }

            primaryVersion.LinkedAlternateVersions = list.ToArray();
            primaryVersion.UpdateToRepository(ItemUpdateType.MetadataEdit, CancellationToken.None);
        }
コード例 #6
0
ファイル: VideosService.cs プロジェクト: ilovejs/MediaBrowser
        private async Task MergeVersions(MergeVersions request)
        {
            var items = request.Ids.Split(',')
                        .Select(i => new Guid(i))
                        .Select(i => _libraryManager.GetItemById(i))
                        .ToList();

            if (items.Count < 2)
            {
                throw new ArgumentException("Please supply at least two videos to merge.");
            }

            if (items.Any(i => !(i is Video)))
            {
                throw new ArgumentException("Only videos can be grouped together.");
            }

            var videos = items.Cast <Video>().ToList();

            var videosWithVersions = videos.Where(i => i.MediaSourceCount > 1)
                                     .ToList();

            if (videosWithVersions.Count > 1)
            {
                throw new ArgumentException("Videos with sub-versions cannot be merged.");
            }

            var primaryVersion = videosWithVersions.FirstOrDefault();

            if (primaryVersion == null)
            {
                primaryVersion = videos.OrderBy(i =>
                {
                    if (i.Video3DFormat.HasValue)
                    {
                        return(1);
                    }

                    if (i.VideoType != Model.Entities.VideoType.VideoFile)
                    {
                        return(1);
                    }

                    return(0);
                })
                                 .ThenByDescending(i =>
                {
                    var stream = i.GetDefaultVideoStream();

                    return(stream == null || stream.Width == null ? 0 : stream.Width.Value);
                }).First();
            }

            foreach (var item in videos.Where(i => i.Id != primaryVersion.Id))
            {
                item.PrimaryVersionId = primaryVersion.Id;

                await item.UpdateToRepository(ItemUpdateType.MetadataDownload, CancellationToken.None).ConfigureAwait(false);

                primaryVersion.LinkedAlternateVersions.Add(new LinkedChild
                {
                    Path   = item.Path,
                    ItemId = item.Id
                });
            }

            await primaryVersion.UpdateToRepository(ItemUpdateType.MetadataDownload, CancellationToken.None).ConfigureAwait(false);
        }