YearsPostScanTask.cs 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  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. var count = allYears.Count;
  26. var numComplete = 0;
  27. foreach (var yearNumber in allYears)
  28. {
  29. var year = _libraryManager.GetYear(yearNumber);
  30. try
  31. {
  32. await year.RefreshMetadata(cancellationToken).ConfigureAwait(false);
  33. }
  34. catch (OperationCanceledException)
  35. {
  36. // Don't clutter the log
  37. break;
  38. }
  39. catch (Exception ex)
  40. {
  41. _logger.ErrorException("Error refreshing year {0}", ex, year);
  42. }
  43. numComplete++;
  44. double percent = numComplete;
  45. percent /= count;
  46. percent *= 90;
  47. progress.Report(percent + 10);
  48. }
  49. }
  50. }
  51. }