public async Task InitializeAsync(string id) { if (RootContainer == null) { IUserProfileDataManagement userManager = ServiceRegistration.Get <IUserProfileDataManagement>(); ClientName = $"DLNA ({id})"; var profile = await userManager.GetProfileByNameAsync(ClientName); if (profile.Success) { ClientId = profile.Result.ProfileId; } else { ClientId = await userManager.CreateProfileAsync(ClientName, UserProfileType.ClientProfile, ""); } await userManager.LoginProfileAsync(ClientId); if (UserId.HasValue) { await InitializeUserAsync(); } InitialiseContainerTree(); } }
public async Task <UserProfile> GetOrCreateDefaultUser() { await _lock.WaitAsync(); try { Guid systemId = Guid.Parse(ServiceRegistration.Get <ISystemResolver>().LocalSystemId); IUserProfileDataManagement updm = UserProfileDataManagement; if (updm == null) { return(null); } var result = await updm.GetProfileAsync(systemId); if (result.Success) { return(result.Result); } // First check if there is an "old" client profile with same name but different ID. This happens only for older versions. // This needs to be done to avoid unique constraint violations when creating the new profile by name. // If client profile exists rename it and convert it to a user profile so it can be deleted or used otherwise. string profileName = SystemInformation.ComputerName; var existingProfile = await updm.GetProfileByNameAsync(profileName); if (existingProfile.Success && existingProfile.Result.ProfileId != systemId) { if (await updm.ChangeProfileIdAsync(existingProfile.Result.ProfileId, systemId)) { result = await updm.GetProfileAsync(systemId); if (result.Success) { return(result.Result); } } } // Create a login profile which uses the LocalSystemId and the associated ComputerName Guid profileId = await updm.CreateClientProfileAsync(systemId, profileName); result = await updm.GetProfileAsync(profileId); if (result.Success) { return(result.Result); } return(null); } finally { _lock.Release(); } }