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"); }
public void Post(MergeVersions request) { var task = PostAsync(request); Task.WaitAll(task); }
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); }
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); }
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); }