2
0

MusicGenresValidator.cs 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. using System;
  2. using System.Threading;
  3. using System.Threading.Tasks;
  4. using MediaBrowser.Controller.Library;
  5. using MediaBrowser.Controller.Persistence;
  6. using Microsoft.Extensions.Logging;
  7. namespace Emby.Server.Implementations.Library.Validators
  8. {
  9. class MusicGenresValidator
  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. private readonly IItemRepository _itemRepo;
  20. public MusicGenresValidator(ILibraryManager libraryManager, ILogger logger, IItemRepository itemRepo)
  21. {
  22. _libraryManager = libraryManager;
  23. _logger = logger;
  24. _itemRepo = itemRepo;
  25. }
  26. /// <summary>
  27. /// Runs the specified progress.
  28. /// </summary>
  29. /// <param name="progress">The progress.</param>
  30. /// <param name="cancellationToken">The cancellation token.</param>
  31. /// <returns>Task.</returns>
  32. public async Task Run(IProgress<double> progress, CancellationToken cancellationToken)
  33. {
  34. var names = _itemRepo.GetMusicGenreNames();
  35. var numComplete = 0;
  36. var count = names.Count;
  37. foreach (var name in names)
  38. {
  39. try
  40. {
  41. var item = _libraryManager.GetMusicGenre(name);
  42. await item.RefreshMetadata(cancellationToken).ConfigureAwait(false);
  43. }
  44. catch (OperationCanceledException)
  45. {
  46. // Don't clutter the log
  47. throw;
  48. }
  49. catch (Exception ex)
  50. {
  51. _logger.LogError(ex, "Error refreshing {GenreName}", name);
  52. }
  53. numComplete++;
  54. double percent = numComplete;
  55. percent /= count;
  56. percent *= 100;
  57. progress.Report(percent);
  58. }
  59. progress.Report(100);
  60. }
  61. }
  62. }