using AIStudio.Settings; using AIStudio.Tools.PluginSystem; namespace AIStudio.Dialogs.Settings; public partial class SettingsDialogProfiles : SettingsDialogBase { private async Task AddProfile() { var dialogParameters = new DialogParameters { { x => x.IsEditing, false }, }; await this.AddProfile(dialogParameters, isImport: false); } private async Task ImportProfile() { var import = await ConfigurationSnippetImportDialog.ShowAsync(this.DialogService, PluginConfigurationObjectType.PROFILE, T("Import Profile")); if (import?.ConfigurationObject is not Profile profile) return; await this.AddProfile(CreateDialogParameters(profile, isEditing: false), isImport: true); } private async Task AddProfile(DialogParameters dialogParameters, bool isImport) { var dialogReference = await this.DialogService.ShowAsync(T("Add Profile"), dialogParameters, DialogOptions.FULLSCREEN); var dialogResult = await dialogReference.Result; if (dialogResult is null || dialogResult.Canceled) return; // // An organization can lock the import while the user is still filling in the form, e.g., // with a new version of its configuration plugin. Hence, the permission is checked once // more before the imported profile is stored: // if (isImport && !this.SettingsManager.ConfigurationData.App.CanImportConfigurationSnippet(PluginConfigurationObjectType.PROFILE)) return; var addedProfile = (Profile)dialogResult.Data!; addedProfile = addedProfile with { Num = this.SettingsManager.ConfigurationData.NextProfileNum++ }; this.SettingsManager.ConfigurationData.Profiles.Add(addedProfile); await this.SettingsManager.StoreSettings(); await this.MessageBus.SendMessage(this, Event.CONFIGURATION_CHANGED); } private async Task EditProfile(Profile profile) { var dialogReference = await this.DialogService.ShowAsync(T("Edit Profile"), CreateDialogParameters(profile, isEditing: true), DialogOptions.FULLSCREEN); var dialogResult = await dialogReference.Result; if (dialogResult is null || dialogResult.Canceled) return; var editedProfile = (Profile)dialogResult.Data!; this.SettingsManager.ConfigurationData.Profiles[this.SettingsManager.ConfigurationData.Profiles.IndexOf(profile)] = editedProfile; await this.SettingsManager.StoreSettings(); await this.MessageBus.SendMessage(this, Event.CONFIGURATION_CHANGED); } private async Task ViewProfile(Profile profile) { await this.DialogService.ShowAsync(T("View Profile"), CreateDialogParameters(profile, isEditing: true, isReadOnly: true), DialogOptions.FULLSCREEN); } private static DialogParameters CreateDialogParameters(Profile profile, bool isEditing, bool isReadOnly = false) => new() { { x => x.DataNum, profile.Num }, { x => x.DataId, profile.Id }, { x => x.DataName, profile.Name }, { x => x.DataNeedToKnow, profile.NeedToKnow }, { x => x.DataActions, profile.Actions }, { x => x.IsEditing, isEditing }, { x => x.IsReadOnly, isReadOnly }, }; private async Task ExportProfile(Profile profile) { if (!this.SettingsManager.ConfigurationData.App.ShowAdminSettings) return; if (profile == Profile.NO_PROFILE || profile.IsEnterpriseConfiguration) return; var luaCode = profile.ExportAsConfigurationSection(); if (!string.IsNullOrWhiteSpace(luaCode)) await this.RustService.CopyText2Clipboard(luaCode); } private async Task DeleteProfile(Profile profile) { var dialogParameters = new DialogParameters { { x => x.Message, string.Format(T("Are you sure you want to delete the profile '{0}'?"), profile.Name) }, }; var dialogReference = await this.DialogService.ShowAsync(T("Delete Profile"), dialogParameters, DialogOptions.FULLSCREEN); var dialogResult = await dialogReference.Result; if (dialogResult is null || dialogResult.Canceled) return; this.SettingsManager.ConfigurationData.Profiles.Remove(profile); await this.SettingsManager.StoreSettings(); await this.MessageBus.SendMessage(this, Event.CONFIGURATION_CHANGED); } }