| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 | using System;using System.Threading.Tasks;using MediaBrowser.Controller;using MediaBrowser.Controller.Events;using Microsoft.Extensions.DependencyInjection;using Microsoft.Extensions.Logging;namespace Jellyfin.Server.Implementations.Events{    /// <summary>    /// Handles the firing of events.    /// </summary>    public class EventManager : IEventManager    {        private readonly ILogger<EventManager> _logger;        private readonly IServerApplicationHost _appHost;        /// <summary>        /// Initializes a new instance of the <see cref="EventManager"/> class.        /// </summary>        /// <param name="logger">The logger.</param>        /// <param name="appHost">The application host.</param>        public EventManager(ILogger<EventManager> logger, IServerApplicationHost appHost)        {            _logger = logger;            _appHost = appHost;        }        /// <inheritdoc />        public void Publish<T>(T eventArgs)            where T : EventArgs        {            PublishInternal(eventArgs).GetAwaiter().GetResult();        }        /// <inheritdoc />        public async Task PublishAsync<T>(T eventArgs)            where T : EventArgs        {            await PublishInternal(eventArgs).ConfigureAwait(false);        }        private async Task PublishInternal<T>(T eventArgs)            where T : EventArgs        {            using var scope = _appHost.ServiceProvider?.CreateScope();            if (scope == null)            {                return;            }            foreach (var service in scope.ServiceProvider.GetServices<IEventConsumer<T>>())            {                try                {                    await service.OnEvent(eventArgs).ConfigureAwait(false);                }                catch (Exception e)                {                    _logger.LogError(e, "Uncaught exception in EventConsumer {Type}: ", service.GetType());                }            }        }    }}
 |