| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 | using MediaBrowser.Controller.Library;using MediaBrowser.Controller.Persistence;using MediaBrowser.Model.Entities;using MediaBrowser.Model.Logging;using System;using System.Collections.Concurrent;using System.Threading;using System.Threading.Tasks;namespace MediaBrowser.Server.Implementations.Library{    /// <summary>    /// Class DisplayPreferencesManager    /// </summary>    public class DisplayPreferencesManager : IDisplayPreferencesManager    {        /// <summary>        /// The _logger        /// </summary>        private readonly ILogger _logger;        /// <summary>        /// The _display preferences        /// </summary>        private readonly ConcurrentDictionary<Guid, Task<DisplayPreferences>> _displayPreferences = new ConcurrentDictionary<Guid, Task<DisplayPreferences>>();        /// <summary>        /// Gets the active user repository        /// </summary>        /// <value>The display preferences repository.</value>        public IDisplayPreferencesRepository Repository { get; set; }        /// <summary>        /// Initializes a new instance of the <see cref="DisplayPreferencesManager"/> class.        /// </summary>        /// <param name="logger">The logger.</param>        public DisplayPreferencesManager(ILogger logger)        {            _logger = logger;        }        /// <summary>        /// Gets the display preferences.        /// </summary>        /// <param name="displayPreferencesId">The display preferences id.</param>        /// <returns>DisplayPreferences.</returns>        public Task<DisplayPreferences> GetDisplayPreferences(Guid displayPreferencesId)        {            return _displayPreferences.GetOrAdd(displayPreferencesId, keyName => RetrieveDisplayPreferences(displayPreferencesId));        }        /// <summary>        /// Retrieves the display preferences.        /// </summary>        /// <param name="displayPreferencesId">The display preferences id.</param>        /// <returns>DisplayPreferences.</returns>        private async Task<DisplayPreferences> RetrieveDisplayPreferences(Guid displayPreferencesId)        {            var displayPreferences = await Repository.GetDisplayPreferences(displayPreferencesId).ConfigureAwait(false);            return displayPreferences ?? new DisplayPreferences { Id = displayPreferencesId };        }        /// <summary>        /// Saves display preferences for an item        /// </summary>        /// <param name="displayPreferences">The display preferences.</param>        /// <param name="cancellationToken">The cancellation token.</param>        /// <returns>Task.</returns>        public async Task SaveDisplayPreferences(DisplayPreferences displayPreferences, CancellationToken cancellationToken)        {            if (displayPreferences == null)            {                throw new ArgumentNullException("displayPreferences");            }            if (displayPreferences.Id == Guid.Empty)            {                throw new ArgumentNullException("displayPreferences.Id");            }            try            {                await Repository.SaveDisplayPreferences(displayPreferences,                                                                                        cancellationToken).ConfigureAwait(false);                var newValue = Task.FromResult(displayPreferences);                // Once it succeeds, put it into the dictionary to make it available to everyone else                _displayPreferences.AddOrUpdate(displayPreferences.Id, newValue, delegate { return newValue; });            }            catch (Exception ex)            {                _logger.ErrorException("Error saving display preferences", ex);                throw;            }        }    }}
 |