Make CreateUser async

This commit is contained in:
Bond_009
2020-07-22 20:57:29 +02:00
parent 0750357916
commit 6cbfae209d
4 changed files with 31 additions and 25 deletions

View File

@@ -188,8 +188,24 @@ namespace Jellyfin.Server.Implementations.Users
await dbContext.SaveChangesAsync().ConfigureAwait(false);
}
internal async Task<User> CreateUserInternalAsync(string name, JellyfinDb dbContext)
{
// TODO: Remove after user item data is migrated.
var max = await dbContext.Users.AnyAsync().ConfigureAwait(false)
? await dbContext.Users.Select(u => u.InternalId).MaxAsync().ConfigureAwait(false)
: 0;
return new User(
name,
_defaultAuthenticationProvider.GetType().FullName,
_defaultPasswordResetProvider.GetType().FullName)
{
InternalId = max + 1
};
}
/// <inheritdoc/>
public User CreateUser(string name)
public async Task<User> CreateUserAsync(string name)
{
if (!IsValidUsername(name))
{
@@ -198,18 +214,10 @@ namespace Jellyfin.Server.Implementations.Users
using var dbContext = _dbProvider.CreateContext();
// TODO: Remove after user item data is migrated.
var max = dbContext.Users.Any() ? dbContext.Users.Select(u => u.InternalId).Max() : 0;
var newUser = await CreateUserInternalAsync(name, dbContext).ConfigureAwait(false);
var newUser = new User(
name,
_defaultAuthenticationProvider.GetType().FullName,
_defaultPasswordResetProvider.GetType().FullName)
{
InternalId = max + 1
};
dbContext.Users.Add(newUser);
dbContext.SaveChanges();
await dbContext.Users.AddAsync(newUser).ConfigureAwait(false);
await dbContext.SaveChangesAsync().ConfigureAwait(false);
OnUserCreated?.Invoke(this, new GenericEventArgs<User>(newUser));
@@ -572,12 +580,12 @@ namespace Jellyfin.Server.Implementations.Users
}
/// <inheritdoc />
public void Initialize()
public async Task InitializeAsync()
{
// TODO: Refactor the startup wizard so that it doesn't require a user to already exist.
using var dbContext = _dbProvider.CreateContext();
if (dbContext.Users.Any())
if (await dbContext.Users.AnyAsync().ConfigureAwait(false))
{
return;
}
@@ -595,13 +603,13 @@ namespace Jellyfin.Server.Implementations.Users
throw new ArgumentException("Provided username is not valid!", defaultName);
}
var newUser = CreateUser(defaultName);
var newUser = await CreateUserInternalAsync(defaultName, dbContext).ConfigureAwait(false);
newUser.SetPermission(PermissionKind.IsAdministrator, true);
newUser.SetPermission(PermissionKind.EnableContentDeletion, true);
newUser.SetPermission(PermissionKind.EnableRemoteControlOfOtherUsers, true);
dbContext.Users.Update(newUser);
dbContext.SaveChanges();
await dbContext.Users.AddAsync(newUser).ConfigureAwait(false);
await dbContext.SaveChangesAsync().ConfigureAwait(false);
}
/// <inheritdoc/>