YearsPostScanTask.cs 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. using MediaBrowser.Controller.Library;
  2. using MediaBrowser.Model.Logging;
  3. using System;
  4. using System.Linq;
  5. using System.Threading;
  6. using System.Threading.Tasks;
  7. namespace MediaBrowser.Server.Implementations.Library.Validators
  8. {
  9. public class YearsPostScanTask : ILibraryPostScanTask
  10. {
  11. private readonly ILibraryManager _libraryManager;
  12. private readonly ILogger _logger;
  13. public YearsPostScanTask(ILibraryManager libraryManager, ILogger logger)
  14. {
  15. _libraryManager = libraryManager;
  16. _logger = logger;
  17. }
  18. public async Task Run(IProgress<double> progress, CancellationToken cancellationToken)
  19. {
  20. var allYears = _libraryManager.RootFolder.RecursiveChildren
  21. .Select(i => i.ProductionYear ?? -1)
  22. .Where(i => i > 0)
  23. .Distinct()
  24. .ToList();
  25. progress.Report(10);
  26. var count = allYears.Count;
  27. var numComplete = 0;
  28. foreach (var yearNumber in allYears)
  29. {
  30. var year = _libraryManager.GetYear(yearNumber);
  31. try
  32. {
  33. await year.RefreshMetadata(cancellationToken).ConfigureAwait(false);
  34. }
  35. catch (OperationCanceledException)
  36. {
  37. // Don't clutter the log
  38. break;
  39. }
  40. catch (Exception ex)
  41. {
  42. _logger.ErrorException("Error refreshing year {0}", ex, year);
  43. }
  44. numComplete++;
  45. double percent = numComplete;
  46. percent /= count;
  47. percent *= 90;
  48. progress.Report(percent + 10);
  49. }
  50. }
  51. }
  52. }