< Summary - Jellyfin

Information
Class: Jellyfin.Server.Implementations.Events.EventManager
Assembly: Jellyfin.Server.Implementations
File(s): /srv/git/jellyfin/Jellyfin.Server.Implementations/Events/EventManager.cs
Line coverage
100%
Covered lines: 5
Uncovered lines: 0
Coverable lines: 5
Total lines: 65
Line coverage: 100%
Branch coverage
N/A
Covered branches: 0
Total branches: 0
Branch coverage: N/A
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Coverage history

Coverage history 0 25 50 75 100

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%11100%
Publish(...)100%11100%

File(s)

/srv/git/jellyfin/Jellyfin.Server.Implementations/Events/EventManager.cs

#LineLine coverage
 1using System;
 2using System.Threading.Tasks;
 3using MediaBrowser.Controller;
 4using MediaBrowser.Controller.Events;
 5using Microsoft.Extensions.DependencyInjection;
 6using Microsoft.Extensions.Logging;
 7
 8namespace Jellyfin.Server.Implementations.Events
 9{
 10    /// <summary>
 11    /// Handles the firing of events.
 12    /// </summary>
 13    public class EventManager : IEventManager
 14    {
 15        private readonly ILogger<EventManager> _logger;
 16        private readonly IServerApplicationHost _appHost;
 17
 18        /// <summary>
 19        /// Initializes a new instance of the <see cref="EventManager"/> class.
 20        /// </summary>
 21        /// <param name="logger">The logger.</param>
 22        /// <param name="appHost">The application host.</param>
 23        public EventManager(ILogger<EventManager> logger, IServerApplicationHost appHost)
 24        {
 2225            _logger = logger;
 2226            _appHost = appHost;
 2227        }
 28
 29        /// <inheritdoc />
 30        public void Publish<T>(T eventArgs)
 31            where T : EventArgs
 32        {
 1633            PublishInternal(eventArgs).GetAwaiter().GetResult();
 1634        }
 35
 36        /// <inheritdoc />
 37        public async Task PublishAsync<T>(T eventArgs)
 38            where T : EventArgs
 39        {
 40            await PublishInternal(eventArgs).ConfigureAwait(false);
 41        }
 42
 43        private async Task PublishInternal<T>(T eventArgs)
 44            where T : EventArgs
 45        {
 46            using var scope = _appHost.ServiceProvider?.CreateScope();
 47            if (scope is null)
 48            {
 49                return;
 50            }
 51
 52            foreach (var service in scope.ServiceProvider.GetServices<IEventConsumer<T>>())
 53            {
 54                try
 55                {
 56                    await service.OnEvent(eventArgs).ConfigureAwait(false);
 57                }
 58                catch (Exception e)
 59                {
 60                    _logger.LogError(e, "Uncaught exception in EventConsumer {Type}: ", service.GetType());
 61                }
 62            }
 63        }
 64    }
 65}