aboutsummaryrefslogtreecommitdiff
path: root/Jellyfin.Server.Implementations/Users/DisplayPreferencesManager.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Jellyfin.Server.Implementations/Users/DisplayPreferencesManager.cs')
-rw-r--r--Jellyfin.Server.Implementations/Users/DisplayPreferencesManager.cs165
1 files changed, 86 insertions, 79 deletions
diff --git a/Jellyfin.Server.Implementations/Users/DisplayPreferencesManager.cs b/Jellyfin.Server.Implementations/Users/DisplayPreferencesManager.cs
index 0f21e11a3..0e126fe9a 100644
--- a/Jellyfin.Server.Implementations/Users/DisplayPreferencesManager.cs
+++ b/Jellyfin.Server.Implementations/Users/DisplayPreferencesManager.cs
@@ -1,109 +1,116 @@
-#pragma warning disable CA1307
-#pragma warning disable CA1309
-
using System;
using System.Collections.Generic;
using System.Linq;
-using System.Threading.Tasks;
using Jellyfin.Database.Implementations;
using Jellyfin.Database.Implementations.Entities;
using MediaBrowser.Controller;
using Microsoft.EntityFrameworkCore;
-namespace Jellyfin.Server.Implementations.Users
+namespace Jellyfin.Server.Implementations.Users;
+
+/// <summary>
+/// Manages the storage and retrieval of display preferences through Entity Framework.
+/// </summary>
+public sealed class DisplayPreferencesManager : IDisplayPreferencesManager
{
+ private readonly IDbContextFactory<JellyfinDbContext> _dbContextFactory;
+
/// <summary>
- /// Manages the storage and retrieval of display preferences through Entity Framework.
+ /// Initializes a new instance of the <see cref="DisplayPreferencesManager"/> class.
/// </summary>
- public sealed class DisplayPreferencesManager : IDisplayPreferencesManager, IAsyncDisposable
+ /// <param name="dbContextFactory">The database context factory.</param>
+ public DisplayPreferencesManager(IDbContextFactory<JellyfinDbContext> dbContextFactory)
+ {
+ _dbContextFactory = dbContextFactory;
+ }
+
+ /// <inheritdoc />
+ public DisplayPreferences GetDisplayPreferences(Guid userId, Guid itemId, string client)
{
- private readonly JellyfinDbContext _dbContext;
+ using var dbContext = _dbContextFactory.CreateDbContext();
+ var prefs = dbContext.DisplayPreferences
+ .Include(pref => pref.HomeSections)
+ .FirstOrDefault(pref =>
+ pref.UserId.Equals(userId) && pref.Client == client && pref.ItemId.Equals(itemId));
- /// <summary>
- /// Initializes a new instance of the <see cref="DisplayPreferencesManager"/> class.
- /// </summary>
- /// <param name="dbContextFactory">The database context factory.</param>
- public DisplayPreferencesManager(IDbContextFactory<JellyfinDbContext> dbContextFactory)
+ if (prefs is null)
{
- _dbContext = dbContextFactory.CreateDbContext();
+ prefs = new DisplayPreferences(userId, itemId, client);
+ dbContext.DisplayPreferences.Add(prefs);
+ dbContext.SaveChanges();
}
- /// <inheritdoc />
- public DisplayPreferences GetDisplayPreferences(Guid userId, Guid itemId, string client)
+ return prefs;
+ }
+
+ /// <inheritdoc />
+ public ItemDisplayPreferences GetItemDisplayPreferences(Guid userId, Guid itemId, string client)
+ {
+ using var dbContext = _dbContextFactory.CreateDbContext();
+ var prefs = dbContext.ItemDisplayPreferences
+ .FirstOrDefault(pref => pref.UserId.Equals(userId) && pref.ItemId.Equals(itemId) && pref.Client == client);
+
+ if (prefs is null)
{
- var prefs = _dbContext.DisplayPreferences
- .Include(pref => pref.HomeSections)
- .FirstOrDefault(pref =>
- pref.UserId.Equals(userId) && string.Equals(pref.Client, client) && pref.ItemId.Equals(itemId));
-
- if (prefs is null)
- {
- prefs = new DisplayPreferences(userId, itemId, client);
- _dbContext.DisplayPreferences.Add(prefs);
- }
-
- return prefs;
+ prefs = new ItemDisplayPreferences(userId, Guid.Empty, client);
+ dbContext.ItemDisplayPreferences.Add(prefs);
+ dbContext.SaveChanges();
}
- /// <inheritdoc />
- public ItemDisplayPreferences GetItemDisplayPreferences(Guid userId, Guid itemId, string client)
- {
- var prefs = _dbContext.ItemDisplayPreferences
- .FirstOrDefault(pref => pref.UserId.Equals(userId) && pref.ItemId.Equals(itemId) && string.Equals(pref.Client, client));
+ return prefs;
+ }
- if (prefs is null)
- {
- prefs = new ItemDisplayPreferences(userId, Guid.Empty, client);
- _dbContext.ItemDisplayPreferences.Add(prefs);
- }
+ /// <inheritdoc />
+ public IList<ItemDisplayPreferences> ListItemDisplayPreferences(Guid userId, string client)
+ {
+ using var dbContext = _dbContextFactory.CreateDbContext();
+ return dbContext.ItemDisplayPreferences
+ .Where(prefs => prefs.UserId.Equals(userId) && !prefs.ItemId.Equals(default) && prefs.Client == client)
+ .ToList();
+ }
- return prefs;
- }
+ /// <inheritdoc />
+ public Dictionary<string, string?> ListCustomItemDisplayPreferences(Guid userId, Guid itemId, string client)
+ {
+ using var dbContext = _dbContextFactory.CreateDbContext();
+ return dbContext.CustomItemDisplayPreferences
+ .Where(prefs => prefs.UserId.Equals(userId)
+ && prefs.ItemId.Equals(itemId)
+ && prefs.Client == client)
+ .ToDictionary(prefs => prefs.Key, prefs => prefs.Value);
+ }
- /// <inheritdoc />
- public IList<ItemDisplayPreferences> ListItemDisplayPreferences(Guid userId, string client)
- {
- return _dbContext.ItemDisplayPreferences
- .Where(prefs => prefs.UserId.Equals(userId) && !prefs.ItemId.Equals(default) && string.Equals(prefs.Client, client))
- .ToList();
- }
+ /// <inheritdoc />
+ public void SetCustomItemDisplayPreferences(Guid userId, Guid itemId, string client, Dictionary<string, string?> customPreferences)
+ {
+ using var dbContext = _dbContextFactory.CreateDbContext();
+ dbContext.CustomItemDisplayPreferences.Where(prefs => prefs.UserId.Equals(userId)
+ && prefs.ItemId.Equals(itemId)
+ && prefs.Client == client)
+ .ExecuteDelete();
- /// <inheritdoc />
- public Dictionary<string, string?> ListCustomItemDisplayPreferences(Guid userId, Guid itemId, string client)
+ foreach (var (key, value) in customPreferences)
{
- return _dbContext.CustomItemDisplayPreferences
- .Where(prefs => prefs.UserId.Equals(userId)
- && prefs.ItemId.Equals(itemId)
- && string.Equals(prefs.Client, client))
- .ToDictionary(prefs => prefs.Key, prefs => prefs.Value);
+ dbContext.CustomItemDisplayPreferences
+ .Add(new CustomItemDisplayPreferences(userId, itemId, client, key, value));
}
- /// <inheritdoc />
- public void SetCustomItemDisplayPreferences(Guid userId, Guid itemId, string client, Dictionary<string, string?> customPreferences)
- {
- var existingPrefs = _dbContext.CustomItemDisplayPreferences
- .Where(prefs => prefs.UserId.Equals(userId)
- && prefs.ItemId.Equals(itemId)
- && string.Equals(prefs.Client, client));
- _dbContext.CustomItemDisplayPreferences.RemoveRange(existingPrefs);
-
- foreach (var (key, value) in customPreferences)
- {
- _dbContext.CustomItemDisplayPreferences
- .Add(new CustomItemDisplayPreferences(userId, itemId, client, key, value));
- }
- }
+ dbContext.SaveChanges();
+ }
- /// <inheritdoc />
- public void SaveChanges()
- {
- _dbContext.SaveChanges();
- }
+ /// <inheritdoc/>
+ public void UpdateDisplayPreferences(DisplayPreferences displayPreferences)
+ {
+ using var dbContext = _dbContextFactory.CreateDbContext();
+ dbContext.DisplayPreferences.Attach(displayPreferences).State = EntityState.Modified;
+ dbContext.SaveChanges();
+ }
- /// <inheritdoc />
- public async ValueTask DisposeAsync()
- {
- await _dbContext.DisposeAsync().ConfigureAwait(false);
- }
+ /// <inheritdoc/>
+ public void UpdateItemDisplayPreferences(ItemDisplayPreferences itemDisplayPreferences)
+ {
+ using var dbContext = _dbContextFactory.CreateDbContext();
+ dbContext.ItemDisplayPreferences.Attach(itemDisplayPreferences).State = EntityState.Modified;
+ dbContext.SaveChanges();
}
}