2
0

StudiosValidator.cs 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. using System;
  2. using System.Threading;
  3. using System.Threading.Tasks;
  4. using MediaBrowser.Controller.Entities;
  5. using MediaBrowser.Controller.Library;
  6. using MediaBrowser.Controller.Persistence;
  7. using Microsoft.Extensions.Logging;
  8. namespace Emby.Server.Implementations.Library.Validators
  9. {
  10. class StudiosValidator
  11. {
  12. /// <summary>
  13. /// The _library manager
  14. /// </summary>
  15. private readonly ILibraryManager _libraryManager;
  16. private readonly IItemRepository _itemRepo;
  17. /// <summary>
  18. /// The _logger
  19. /// </summary>
  20. private readonly ILogger _logger;
  21. public StudiosValidator(ILibraryManager libraryManager, ILogger logger, IItemRepository itemRepo)
  22. {
  23. _libraryManager = libraryManager;
  24. _logger = logger;
  25. _itemRepo = itemRepo;
  26. }
  27. /// <summary>
  28. /// Runs the specified progress.
  29. /// </summary>
  30. /// <param name="progress">The progress.</param>
  31. /// <param name="cancellationToken">The cancellation token.</param>
  32. /// <returns>Task.</returns>
  33. public async Task Run(IProgress<double> progress, CancellationToken cancellationToken)
  34. {
  35. var names = _itemRepo.GetStudioNames();
  36. var numComplete = 0;
  37. var count = names.Count;
  38. foreach (var name in names)
  39. {
  40. try
  41. {
  42. var item = _libraryManager.GetStudio(name);
  43. await item.RefreshMetadata(cancellationToken).ConfigureAwait(false);
  44. }
  45. catch (OperationCanceledException)
  46. {
  47. // Don't clutter the log
  48. throw;
  49. }
  50. catch (Exception ex)
  51. {
  52. _logger.LogError(ex, "Error refreshing {StudioName}", name);
  53. }
  54. numComplete++;
  55. double percent = numComplete;
  56. percent /= count;
  57. percent *= 100;
  58. progress.Report(percent);
  59. }
  60. var deadEntities = _libraryManager.GetItemList(new InternalItemsQuery
  61. {
  62. IncludeItemTypes = new[] { typeof(Studio).Name },
  63. IsDeadStudio = true,
  64. IsLocked = false
  65. });
  66. foreach (var item in deadEntities)
  67. {
  68. _logger.LogInformation("Deleting dead {2} {0} {1}.", item.Id.ToString("N"), item.Name, item.GetType().Name);
  69. _libraryManager.DeleteItem(item, new DeleteOptions
  70. {
  71. DeleteFileLocation = false
  72. }, false);
  73. }
  74. progress.Report(100);
  75. }
  76. }
  77. }