BoxSetPostScanTask.cs 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. using MediaBrowser.Controller.Entities;
  2. using MediaBrowser.Controller.Entities.Movies;
  3. using MediaBrowser.Controller.Library;
  4. using System;
  5. using System.Linq;
  6. using System.Threading;
  7. using System.Threading.Tasks;
  8. namespace MediaBrowser.Server.Implementations.Library.Validators
  9. {
  10. public class BoxSetPostScanTask : ILibraryPostScanTask
  11. {
  12. private readonly ILibraryManager _libraryManager;
  13. public BoxSetPostScanTask(ILibraryManager libraryManager)
  14. {
  15. _libraryManager = libraryManager;
  16. }
  17. public Task Run(IProgress<double> progress, CancellationToken cancellationToken)
  18. {
  19. var items = _libraryManager.RootFolder.RecursiveChildren.ToList();
  20. var boxsets = items.OfType<BoxSet>().ToList();
  21. var numComplete = 0;
  22. foreach (var boxset in boxsets)
  23. {
  24. foreach (var child in boxset.GetLinkedChildren().OfType<ISupportsBoxSetGrouping>())
  25. {
  26. var boxsetIdList = child.BoxSetIdList.ToList();
  27. if (!boxsetIdList.Contains(boxset.Id))
  28. {
  29. boxsetIdList.Add(boxset.Id);
  30. }
  31. child.BoxSetIdList = boxsetIdList;
  32. }
  33. numComplete++;
  34. double percent = numComplete;
  35. percent /= boxsets.Count;
  36. progress.Report(percent * 100);
  37. }
  38. progress.Report(100);
  39. return Task.FromResult(true);
  40. }
  41. }
  42. }