< Summary - Jellyfin

Information
Class: Jellyfin.Server.Implementations.Activity.ActivityManager
Assembly: Jellyfin.Server.Implementations
File(s): /srv/git/jellyfin/Jellyfin.Server.Implementations/Activity/ActivityManager.cs
Line coverage
100%
Covered lines: 11
Uncovered lines: 0
Coverable lines: 11
Total lines: 102
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%
ConvertToOldModel(...)100%11100%

File(s)

/srv/git/jellyfin/Jellyfin.Server.Implementations/Activity/ActivityManager.cs

#LineLine coverage
 1using System;
 2using System.Linq;
 3using System.Threading.Tasks;
 4using Jellyfin.Data.Entities;
 5using Jellyfin.Data.Events;
 6using Jellyfin.Data.Queries;
 7using MediaBrowser.Model.Activity;
 8using MediaBrowser.Model.Querying;
 9using Microsoft.EntityFrameworkCore;
 10
 11namespace Jellyfin.Server.Implementations.Activity
 12{
 13    /// <summary>
 14    /// Manages the storage and retrieval of <see cref="ActivityLog"/> instances.
 15    /// </summary>
 16    public class ActivityManager : IActivityManager
 17    {
 18        private readonly IDbContextFactory<JellyfinDbContext> _provider;
 19
 20        /// <summary>
 21        /// Initializes a new instance of the <see cref="ActivityManager"/> class.
 22        /// </summary>
 23        /// <param name="provider">The Jellyfin database provider.</param>
 24        public ActivityManager(IDbContextFactory<JellyfinDbContext> provider)
 25        {
 2226            _provider = provider;
 2227        }
 28
 29        /// <inheritdoc/>
 30        public event EventHandler<GenericEventArgs<ActivityLogEntry>>? EntryCreated;
 31
 32        /// <inheritdoc/>
 33        public async Task CreateAsync(ActivityLog entry)
 34        {
 35            var dbContext = await _provider.CreateDbContextAsync().ConfigureAwait(false);
 36            await using (dbContext.ConfigureAwait(false))
 37            {
 38                dbContext.ActivityLogs.Add(entry);
 39                await dbContext.SaveChangesAsync().ConfigureAwait(false);
 40            }
 41
 42            EntryCreated?.Invoke(this, new GenericEventArgs<ActivityLogEntry>(ConvertToOldModel(entry)));
 43        }
 44
 45        /// <inheritdoc/>
 46        public async Task<QueryResult<ActivityLogEntry>> GetPagedResultAsync(ActivityLogQuery query)
 47        {
 48            var dbContext = await _provider.CreateDbContextAsync().ConfigureAwait(false);
 49            await using (dbContext.ConfigureAwait(false))
 50            {
 51                var entries = dbContext.ActivityLogs
 52                    .OrderByDescending(entry => entry.DateCreated)
 53                    .Where(entry => query.MinDate == null || entry.DateCreated >= query.MinDate)
 54                    .Where(entry => !query.HasUserId.HasValue || entry.UserId.Equals(default) != query.HasUserId.Value);
 55
 56                return new QueryResult<ActivityLogEntry>(
 57                    query.Skip,
 58                    await entries.CountAsync().ConfigureAwait(false),
 59                    await entries
 60                        .Skip(query.Skip ?? 0)
 61                        .Take(query.Limit ?? 100)
 62                        .Select(entity => new ActivityLogEntry(entity.Name, entity.Type, entity.UserId)
 63                        {
 64                            Id = entity.Id,
 65                            Overview = entity.Overview,
 66                            ShortOverview = entity.ShortOverview,
 67                            ItemId = entity.ItemId,
 68                            Date = entity.DateCreated,
 69                            Severity = entity.LogSeverity
 70                        })
 71                        .ToListAsync()
 72                        .ConfigureAwait(false));
 73            }
 74        }
 75
 76        /// <inheritdoc />
 77        public async Task CleanAsync(DateTime startDate)
 78        {
 79            var dbContext = await _provider.CreateDbContextAsync().ConfigureAwait(false);
 80            await using (dbContext.ConfigureAwait(false))
 81            {
 82                await dbContext.ActivityLogs
 83                    .Where(entry => entry.DateCreated <= startDate)
 84                    .ExecuteDeleteAsync()
 85                    .ConfigureAwait(false);
 86            }
 87        }
 88
 89        private static ActivityLogEntry ConvertToOldModel(ActivityLog entry)
 90        {
 3691            return new ActivityLogEntry(entry.Name, entry.Type, entry.UserId)
 3692            {
 3693                Id = entry.Id,
 3694                Overview = entry.Overview,
 3695                ShortOverview = entry.ShortOverview,
 3696                ItemId = entry.ItemId,
 3697                Date = entry.DateCreated,
 3698                Severity = entry.LogSeverity
 3699            };
 100        }
 101    }
 102}