diff --git a/src/Common/Verdure.Braincase.Core/Contracts/Services/IDataInitService.cs b/src/Common/Verdure.Braincase.Core/Contracts/Services/IDataInitService.cs new file mode 100644 index 0000000..1c8a4ab --- /dev/null +++ b/src/Common/Verdure.Braincase.Core/Contracts/Services/IDataInitService.cs @@ -0,0 +1,11 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Verdure.Braincase.Core.Contracts.Services; +public interface IDataInitService +{ + Task InitializeDataAsync(); +} diff --git a/src/Modules/Verdure.Braincase.Copilot/Services/CopilotDataInitService.cs b/src/Modules/Verdure.Braincase.Copilot/Services/CopilotDataInitService.cs new file mode 100644 index 0000000..78d72a7 --- /dev/null +++ b/src/Modules/Verdure.Braincase.Copilot/Services/CopilotDataInitService.cs @@ -0,0 +1,83 @@ +using System.Linq; +using System.Threading.Tasks; +using BotSharp.Abstraction.Agents; +using BotSharp.Abstraction.Plugins.Models; +using BotSharp.Abstraction.Repositories.Filters; +using BotSharp.Abstraction.Users; +using BotSharp.Abstraction.Users.Enums; +using BotSharp.Abstraction.Users.Models; +using BotSharp.Abstraction.Utilities; +using BotSharp.Core.Plugins; +using CommunityToolkit.Mvvm.DependencyInjection; +using Verdure.Braincase.Core.Contracts.Services; +using Verdure.Braincase.Core.Models; + +namespace Verdure.Braincase.Copilot.Services; +public class CopilotDataInitService : IDataInitService +{ + private readonly IAgentService _agentService; + private readonly IServiceProvider _services; + private readonly IUserIdentity _userIdentity; + private readonly IUserService _userService; + private readonly ILocalSettingsService _localSettingsService; + public CopilotDataInitService(IServiceProvider services, + IAgentService agentService, + IUserIdentity userIdentity, + IUserService userService, + ILocalSettingsService localSettingsService) + { + _services = services; + _agentService = agentService; + _userIdentity = userIdentity; + _userService = userService; + _localSettingsService = localSettingsService; + } + public async Task InitializeDataAsync() + { + var user = await _userService.GetUser(_userIdentity.Id); + + if (user == null) + { + await _userService.CreateUser(new User + { + Id = _userIdentity.Id, + Email = _userIdentity.Email, + UserName = _userIdentity.UserName, + FirstName = _userIdentity.FirstName, + LastName = _userIdentity.LastName, + Role = UserRole.Admin, + Type = UserType.Client, + }); + } + + var agents = await _agentService.GetAgents(new AgentFilter + { + Pager = new Pagination + { + Page = 1, + Size = 100 + } + }); + if (!agents.Items.Any()) + { + _ = await _agentService.RefreshAgents(); + + var loader = Ioc.Default.GetRequiredService(); + var plugins = loader.GetPagedPlugins(_services, new PluginFilter + { + Pager = new Pagination + { + Page = 1, + Size = 100 + } + }).Items.ToList(); + + foreach (var plugin in plugins) + { + _ = loader.UpdatePluginStatus(_services, plugin.Id, true); + } + await _localSettingsService.SaveSettingAsync(Constants.DefaultChatBotNameKey, new ComboxItemModel()); + } + + } +} diff --git a/src/Modules/Verdure.Braincase.Copilot/ViewModels/Agents/AgentViewModel.cs b/src/Modules/Verdure.Braincase.Copilot/ViewModels/Agents/AgentViewModel.cs index c2b1a74..2d08e9d 100644 --- a/src/Modules/Verdure.Braincase.Copilot/ViewModels/Agents/AgentViewModel.cs +++ b/src/Modules/Verdure.Braincase.Copilot/ViewModels/Agents/AgentViewModel.cs @@ -56,21 +56,21 @@ public partial class AgentViewModel : ObservableRecipient, INavigationAware } public async void OnNavigatedTo(object parameter) { - var user = await _userService.GetUser(_userIdentity.Id); + //var user = await _userService.GetUser(_userIdentity.Id); - if (user == null) - { - await _userService.CreateUser(new User - { - Id = _userIdentity.Id, - Email = _userIdentity.Email, - UserName = _userIdentity.UserName, - FirstName = _userIdentity.FirstName, - LastName = _userIdentity.LastName, - Role = UserRole.Admin, - Type = UserType.Client, - }); - } + //if (user == null) + //{ + // await _userService.CreateUser(new User + // { + // Id = _userIdentity.Id, + // Email = _userIdentity.Email, + // UserName = _userIdentity.UserName, + // FirstName = _userIdentity.FirstName, + // LastName = _userIdentity.LastName, + // Role = UserRole.Admin, + // Type = UserType.Client, + // }); + //} Agents = (await _agentService.GetAgents(new AgentFilter { diff --git a/src/Verdure.Braincase/ConfigureServicesExtensions.cs b/src/Verdure.Braincase/ConfigureServicesExtensions.cs index 64bbd6f..428f303 100644 --- a/src/Verdure.Braincase/ConfigureServicesExtensions.cs +++ b/src/Verdure.Braincase/ConfigureServicesExtensions.cs @@ -7,7 +7,6 @@ using BotSharp.Core; using BotSharp.Core.Crontab.Abstraction; using BotSharp.Core.Infrastructures; using BotSharp.Logger; -using Contracts.Services; using Controls; using Controls.CompactOverlay; using ElectronBot.DotNet; @@ -26,6 +25,7 @@ using Verdure.Braincase.Activation; using Verdure.Braincase.ClockViews; using Verdure.Braincase.Contracts.Services; using Verdure.Braincase.Copilot.Hooks; +using Verdure.Braincase.Copilot.Services; using Verdure.Braincase.Copilot.Services.BotSharp; using Verdure.Braincase.Copilot.ViewModels; using Verdure.Braincase.Copilot.Views; @@ -315,12 +315,13 @@ public static class ConfigureServicesExtensions // Add wake phrase listener .AddSingleton() //.AddSingleton() - .AddSingleton() + .AddSingleton() // Add the primary hosted service to start the loop. .AddHostedService() .AddMemoryCache() .AddScoped() .AddScoped() + .AddScoped() // Configuration .BuildServiceProvider()); } diff --git a/src/Verdure.Braincase/Services/ActivationService.cs b/src/Verdure.Braincase/Services/ActivationService.cs index 0ca67d2..8cda4ba 100644 --- a/src/Verdure.Braincase/Services/ActivationService.cs +++ b/src/Verdure.Braincase/Services/ActivationService.cs @@ -1,9 +1,7 @@ -using Verdure.Braincase.Activation; -using Verdure.Braincase.Contracts.Services; -using Verdure.Braincase.Models; -using Verdure.Braincase.Views; -using Microsoft.UI.Xaml; +using Microsoft.UI.Xaml; using Microsoft.UI.Xaml.Controls; +using Verdure.Braincase.Activation; +using Verdure.Braincase.Views; namespace Verdure.Braincase.Services; @@ -19,14 +17,15 @@ public class ActivationService : IActivationService private readonly IdentityService _identityService; private readonly ILocalSettingsService _localSettingsService; - + private readonly IEnumerable _dataInitServices; public ActivationService(ActivationHandler defaultHandler, IEnumerable activationHandlers, IThemeSelectorService themeSelectorService, UserDataService userDataService, IdentityService identityService, - ILocalSettingsService localSettingsService) + ILocalSettingsService localSettingsService, + IEnumerable dataInitServices) { _defaultHandler = defaultHandler; _activationHandlers = activationHandlers; @@ -34,6 +33,7 @@ public class ActivationService : IActivationService _userDataService = userDataService; _identityService = identityService; _localSettingsService = localSettingsService; + _dataInitServices = dataInitServices; } public async Task ActivateAsync(object activationArgs) @@ -46,6 +46,11 @@ public class ActivationService : IActivationService await _identityService.AttachTokenCacheAsync(); await _identityService.AcquireTokenSilentAsync(); + foreach (var dataInitService in _dataInitServices) + { + await dataInitService.InitializeDataAsync(); + } + // Set the MainWindow Content. if (App.MainWindow.Content == null) {