From b4dd8a210629bc74445f106e2379b986af9520c5 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Tue, 2 Apr 2013 13:37:49 -0400 Subject: moved displaypreferences to usermanager to solve concurrency issues --- MediaBrowser.Controller/Entities/Folder.cs | 103 --------------------- MediaBrowser.Controller/Library/DtoBuilder.cs | 16 ++-- MediaBrowser.Controller/Library/ILibraryManager.cs | 9 -- MediaBrowser.Controller/Library/IUserManager.cs | 20 ++++ .../Persistence/IDisplayPreferencesRepository.cs | 21 +++-- 5 files changed, 42 insertions(+), 127 deletions(-) (limited to 'MediaBrowser.Controller') diff --git a/MediaBrowser.Controller/Entities/Folder.cs b/MediaBrowser.Controller/Entities/Folder.cs index 5a61844c2b..ce4d629257 100644 --- a/MediaBrowser.Controller/Entities/Folder.cs +++ b/MediaBrowser.Controller/Entities/Folder.cs @@ -74,109 +74,6 @@ namespace MediaBrowser.Controller.Entities } } - /// - /// The _display prefs - /// - private IEnumerable _displayPreferences; - /// - /// The _display prefs initialized - /// - private bool _displayPreferencesInitialized; - /// - /// The _display prefs sync lock - /// - private object _displayPreferencesSyncLock = new object(); - /// - /// Gets the display prefs. - /// - /// The display prefs. - [IgnoreDataMember] - public IEnumerable DisplayPreferences - { - get - { - // Call ToList to exhaust the stream because we'll be iterating over this multiple times - LazyInitializer.EnsureInitialized(ref _displayPreferences, ref _displayPreferencesInitialized, ref _displayPreferencesSyncLock, () => Kernel.Instance.DisplayPreferencesRepository.RetrieveDisplayPreferences(this).ToList()); - return _displayPreferences; - } - private set - { - _displayPreferences = value; - - if (value == null) - { - _displayPreferencesInitialized = false; - } - } - } - - /// - /// Gets the display prefs. - /// - /// The user. - /// if set to true [create if null]. - /// DisplayPreferences. - /// - public DisplayPreferences GetDisplayPreferences(User user, bool createIfNull) - { - if (user == null) - { - throw new ArgumentNullException(); - } - - if (DisplayPreferences == null) - { - if (!createIfNull) - { - return null; - } - - AddOrUpdateDisplayPreferences(user, new DisplayPreferences { UserId = user.Id }); - } - - var data = DisplayPreferences.FirstOrDefault(u => u.UserId == user.Id); - - if (data == null && createIfNull) - { - data = new DisplayPreferences { UserId = user.Id }; - AddOrUpdateDisplayPreferences(user, data); - } - - return data; - } - - /// - /// Adds the or update display prefs. - /// - /// The user. - /// The data. - /// - public void AddOrUpdateDisplayPreferences(User user, DisplayPreferences data) - { - if (user == null) - { - throw new ArgumentNullException(); - } - - if (data == null) - { - throw new ArgumentNullException(); - } - - data.UserId = user.Id; - - if (DisplayPreferences == null) - { - DisplayPreferences = new[] { data }; - } - else - { - var list = DisplayPreferences.Where(u => u.UserId != user.Id).ToList(); - list.Add(data); - DisplayPreferences = list; - } - } - #region Indexing /// diff --git a/MediaBrowser.Controller/Library/DtoBuilder.cs b/MediaBrowser.Controller/Library/DtoBuilder.cs index 36c7eba1fb..419d3527d5 100644 --- a/MediaBrowser.Controller/Library/DtoBuilder.cs +++ b/MediaBrowser.Controller/Library/DtoBuilder.cs @@ -28,11 +28,13 @@ namespace MediaBrowser.Controller.Library private readonly ILogger _logger; private readonly ILibraryManager _libraryManager; + private readonly IUserManager _userManager; - public DtoBuilder(ILogger logger, ILibraryManager libraryManager) + public DtoBuilder(ILogger logger, ILibraryManager libraryManager, IUserManager userManager) { _logger = logger; _libraryManager = libraryManager; + _userManager = userManager; } /// @@ -141,9 +143,9 @@ namespace MediaBrowser.Controller.Library tasks.Add(AttachPeople(dto, item)); } - AttachBasicFields(dto, item, fields); + tasks.Add(AttachUserSpecificInfo(dto, item, user, fields)); - AttachUserSpecificInfo(dto, item, user, fields); + AttachBasicFields(dto, item, fields); // Make sure all the tasks we kicked off have completed. if (tasks.Count > 0) @@ -161,7 +163,7 @@ namespace MediaBrowser.Controller.Library /// The item. /// The user. /// The fields. - private void AttachUserSpecificInfo(BaseItemDto dto, BaseItem item, User user, List fields) + private async Task AttachUserSpecificInfo(BaseItemDto dto, BaseItem item, User user, List fields) { if (fields.Contains(ItemFields.UserData)) { @@ -175,7 +177,9 @@ namespace MediaBrowser.Controller.Library if (item.IsFolder && fields.Contains(ItemFields.DisplayPreferences)) { - dto.DisplayPreferences = ((Folder)item).GetDisplayPreferences(user, false) ?? new DisplayPreferences { UserId = user.Id }; + var displayPreferencesId = ((Folder) item).DisplayPreferencesId; + + dto.DisplayPreferences = await _userManager.GetDisplayPreferences(user.Id, displayPreferencesId).ConfigureAwait(false); } if (item.IsFolder) @@ -191,7 +195,7 @@ namespace MediaBrowser.Controller.Library } } } - + /// /// Attaches the primary image aspect ratio. /// diff --git a/MediaBrowser.Controller/Library/ILibraryManager.cs b/MediaBrowser.Controller/Library/ILibraryManager.cs index 1b9d2f4b2a..da2f46abbd 100644 --- a/MediaBrowser.Controller/Library/ILibraryManager.cs +++ b/MediaBrowser.Controller/Library/ILibraryManager.cs @@ -107,15 +107,6 @@ namespace MediaBrowser.Controller.Library /// Task. Task ValidateMediaLibrary(IProgress progress, CancellationToken cancellationToken); - /// - /// Saves display preferences for a Folder - /// - /// The user. - /// The folder. - /// The data. - /// Task. - Task SaveDisplayPreferencesForFolder(User user, Folder folder, DisplayPreferences data); - /// /// Gets the default view. /// diff --git a/MediaBrowser.Controller/Library/IUserManager.cs b/MediaBrowser.Controller/Library/IUserManager.cs index 229e4cb766..0e93c15cfb 100644 --- a/MediaBrowser.Controller/Library/IUserManager.cs +++ b/MediaBrowser.Controller/Library/IUserManager.cs @@ -5,6 +5,7 @@ using System; using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; +using MediaBrowser.Model.Entities; namespace MediaBrowser.Controller.Library { @@ -178,5 +179,24 @@ namespace MediaBrowser.Controller.Library /// The new password. /// Task. Task ChangePassword(User user, string newPassword); + + /// + /// Gets the display preferences. + /// + /// The user id. + /// The display preferences id. + /// DisplayPreferences. + Task GetDisplayPreferences(Guid userId, Guid displayPreferencesId); + + /// + /// Saves display preferences for an item + /// + /// The user id. + /// The display preferences id. + /// The display preferences. + /// The cancellation token. + /// Task. + Task SaveDisplayPreferences(Guid userId, Guid displayPreferencesId, DisplayPreferences displayPreferences, + CancellationToken cancellationToken); } } diff --git a/MediaBrowser.Controller/Persistence/IDisplayPreferencesRepository.cs b/MediaBrowser.Controller/Persistence/IDisplayPreferencesRepository.cs index 6f03810c23..eb43c8ca5b 100644 --- a/MediaBrowser.Controller/Persistence/IDisplayPreferencesRepository.cs +++ b/MediaBrowser.Controller/Persistence/IDisplayPreferencesRepository.cs @@ -1,6 +1,5 @@ -using MediaBrowser.Controller.Entities; -using MediaBrowser.Model.Entities; -using System.Collections.Generic; +using MediaBrowser.Model.Entities; +using System; using System.Threading; using System.Threading.Tasks; @@ -14,16 +13,20 @@ namespace MediaBrowser.Controller.Persistence /// /// Saves display preferences for an item /// - /// The item. + /// The user id. + /// The display preferences id. + /// The display preferences. /// The cancellation token. /// Task. - Task SaveDisplayPreferences(Folder item, CancellationToken cancellationToken); + Task SaveDisplayPreferences(Guid userId, Guid displayPreferencesId, DisplayPreferences displayPreferences, + CancellationToken cancellationToken); /// - /// Gets display preferences for an item + /// Gets the display preferences. /// - /// The item. - /// IEnumerable{DisplayPreferences}. - IEnumerable RetrieveDisplayPreferences(Folder item); + /// The user id. + /// The display preferences id. + /// Task{DisplayPreferences}. + Task GetDisplayPreferences(Guid userId, Guid displayPreferencesId); } } -- cgit v1.2.3