| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 | using System;using System.Threading;using System.Threading.Tasks;using MediaBrowser.Controller.Library;using MediaBrowser.Controller.Persistence;using Microsoft.Extensions.Logging;namespace Emby.Server.Implementations.Library.Validators;/// <summary>/// Class MusicGenresValidator./// </summary>public class MusicGenresValidator{    /// <summary>    /// The library manager.    /// </summary>    private readonly ILibraryManager _libraryManager;    /// <summary>    /// The logger.    /// </summary>    private readonly ILogger<MusicGenresValidator> _logger;    private readonly IItemRepository _itemRepo;    /// <summary>    /// Initializes a new instance of the <see cref="MusicGenresValidator" /> class.    /// </summary>    /// <param name="libraryManager">The library manager.</param>    /// <param name="logger">The logger.</param>    /// <param name="itemRepo">The item repository.</param>    public MusicGenresValidator(ILibraryManager libraryManager, ILogger<MusicGenresValidator> logger, IItemRepository itemRepo)    {        _libraryManager = libraryManager;        _logger = logger;        _itemRepo = itemRepo;    }    /// <summary>    /// Runs the specified progress.    /// </summary>    /// <param name="progress">The progress.</param>    /// <param name="cancellationToken">The cancellation token.</param>    /// <returns>Task.</returns>    public async Task Run(IProgress<double> progress, CancellationToken cancellationToken)    {        var names = _itemRepo.GetMusicGenreNames();        var numComplete = 0;        var count = names.Count;        foreach (var name in names)        {            try            {                var item = _libraryManager.GetMusicGenre(name);                await item.RefreshMetadata(cancellationToken).ConfigureAwait(false);            }            catch (OperationCanceledException)            {                // Don't clutter the log                throw;            }            catch (Exception ex)            {                _logger.LogError(ex, "Error refreshing {GenreName}", name);            }            numComplete++;            double percent = numComplete;            percent /= count;            percent *= 100;            progress.Report(percent);        }        progress.Report(100);    }}
 |