diff options
Diffstat (limited to 'MediaBrowser.Server.Implementations/Library/UserManager.cs')
| -rw-r--r-- | MediaBrowser.Server.Implementations/Library/UserManager.cs | 66 |
1 files changed, 64 insertions, 2 deletions
diff --git a/MediaBrowser.Server.Implementations/Library/UserManager.cs b/MediaBrowser.Server.Implementations/Library/UserManager.cs index 49b2a3f18..b17f2955e 100644 --- a/MediaBrowser.Server.Implementations/Library/UserManager.cs +++ b/MediaBrowser.Server.Implementations/Library/UserManager.cs @@ -1,10 +1,12 @@ -using MediaBrowser.Common.Events; +using System.Collections.Concurrent; +using MediaBrowser.Common.Events; using MediaBrowser.Common.Extensions; using MediaBrowser.Controller; using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Library; using MediaBrowser.Model.Connectivity; +using MediaBrowser.Model.Entities; using MediaBrowser.Model.Logging; using System; using System.Collections.Generic; @@ -98,6 +100,11 @@ namespace MediaBrowser.Server.Implementations.Library private IServerConfigurationManager ConfigurationManager { get; set; } /// <summary> + /// The _user data + /// </summary> + private readonly ConcurrentDictionary<string, Task<DisplayPreferences>> _displayPreferences = new ConcurrentDictionary<string, Task<DisplayPreferences>>(); + + /// <summary> /// Initializes a new instance of the <see cref="UserManager" /> class. /// </summary> /// <param name="kernel">The kernel.</param> @@ -157,6 +164,62 @@ namespace MediaBrowser.Server.Implementations.Library #endregion /// <summary> + /// Gets the display preferences. + /// </summary> + /// <param name="userId">The user id.</param> + /// <param name="displayPreferencesId">The display preferences id.</param> + /// <returns>DisplayPreferences.</returns> + public Task<DisplayPreferences> GetDisplayPreferences(Guid userId, Guid displayPreferencesId) + { + var key = userId + displayPreferencesId.ToString(); + + return _displayPreferences.GetOrAdd(key, keyName => RetrieveDisplayPreferences(userId, displayPreferencesId)); + } + + /// <summary> + /// Retrieves the display preferences. + /// </summary> + /// <param name="userId">The user id.</param> + /// <param name="displayPreferencesId">The display preferences id.</param> + /// <returns>DisplayPreferences.</returns> + private async Task<DisplayPreferences> RetrieveDisplayPreferences(Guid userId, Guid displayPreferencesId) + { + var displayPreferences = await Kernel.Instance.DisplayPreferencesRepository.GetDisplayPreferences(userId, displayPreferencesId).ConfigureAwait(false); + + return displayPreferences ?? new DisplayPreferences(); + } + + /// <summary> + /// Saves display preferences for an item + /// </summary> + /// <param name="userId">The user id.</param> + /// <param name="displayPreferencesId">The display preferences id.</param> + /// <param name="displayPreferences">The display preferences.</param> + /// <param name="cancellationToken">The cancellation token.</param> + /// <returns>Task.</returns> + public async Task SaveDisplayPreferences(Guid userId, Guid displayPreferencesId, DisplayPreferences displayPreferences, CancellationToken cancellationToken) + { + var key = userId + displayPreferencesId.ToString(); + var newValue = Task.FromResult(displayPreferences); + + try + { + await Kernel.Instance.DisplayPreferencesRepository.SaveDisplayPreferences(userId, displayPreferencesId, + displayPreferences, + cancellationToken).ConfigureAwait(false); + + // Once it succeeds, put it into the dictionary to make it available to everyone else + _displayPreferences.AddOrUpdate(key, newValue, delegate { return newValue; }); + } + catch (Exception ex) + { + _logger.ErrorException("Error saving display preferences", ex); + + throw; + } + } + + /// <summary> /// Gets a User by Id /// </summary> /// <param name="id">The id.</param> @@ -711,6 +774,5 @@ namespace MediaBrowser.Server.Implementations.Library return Kernel.UserDataRepository.SaveUserData(item, CancellationToken.None); } - } } |
