mirror of
https://github.com/jellyfin/jellyfin.git
synced 2025-12-24 01:34:45 +03:00
remove JellyfinDbProvider and add second level caching
This commit is contained in:
@@ -15,13 +15,13 @@ namespace Jellyfin.Server.Implementations.Activity
|
||||
/// </summary>
|
||||
public class ActivityManager : IActivityManager
|
||||
{
|
||||
private readonly JellyfinDbProvider _provider;
|
||||
private readonly IDbContextFactory<JellyfinDb> _provider;
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="ActivityManager"/> class.
|
||||
/// </summary>
|
||||
/// <param name="provider">The Jellyfin database provider.</param>
|
||||
public ActivityManager(JellyfinDbProvider provider)
|
||||
public ActivityManager(IDbContextFactory<JellyfinDb> provider)
|
||||
{
|
||||
_provider = provider;
|
||||
}
|
||||
@@ -32,10 +32,12 @@ namespace Jellyfin.Server.Implementations.Activity
|
||||
/// <inheritdoc/>
|
||||
public async Task CreateAsync(ActivityLog entry)
|
||||
{
|
||||
await using var dbContext = _provider.CreateContext();
|
||||
|
||||
dbContext.ActivityLogs.Add(entry);
|
||||
await dbContext.SaveChangesAsync().ConfigureAwait(false);
|
||||
var dbContext = await _provider.CreateDbContextAsync().ConfigureAwait(false);
|
||||
await using (dbContext.ConfigureAwait(false))
|
||||
{
|
||||
dbContext.ActivityLogs.Add(entry);
|
||||
await dbContext.SaveChangesAsync().ConfigureAwait(false);
|
||||
}
|
||||
|
||||
EntryCreated?.Invoke(this, new GenericEventArgs<ActivityLogEntry>(ConvertToOldModel(entry)));
|
||||
}
|
||||
@@ -43,44 +45,47 @@ namespace Jellyfin.Server.Implementations.Activity
|
||||
/// <inheritdoc/>
|
||||
public async Task<QueryResult<ActivityLogEntry>> GetPagedResultAsync(ActivityLogQuery query)
|
||||
{
|
||||
await using var dbContext = _provider.CreateContext();
|
||||
|
||||
IQueryable<ActivityLog> entries = dbContext.ActivityLogs
|
||||
.AsQueryable()
|
||||
.OrderByDescending(entry => entry.DateCreated);
|
||||
|
||||
if (query.MinDate.HasValue)
|
||||
var dbContext = await _provider.CreateDbContextAsync().ConfigureAwait(false);
|
||||
await using (dbContext.ConfigureAwait(false))
|
||||
{
|
||||
entries = entries.Where(entry => entry.DateCreated >= query.MinDate);
|
||||
}
|
||||
IQueryable<ActivityLog> entries = dbContext.ActivityLogs
|
||||
.OrderByDescending(entry => entry.DateCreated);
|
||||
|
||||
if (query.HasUserId.HasValue)
|
||||
{
|
||||
entries = entries.Where(entry => (!entry.UserId.Equals(default)) == query.HasUserId.Value);
|
||||
}
|
||||
if (query.MinDate.HasValue)
|
||||
{
|
||||
entries = entries.Where(entry => entry.DateCreated >= query.MinDate);
|
||||
}
|
||||
|
||||
return new QueryResult<ActivityLogEntry>(
|
||||
query.Skip,
|
||||
await entries.CountAsync().ConfigureAwait(false),
|
||||
await entries
|
||||
.Skip(query.Skip ?? 0)
|
||||
.Take(query.Limit ?? 100)
|
||||
.AsAsyncEnumerable()
|
||||
.Select(ConvertToOldModel)
|
||||
.ToListAsync()
|
||||
.ConfigureAwait(false));
|
||||
if (query.HasUserId.HasValue)
|
||||
{
|
||||
entries = entries.Where(entry => (!entry.UserId.Equals(default)) == query.HasUserId.Value);
|
||||
}
|
||||
|
||||
return new QueryResult<ActivityLogEntry>(
|
||||
query.Skip,
|
||||
await entries.CountAsync().ConfigureAwait(false),
|
||||
await entries
|
||||
.Skip(query.Skip ?? 0)
|
||||
.Take(query.Limit ?? 100)
|
||||
.AsAsyncEnumerable()
|
||||
.Select(ConvertToOldModel)
|
||||
.ToListAsync()
|
||||
.ConfigureAwait(false));
|
||||
}
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public async Task CleanAsync(DateTime startDate)
|
||||
{
|
||||
await using var dbContext = _provider.CreateContext();
|
||||
var entries = dbContext.ActivityLogs
|
||||
.AsQueryable()
|
||||
.Where(entry => entry.DateCreated <= startDate);
|
||||
var dbContext = await _provider.CreateDbContextAsync().ConfigureAwait(false);
|
||||
await using (dbContext.ConfigureAwait(false))
|
||||
{
|
||||
var entries = dbContext.ActivityLogs
|
||||
.Where(entry => entry.DateCreated <= startDate);
|
||||
|
||||
dbContext.RemoveRange(entries);
|
||||
await dbContext.SaveChangesAsync().ConfigureAwait(false);
|
||||
dbContext.RemoveRange(entries);
|
||||
await dbContext.SaveChangesAsync().ConfigureAwait(false);
|
||||
}
|
||||
}
|
||||
|
||||
private static ActivityLogEntry ConvertToOldModel(ActivityLog entry)
|
||||
|
||||
Reference in New Issue
Block a user