diff options
Diffstat (limited to 'MediaBrowser.Controller')
| -rw-r--r-- | MediaBrowser.Controller/Entities/BaseItem.cs | 110 | ||||
| -rw-r--r-- | MediaBrowser.Controller/Entities/Folder.cs | 104 | ||||
| -rw-r--r-- | MediaBrowser.Controller/Library/DtoBuilder.cs | 31 | ||||
| -rw-r--r-- | MediaBrowser.Controller/Library/ILibraryManager.cs | 9 | ||||
| -rw-r--r-- | MediaBrowser.Controller/Library/IUserManager.cs | 47 | ||||
| -rw-r--r-- | MediaBrowser.Controller/Persistence/IDisplayPreferencesRepository.cs | 21 | ||||
| -rw-r--r-- | MediaBrowser.Controller/Persistence/IUserDataRepository.cs | 20 | ||||
| -rw-r--r-- | MediaBrowser.Controller/Sorting/IUserBaseItemComparer.cs | 7 |
8 files changed, 92 insertions, 257 deletions
diff --git a/MediaBrowser.Controller/Entities/BaseItem.cs b/MediaBrowser.Controller/Entities/BaseItem.cs index d30f11f7d..411190d77 100644 --- a/MediaBrowser.Controller/Entities/BaseItem.cs +++ b/MediaBrowser.Controller/Entities/BaseItem.cs @@ -797,109 +797,6 @@ namespace MediaBrowser.Controller.Entities } /// <summary> - /// The _user data - /// </summary> - private IEnumerable<UserItemData> _userData; - /// <summary> - /// The _user data initialized - /// </summary> - private bool _userDataInitialized; - /// <summary> - /// The _user data sync lock - /// </summary> - private object _userDataSyncLock = new object(); - /// <summary> - /// Gets the user data. - /// </summary> - /// <value>The user data.</value> - [IgnoreDataMember] - public IEnumerable<UserItemData> UserData - { - get - { - // Call ToList to exhaust the stream because we'll be iterating over this multiple times - LazyInitializer.EnsureInitialized(ref _userData, ref _userDataInitialized, ref _userDataSyncLock, () => Kernel.Instance.UserDataRepository.RetrieveUserData(this).ToList()); - return _userData; - } - private set - { - _userData = value; - - if (value == null) - { - _userDataInitialized = false; - } - } - } - - /// <summary> - /// Gets the user data. - /// </summary> - /// <param name="user">The user.</param> - /// <param name="createIfNull">if set to <c>true</c> [create if null].</param> - /// <returns>UserItemData.</returns> - /// <exception cref="System.ArgumentNullException"></exception> - public UserItemData GetUserData(User user, bool createIfNull) - { - if (user == null) - { - throw new ArgumentNullException(); - } - - if (UserData == null) - { - if (!createIfNull) - { - return null; - } - - AddOrUpdateUserData(user, new UserItemData { UserId = user.Id }); - } - - var data = UserData.FirstOrDefault(u => u.UserId == user.Id); - - if (data == null && createIfNull) - { - data = new UserItemData { UserId = user.Id }; - AddOrUpdateUserData(user, data); - } - - return data; - } - - /// <summary> - /// Adds the or update user data. - /// </summary> - /// <param name="user">The user.</param> - /// <param name="data">The data.</param> - /// <exception cref="System.ArgumentNullException"></exception> - public void AddOrUpdateUserData(User user, UserItemData data) - { - if (user == null) - { - throw new ArgumentNullException(); - } - - if (data == null) - { - throw new ArgumentNullException(); - } - - data.UserId = user.Id; - - if (UserData == null) - { - UserData = new[] { data }; - } - else - { - var list = UserData.Where(u => u.UserId != user.Id).ToList(); - list.Add(data); - UserData = list; - } - } - - /// <summary> /// The _user data id /// </summary> protected Guid _userDataId; //cache this so it doesn't have to be re-constructed on every reference @@ -1205,16 +1102,17 @@ namespace MediaBrowser.Controller.Entities /// </summary> /// <param name="user">The user.</param> /// <param name="wasPlayed">if set to <c>true</c> [was played].</param> + /// <param name="userManager">The user manager.</param> /// <returns>Task.</returns> /// <exception cref="System.ArgumentNullException"></exception> - public virtual Task SetPlayedStatus(User user, bool wasPlayed, IUserManager userManager) + public virtual async Task SetPlayedStatus(User user, bool wasPlayed, IUserManager userManager) { if (user == null) { throw new ArgumentNullException(); } - var data = GetUserData(user, true); + var data = await userManager.GetUserData(user.Id, UserDataId).ConfigureAwait(false); if (wasPlayed) { @@ -1237,7 +1135,7 @@ namespace MediaBrowser.Controller.Entities data.Played = wasPlayed; - return userManager.SaveUserDataForItem(user, this, data); + await userManager.SaveUserData(user.Id, UserDataId, data, CancellationToken.None).ConfigureAwait(false); } /// <summary> diff --git a/MediaBrowser.Controller/Entities/Folder.cs b/MediaBrowser.Controller/Entities/Folder.cs index 5a61844c2..05ee87def 100644 --- a/MediaBrowser.Controller/Entities/Folder.cs +++ b/MediaBrowser.Controller/Entities/Folder.cs @@ -74,109 +74,6 @@ namespace MediaBrowser.Controller.Entities } } - /// <summary> - /// The _display prefs - /// </summary> - private IEnumerable<DisplayPreferences> _displayPreferences; - /// <summary> - /// The _display prefs initialized - /// </summary> - private bool _displayPreferencesInitialized; - /// <summary> - /// The _display prefs sync lock - /// </summary> - private object _displayPreferencesSyncLock = new object(); - /// <summary> - /// Gets the display prefs. - /// </summary> - /// <value>The display prefs.</value> - [IgnoreDataMember] - public IEnumerable<DisplayPreferences> 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; - } - } - } - - /// <summary> - /// Gets the display prefs. - /// </summary> - /// <param name="user">The user.</param> - /// <param name="createIfNull">if set to <c>true</c> [create if null].</param> - /// <returns>DisplayPreferences.</returns> - /// <exception cref="System.ArgumentNullException"></exception> - 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; - } - - /// <summary> - /// Adds the or update display prefs. - /// </summary> - /// <param name="user">The user.</param> - /// <param name="data">The data.</param> - /// <exception cref="System.ArgumentNullException"></exception> - 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 /// <summary> @@ -902,6 +799,7 @@ namespace MediaBrowser.Controller.Entities /// </summary> /// <param name="user">The user.</param> /// <param name="wasPlayed">if set to <c>true</c> [was played].</param> + /// <param name="userManager">The user manager.</param> /// <returns>Task.</returns> public override async Task SetPlayedStatus(User user, bool wasPlayed, IUserManager userManager) { diff --git a/MediaBrowser.Controller/Library/DtoBuilder.cs b/MediaBrowser.Controller/Library/DtoBuilder.cs index 36c7eba1f..d9244c64c 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; } /// <summary> @@ -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,21 +163,20 @@ namespace MediaBrowser.Controller.Library /// <param name="item">The item.</param> /// <param name="user">The user.</param> /// <param name="fields">The fields.</param> - private void AttachUserSpecificInfo(BaseItemDto dto, BaseItem item, User user, List<ItemFields> fields) + private async Task AttachUserSpecificInfo(BaseItemDto dto, BaseItem item, User user, List<ItemFields> fields) { if (fields.Contains(ItemFields.UserData)) { - var userData = item.GetUserData(user, false); + var userData = await _userManager.GetUserData(user.Id, item.UserDataId).ConfigureAwait(false); - if (userData != null) - { - dto.UserData = GetUserItemDataDto(userData); - } + dto.UserData = GetUserItemDataDto(userData); } 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) @@ -187,11 +188,11 @@ namespace MediaBrowser.Controller.Library // Skip sorting since all we want is a count dto.ChildCount = folder.GetChildren(user).Count(); - SetSpecialCounts(folder, user, dto); + await SetSpecialCounts(folder, user, dto, _userManager).ConfigureAwait(false); } } } - + /// <summary> /// Attaches the primary image aspect ratio. /// </summary> @@ -484,7 +485,9 @@ namespace MediaBrowser.Controller.Library /// <param name="folder">The folder.</param> /// <param name="user">The user.</param> /// <param name="dto">The dto.</param> - private static void SetSpecialCounts(Folder folder, User user, BaseItemDto dto) + /// <param name="userManager">The user manager.</param> + /// <returns>Task.</returns> + private static async Task SetSpecialCounts(Folder folder, User user, BaseItemDto dto, IUserManager userManager) { var rcentlyAddedItemCount = 0; var recursiveItemCount = 0; @@ -494,7 +497,7 @@ namespace MediaBrowser.Controller.Library // Loop through each recursive child foreach (var child in folder.GetRecursiveChildren(user).Where(i => !i.IsFolder)) { - var userdata = child.GetUserData(user, false); + var userdata = await userManager.GetUserData(user.Id, child.UserDataId).ConfigureAwait(false); recursiveItemCount++; diff --git a/MediaBrowser.Controller/Library/ILibraryManager.cs b/MediaBrowser.Controller/Library/ILibraryManager.cs index 1b9d2f4b2..da2f46abb 100644 --- a/MediaBrowser.Controller/Library/ILibraryManager.cs +++ b/MediaBrowser.Controller/Library/ILibraryManager.cs @@ -108,15 +108,6 @@ namespace MediaBrowser.Controller.Library Task ValidateMediaLibrary(IProgress<double> progress, CancellationToken cancellationToken); /// <summary> - /// Saves display preferences for a Folder - /// </summary> - /// <param name="user">The user.</param> - /// <param name="folder">The folder.</param> - /// <param name="data">The data.</param> - /// <returns>Task.</returns> - Task SaveDisplayPreferencesForFolder(User user, Folder folder, DisplayPreferences data); - - /// <summary> /// Gets the default view. /// </summary> /// <returns>IEnumerable{VirtualFolderInfo}.</returns> diff --git a/MediaBrowser.Controller/Library/IUserManager.cs b/MediaBrowser.Controller/Library/IUserManager.cs index 229e4cb76..8374c6880 100644 --- a/MediaBrowser.Controller/Library/IUserManager.cs +++ b/MediaBrowser.Controller/Library/IUserManager.cs @@ -1,6 +1,7 @@ using MediaBrowser.Common.Events; using MediaBrowser.Controller.Entities; using MediaBrowser.Model.Connectivity; +using MediaBrowser.Model.Entities; using System; using System.Collections.Generic; using System.Threading; @@ -157,14 +158,6 @@ namespace MediaBrowser.Controller.Library Task OnPlaybackStopped(User user, BaseItem item, long? positionTicks, string clientType, string deviceId, string deviceName); /// <summary> - /// Saves user data for an item - /// </summary> - /// <param name="user">The user.</param> - /// <param name="item">The item.</param> - /// <param name="data">The data.</param> - Task SaveUserDataForItem(User user, BaseItem item, UserItemData data); - - /// <summary> /// Resets the password. /// </summary> /// <param name="user">The user.</param> @@ -178,5 +171,43 @@ namespace MediaBrowser.Controller.Library /// <param name="newPassword">The new password.</param> /// <returns>Task.</returns> Task ChangePassword(User user, string newPassword); + + /// <summary> + /// Saves display preferences for an item + /// </summary> + /// <param name="userId">The user id.</param> + /// <param name="userDataId">The user data id.</param> + /// <param name="userData">The user data.</param> + /// <param name="cancellationToken">The cancellation token.</param> + /// <returns>Task.</returns> + Task SaveUserData(Guid userId, Guid userDataId, UserItemData userData, + CancellationToken cancellationToken); + + /// <summary> + /// Gets the display preferences. + /// </summary> + /// <param name="userId">The user id.</param> + /// <param name="userDataId">The user data id.</param> + /// <returns>Task{DisplayPreferences}.</returns> + Task<UserItemData> GetUserData(Guid userId, Guid userDataId); + + /// <summary> + /// Gets the display preferences. + /// </summary> + /// <param name="userId">The user id.</param> + /// <param name="displayPreferencesId">The display preferences id.</param> + /// <returns>DisplayPreferences.</returns> + Task<DisplayPreferences> GetDisplayPreferences(Guid userId, Guid displayPreferencesId); + + /// <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> + 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 6f03810c2..eb43c8ca5 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 /// <summary> /// Saves display preferences for an item /// </summary> - /// <param name="item">The item.</param> + /// <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> - Task SaveDisplayPreferences(Folder item, CancellationToken cancellationToken); + Task SaveDisplayPreferences(Guid userId, Guid displayPreferencesId, DisplayPreferences displayPreferences, + CancellationToken cancellationToken); /// <summary> - /// Gets display preferences for an item + /// Gets the display preferences. /// </summary> - /// <param name="item">The item.</param> - /// <returns>IEnumerable{DisplayPreferences}.</returns> - IEnumerable<DisplayPreferences> RetrieveDisplayPreferences(Folder item); + /// <param name="userId">The user id.</param> + /// <param name="displayPreferencesId">The display preferences id.</param> + /// <returns>Task{DisplayPreferences}.</returns> + Task<DisplayPreferences> GetDisplayPreferences(Guid userId, Guid displayPreferencesId); } } diff --git a/MediaBrowser.Controller/Persistence/IUserDataRepository.cs b/MediaBrowser.Controller/Persistence/IUserDataRepository.cs index 115bd411a..592206faf 100644 --- a/MediaBrowser.Controller/Persistence/IUserDataRepository.cs +++ b/MediaBrowser.Controller/Persistence/IUserDataRepository.cs @@ -1,5 +1,5 @@ using MediaBrowser.Controller.Entities; -using System.Collections.Generic; +using System; using System.Threading; using System.Threading.Tasks; @@ -11,18 +11,22 @@ namespace MediaBrowser.Controller.Persistence public interface IUserDataRepository : IRepository { /// <summary> - /// Saves user data for an item + /// Saves the user data. /// </summary> - /// <param name="item">The item.</param> + /// <param name="userId">The user id.</param> + /// <param name="userDataId">The user data id.</param> + /// <param name="userData">The user data.</param> /// <param name="cancellationToken">The cancellation token.</param> /// <returns>Task.</returns> - Task SaveUserData(BaseItem item, CancellationToken cancellationToken); + Task SaveUserData(Guid userId, Guid userDataId, UserItemData userData, + CancellationToken cancellationToken); /// <summary> - /// Gets user data for an item + /// Gets the user data. /// </summary> - /// <param name="item">The item.</param> - /// <returns>IEnumerable{UserItemData}.</returns> - IEnumerable<UserItemData> RetrieveUserData(BaseItem item); + /// <param name="userId">The user id.</param> + /// <param name="userDataId">The user data id.</param> + /// <returns>Task{UserItemData}.</returns> + Task<UserItemData> GetUserData(Guid userId, Guid userDataId); } } diff --git a/MediaBrowser.Controller/Sorting/IUserBaseItemComparer.cs b/MediaBrowser.Controller/Sorting/IUserBaseItemComparer.cs index b9da1f6a6..76d84a653 100644 --- a/MediaBrowser.Controller/Sorting/IUserBaseItemComparer.cs +++ b/MediaBrowser.Controller/Sorting/IUserBaseItemComparer.cs @@ -1,4 +1,5 @@ using MediaBrowser.Controller.Entities; +using MediaBrowser.Controller.Library; namespace MediaBrowser.Controller.Sorting { @@ -12,5 +13,11 @@ namespace MediaBrowser.Controller.Sorting /// </summary> /// <value>The user.</value> User User { get; set; } + + /// <summary> + /// Gets or sets the user manager. + /// </summary> + /// <value>The user manager.</value> + IUserManager UserManager { get; set; } } } |
