diff --git a/MediaBrowser.Server.Implementations/EntryPoints/RefreshUsersMetadata.cs b/MediaBrowser.Server.Implementations/EntryPoints/RefreshUsersMetadata.cs index 0f35a766a7..a0b7ff515c 100644 --- a/MediaBrowser.Server.Implementations/EntryPoints/RefreshUsersMetadata.cs +++ b/MediaBrowser.Server.Implementations/EntryPoints/RefreshUsersMetadata.cs @@ -28,18 +28,7 @@ namespace MediaBrowser.Server.Implementations.EntryPoints /// public async void Run() { - #if __MonoCS__ - try - { - await _userManager.RefreshUsersMetadata(CancellationToken.None).ConfigureAwait(false); - } - catch - { - System.Console.WriteLine("RefreshUsersMetadata task error: No users? First time running?"); - } - #else await _userManager.RefreshUsersMetadata(CancellationToken.None).ConfigureAwait(false); - #endif } /// diff --git a/MediaBrowser.Server.Implementations/Library/UserManager.cs b/MediaBrowser.Server.Implementations/Library/UserManager.cs index 4243aecfe7..a6d6704832 100644 --- a/MediaBrowser.Server.Implementations/Library/UserManager.cs +++ b/MediaBrowser.Server.Implementations/Library/UserManager.cs @@ -21,40 +21,11 @@ namespace MediaBrowser.Server.Implementations.Library /// public class UserManager : IUserManager { - /// - /// The _users - /// - private IEnumerable _users; - /// - /// The _user lock - /// - private object _usersSyncLock = new object(); - /// - /// The _users initialized - /// - private bool _usersInitialized; /// /// Gets the users. /// /// The users. - public IEnumerable Users - { - get - { - // Call ToList to exhaust the stream because we'll be iterating over this multiple times - LazyInitializer.EnsureInitialized(ref _users, ref _usersInitialized, ref _usersSyncLock, LoadUsers); - return _users; - } - internal set - { - _users = value; - - if (value == null) - { - _usersInitialized = false; - } - } - } + public IEnumerable Users { get; private set; } /// /// The _logger @@ -78,11 +49,13 @@ namespace MediaBrowser.Server.Implementations.Library /// /// The logger. /// The configuration manager. + /// The user repository. public UserManager(ILogger logger, IServerConfigurationManager configurationManager, IUserRepository userRepository) { _logger = logger; UserRepository = userRepository; ConfigurationManager = configurationManager; + Users = new List(); } #region UserUpdated Event @@ -132,6 +105,11 @@ namespace MediaBrowser.Server.Implementations.Library return Users.FirstOrDefault(u => u.Id == id); } + public async Task Initialize() + { + Users = await LoadUsers().ConfigureAwait(false); + } + /// /// Authenticates a User and returns a result indicating whether or not it succeeded /// @@ -185,7 +163,7 @@ namespace MediaBrowser.Server.Implementations.Library /// Loads the users from the repository /// /// IEnumerable{User}. - private IEnumerable LoadUsers() + private async Task> LoadUsers() { var users = UserRepository.RetrieveAllUsers().ToList(); @@ -198,10 +176,7 @@ namespace MediaBrowser.Server.Implementations.Library user.DateLastSaved = DateTime.UtcNow; - var task = UserRepository.SaveUser(user, CancellationToken.None); - - // Hate having to block threads - Task.WaitAll(task); + await UserRepository.SaveUser(user, CancellationToken.None).ConfigureAwait(false); users.Add(user); } @@ -284,7 +259,7 @@ namespace MediaBrowser.Server.Implementations.Library } public event EventHandler> UserCreated; - + /// /// Creates the user. /// @@ -311,11 +286,11 @@ namespace MediaBrowser.Server.Implementations.Library Users = list; user.DateLastSaved = DateTime.UtcNow; - + await UserRepository.SaveUser(user, CancellationToken.None).ConfigureAwait(false); EventHelper.QueueEventIfNotNull(UserCreated, this, new GenericEventArgs { Argument = user }, _logger); - + return user; } diff --git a/MediaBrowser.ServerApplication/ApplicationHost.cs b/MediaBrowser.ServerApplication/ApplicationHost.cs index 5e6a156bb0..00db91f41f 100644 --- a/MediaBrowser.ServerApplication/ApplicationHost.cs +++ b/MediaBrowser.ServerApplication/ApplicationHost.cs @@ -292,6 +292,8 @@ namespace MediaBrowser.ServerApplication await Task.WhenAll(itemsTask, displayPreferencesTask, userdataTask).ConfigureAwait(false); progress.Report(100); + await ((UserManager) UserManager).Initialize().ConfigureAwait(false); + SetKernelProperties(); }