StudiosValidator.cs 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  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. class StudiosValidator
  10. {
  11. /// <summary>
  12. /// The _library manager
  13. /// </summary>
  14. private readonly ILibraryManager _libraryManager;
  15. /// <summary>
  16. /// The _logger
  17. /// </summary>
  18. private readonly ILogger _logger;
  19. public StudiosValidator(ILibraryManager libraryManager, ILogger logger)
  20. {
  21. _libraryManager = libraryManager;
  22. _logger = logger;
  23. }
  24. /// <summary>
  25. /// Runs the specified progress.
  26. /// </summary>
  27. /// <param name="progress">The progress.</param>
  28. /// <param name="cancellationToken">The cancellation token.</param>
  29. /// <returns>Task.</returns>
  30. public async Task Run(IProgress<double> progress, CancellationToken cancellationToken)
  31. {
  32. var items = _libraryManager.RootFolder.GetRecursiveChildren()
  33. .SelectMany(i => i.Studios)
  34. .DistinctNames()
  35. .ToList();
  36. var numComplete = 0;
  37. var count = items.Count;
  38. foreach (var name in items)
  39. {
  40. try
  41. {
  42. var itemByName = _libraryManager.GetStudio(name);
  43. await itemByName.RefreshMetadata(cancellationToken).ConfigureAwait(false);
  44. }
  45. catch (OperationCanceledException)
  46. {
  47. // Don't clutter the log
  48. break;
  49. }
  50. catch (Exception ex)
  51. {
  52. _logger.ErrorException("Error refreshing {0}", ex, name);
  53. }
  54. numComplete++;
  55. double percent = numComplete;
  56. percent /= count;
  57. percent *= 100;
  58. progress.Report(percent);
  59. }
  60. progress.Report(100);
  61. }
  62. }
  63. }