< Summary - Jellyfin

Information
Class: MediaBrowser.XbmcMetadata.NfoUserDataSaver
Assembly: MediaBrowser.XbmcMetadata
File(s): /srv/git/jellyfin/MediaBrowser.XbmcMetadata/NfoUserDataSaver.cs
Line coverage
100%
Covered lines: 9
Uncovered lines: 0
Coverable lines: 9
Total lines: 87
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%
StartAsync(...)100%11100%
StopAsync(...)100%11100%

File(s)

/srv/git/jellyfin/MediaBrowser.XbmcMetadata/NfoUserDataSaver.cs

#LineLine coverage
 1using System;
 2using System.Threading;
 3using System.Threading.Tasks;
 4using MediaBrowser.Common.Configuration;
 5using MediaBrowser.Controller.Library;
 6using MediaBrowser.Controller.Providers;
 7using MediaBrowser.Model.Entities;
 8using MediaBrowser.XbmcMetadata.Configuration;
 9using MediaBrowser.XbmcMetadata.Savers;
 10using Microsoft.Extensions.Hosting;
 11using Microsoft.Extensions.Logging;
 12
 13namespace MediaBrowser.XbmcMetadata;
 14
 15/// <summary>
 16/// <see cref="IHostedService"/> responsible for updating NFO files' user data.
 17/// </summary>
 18public sealed class NfoUserDataSaver : IHostedService
 19{
 20    private readonly ILogger<NfoUserDataSaver> _logger;
 21    private readonly IConfigurationManager _config;
 22    private readonly IUserDataManager _userDataManager;
 23    private readonly IProviderManager _providerManager;
 24
 25    /// <summary>
 26    /// Initializes a new instance of the <see cref="NfoUserDataSaver"/> class.
 27    /// </summary>
 28    /// <param name="logger">The <see cref="ILogger"/>.</param>
 29    /// <param name="config">The <see cref="IConfigurationManager"/>.</param>
 30    /// <param name="userDataManager">The <see cref="IUserDataManager"/>.</param>
 31    /// <param name="providerManager">The <see cref="IProviderManager"/>.</param>
 32    public NfoUserDataSaver(
 33        ILogger<NfoUserDataSaver> logger,
 34        IConfigurationManager config,
 35        IUserDataManager userDataManager,
 36        IProviderManager providerManager)
 37    {
 2238        _logger = logger;
 2239        _config = config;
 2240        _userDataManager = userDataManager;
 2241        _providerManager = providerManager;
 2242    }
 43
 44    /// <inheritdoc />
 45    public Task StartAsync(CancellationToken cancellationToken)
 46    {
 2247        _userDataManager.UserDataSaved += OnUserDataSaved;
 2248        return Task.CompletedTask;
 49    }
 50
 51    /// <inheritdoc />
 52    public Task StopAsync(CancellationToken cancellationToken)
 53    {
 2254        _userDataManager.UserDataSaved -= OnUserDataSaved;
 2255        return Task.CompletedTask;
 56    }
 57
 58    private async void OnUserDataSaved(object? sender, UserDataSaveEventArgs e)
 59    {
 60        if (e.SaveReason is not (UserDataSaveReason.PlaybackFinished
 61            or UserDataSaveReason.TogglePlayed or UserDataSaveReason.UpdateUserRating))
 62        {
 63            return;
 64        }
 65
 66        if (string.IsNullOrWhiteSpace(_config.GetNfoConfiguration().UserId))
 67        {
 68            return;
 69        }
 70
 71        var item = e.Item;
 72        if (!item.IsFileProtocol || !item.SupportsLocalMetadata)
 73        {
 74            return;
 75        }
 76
 77        try
 78        {
 79            await _providerManager.SaveMetadataAsync(item, ItemUpdateType.MetadataDownload, [BaseNfoSaver.SaverName])
 80                .ConfigureAwait(false);
 81        }
 82        catch (Exception ex)
 83        {
 84            _logger.LogError(ex, "Error saving metadata for {Path}", item.Path ?? item.Name);
 85        }
 86    }
 87}