GenresValidator.cs 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. using MediaBrowser.Controller.Entities;
  2. using MediaBrowser.Controller.Entities.Audio;
  3. using MediaBrowser.Controller.Library;
  4. using MediaBrowser.Model.Logging;
  5. using System;
  6. using System.Linq;
  7. using System.Threading;
  8. using System.Threading.Tasks;
  9. namespace MediaBrowser.Server.Implementations.Library.Validators
  10. {
  11. class GenresValidator
  12. {
  13. /// <summary>
  14. /// The _library manager
  15. /// </summary>
  16. private readonly ILibraryManager _libraryManager;
  17. /// <summary>
  18. /// The _user manager
  19. /// </summary>
  20. private readonly IUserManager _userManager;
  21. /// <summary>
  22. /// The _logger
  23. /// </summary>
  24. private readonly ILogger _logger;
  25. public GenresValidator(ILibraryManager libraryManager, IUserManager userManager, ILogger logger)
  26. {
  27. _libraryManager = libraryManager;
  28. _userManager = userManager;
  29. _logger = logger;
  30. }
  31. /// <summary>
  32. /// Runs the specified progress.
  33. /// </summary>
  34. /// <param name="progress">The progress.</param>
  35. /// <param name="cancellationToken">The cancellation token.</param>
  36. /// <returns>Task.</returns>
  37. public async Task Run(IProgress<double> progress, CancellationToken cancellationToken)
  38. {
  39. var items = _libraryManager.RootFolder.RecursiveChildren.Where(i => !(i is IHasMusicGenres) && !(i is Game))
  40. .SelectMany(i => i.Genres)
  41. .Distinct(StringComparer.OrdinalIgnoreCase)
  42. .ToList();
  43. progress.Report(2);
  44. var numComplete = 0;
  45. var count = items.Count;
  46. foreach (var name in items)
  47. {
  48. cancellationToken.ThrowIfCancellationRequested();
  49. try
  50. {
  51. var itemByName = _libraryManager.GetGenre(name);
  52. await itemByName.RefreshMetadata(cancellationToken).ConfigureAwait(false);
  53. }
  54. catch (OperationCanceledException)
  55. {
  56. // Don't clutter the log
  57. break;
  58. }
  59. catch (Exception ex)
  60. {
  61. _logger.ErrorException("Error refreshing {0}", ex, name);
  62. }
  63. numComplete++;
  64. double percent = numComplete;
  65. percent /= count;
  66. percent *= 90;
  67. progress.Report(percent + 10);
  68. }
  69. progress.Report(100);
  70. }
  71. }
  72. }