DisplayPreferencesManager.cs 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using Jellyfin.Database.Implementations;
  5. using Jellyfin.Database.Implementations.Entities;
  6. using MediaBrowser.Controller;
  7. using Microsoft.EntityFrameworkCore;
  8. namespace Jellyfin.Server.Implementations.Users;
  9. /// <summary>
  10. /// Manages the storage and retrieval of display preferences through Entity Framework.
  11. /// </summary>
  12. public sealed class DisplayPreferencesManager : IDisplayPreferencesManager
  13. {
  14. private readonly IDbContextFactory<JellyfinDbContext> _dbContextFactory;
  15. /// <summary>
  16. /// Initializes a new instance of the <see cref="DisplayPreferencesManager"/> class.
  17. /// </summary>
  18. /// <param name="dbContextFactory">The database context factory.</param>
  19. public DisplayPreferencesManager(IDbContextFactory<JellyfinDbContext> dbContextFactory)
  20. {
  21. _dbContextFactory = dbContextFactory;
  22. }
  23. /// <inheritdoc />
  24. public DisplayPreferences GetDisplayPreferences(Guid userId, Guid itemId, string client)
  25. {
  26. using var dbContext = _dbContextFactory.CreateDbContext();
  27. var prefs = dbContext.DisplayPreferences
  28. .Include(pref => pref.HomeSections)
  29. .FirstOrDefault(pref =>
  30. pref.UserId.Equals(userId) && pref.Client == client && pref.ItemId.Equals(itemId));
  31. if (prefs is null)
  32. {
  33. prefs = new DisplayPreferences(userId, itemId, client);
  34. dbContext.DisplayPreferences.Add(prefs);
  35. dbContext.SaveChanges();
  36. }
  37. return prefs;
  38. }
  39. /// <inheritdoc />
  40. public ItemDisplayPreferences GetItemDisplayPreferences(Guid userId, Guid itemId, string client)
  41. {
  42. using var dbContext = _dbContextFactory.CreateDbContext();
  43. var prefs = dbContext.ItemDisplayPreferences
  44. .FirstOrDefault(pref => pref.UserId.Equals(userId) && pref.ItemId.Equals(itemId) && pref.Client == client);
  45. if (prefs is null)
  46. {
  47. prefs = new ItemDisplayPreferences(userId, Guid.Empty, client);
  48. dbContext.ItemDisplayPreferences.Add(prefs);
  49. dbContext.SaveChanges();
  50. }
  51. return prefs;
  52. }
  53. /// <inheritdoc />
  54. public IList<ItemDisplayPreferences> ListItemDisplayPreferences(Guid userId, string client)
  55. {
  56. using var dbContext = _dbContextFactory.CreateDbContext();
  57. return dbContext.ItemDisplayPreferences
  58. .Where(prefs => prefs.UserId.Equals(userId) && !prefs.ItemId.Equals(default) && prefs.Client == client)
  59. .ToList();
  60. }
  61. /// <inheritdoc />
  62. public Dictionary<string, string?> ListCustomItemDisplayPreferences(Guid userId, Guid itemId, string client)
  63. {
  64. using var dbContext = _dbContextFactory.CreateDbContext();
  65. return dbContext.CustomItemDisplayPreferences
  66. .Where(prefs => prefs.UserId.Equals(userId)
  67. && prefs.ItemId.Equals(itemId)
  68. && prefs.Client == client)
  69. .ToDictionary(prefs => prefs.Key, prefs => prefs.Value);
  70. }
  71. /// <inheritdoc />
  72. public void SetCustomItemDisplayPreferences(Guid userId, Guid itemId, string client, Dictionary<string, string?> customPreferences)
  73. {
  74. using var dbContext = _dbContextFactory.CreateDbContext();
  75. dbContext.CustomItemDisplayPreferences.Where(prefs => prefs.UserId.Equals(userId)
  76. && prefs.ItemId.Equals(itemId)
  77. && prefs.Client == client)
  78. .ExecuteDelete();
  79. foreach (var (key, value) in customPreferences)
  80. {
  81. dbContext.CustomItemDisplayPreferences
  82. .Add(new CustomItemDisplayPreferences(userId, itemId, client, key, value));
  83. }
  84. dbContext.SaveChanges();
  85. }
  86. /// <inheritdoc/>
  87. public void UpdateDisplayPreferences(DisplayPreferences displayPreferences)
  88. {
  89. using var dbContext = _dbContextFactory.CreateDbContext();
  90. dbContext.DisplayPreferences.Attach(displayPreferences).State = EntityState.Modified;
  91. dbContext.SaveChanges();
  92. }
  93. /// <inheritdoc/>
  94. public void UpdateItemDisplayPreferences(ItemDisplayPreferences itemDisplayPreferences)
  95. {
  96. using var dbContext = _dbContextFactory.CreateDbContext();
  97. dbContext.ItemDisplayPreferences.Attach(itemDisplayPreferences).State = EntityState.Modified;
  98. dbContext.SaveChanges();
  99. }
  100. }