diff --git a/MediaBrowser.Controller/Library/IUserDataManager.cs b/MediaBrowser.Controller/Library/IUserDataManager.cs
index 9db91e7f22..226f77525b 100644
--- a/MediaBrowser.Controller/Library/IUserDataManager.cs
+++ b/MediaBrowser.Controller/Library/IUserDataManager.cs
@@ -1,4 +1,5 @@
-using MediaBrowser.Controller.Entities;
+using System.Collections.Generic;
+using MediaBrowser.Controller.Entities;
using MediaBrowser.Model.Dto;
using MediaBrowser.Model.Entities;
using System;
@@ -43,5 +44,22 @@ namespace MediaBrowser.Controller.Library
/// The user.
/// UserItemDataDto.
UserItemDataDto GetUserDataDto(IHasUserData item, User user);
+
+ ///
+ /// Get all user data for the given user
+ ///
+ ///
+ ///
+ IEnumerable GetAllUserData(Guid userId);
+
+ ///
+ /// Save the all provided user data for the given user
+ ///
+ ///
+ ///
+ ///
+ ///
+ Task SaveAllUserData(Guid userId, IEnumerable userData, CancellationToken cancellationToken);
+
}
}
diff --git a/MediaBrowser.Server.Implementations/Library/UserDataManager.cs b/MediaBrowser.Server.Implementations/Library/UserDataManager.cs
index d3030f31f9..2480d69771 100644
--- a/MediaBrowser.Server.Implementations/Library/UserDataManager.cs
+++ b/MediaBrowser.Server.Implementations/Library/UserDataManager.cs
@@ -1,4 +1,5 @@
-using MediaBrowser.Common.Events;
+using System.Collections.Generic;
+using MediaBrowser.Common.Events;
using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Library;
using MediaBrowser.Controller.Persistence;
@@ -96,6 +97,55 @@ namespace MediaBrowser.Server.Implementations.Library
}, _logger);
}
+ ///
+ /// Save the provided user data for the given user. Batch operation. Does not fire any events or update the cache.
+ ///
+ ///
+ ///
+ ///
+ ///
+ public async Task SaveAllUserData(Guid userId, IEnumerable userData, CancellationToken cancellationToken)
+ {
+ if (userData == null)
+ {
+ throw new ArgumentNullException("userData");
+ }
+ if (userId == Guid.Empty)
+ {
+ throw new ArgumentNullException("userId");
+ }
+
+ cancellationToken.ThrowIfCancellationRequested();
+
+ try
+ {
+ await Repository.SaveAllUserData(userId, userData, cancellationToken).ConfigureAwait(false);
+
+ }
+ catch (Exception ex)
+ {
+ _logger.ErrorException("Error saving user data", ex);
+
+ throw;
+ }
+
+ }
+
+ ///
+ /// Retrieve all user data for the given user
+ ///
+ ///
+ ///
+ public IEnumerable GetAllUserData(Guid userId)
+ {
+ if (userId == Guid.Empty)
+ {
+ throw new ArgumentNullException("userId");
+ }
+
+ return Repository.GetAllUserData(userId);
+ }
+
///
/// Gets the user data.
///