StudiosValidator.cs 2.7 KB

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