diff --git a/VoiceCraft.Client.Plugin/Plugin.cs b/VoiceCraft.Client.Plugin/Plugin.cs index ad7ca511..822b1083 100644 --- a/VoiceCraft.Client.Plugin/Plugin.cs +++ b/VoiceCraft.Client.Plugin/Plugin.cs @@ -29,11 +29,13 @@ public void Load(ServiceCollection serviceCollection) //Pages serviceCollection.AddTransient(); serviceCollection.AddTransient(); + serviceCollection.AddTransient(); serviceCollection.AddTransient(); serviceCollection.AddTransient(); serviceCollection.AddTransient(); serviceCollection.AddTransient(); + serviceCollection.AddTransient(); serviceCollection.AddTransient(); serviceCollection.AddTransient(); } diff --git a/VoiceCraft.Client.Plugin/ViewModels/Home/AddServerViewModel.cs b/VoiceCraft.Client.Plugin/ViewModels/Home/AddServerViewModel.cs new file mode 100644 index 00000000..9121a7ff --- /dev/null +++ b/VoiceCraft.Client.Plugin/ViewModels/Home/AddServerViewModel.cs @@ -0,0 +1,61 @@ +using Avalonia.Notification; +using CommunityToolkit.Mvvm.ComponentModel; +using CommunityToolkit.Mvvm.Input; +using VoiceCraft.Client.PDK.Services; +using VoiceCraft.Client.PDK.ViewModels; +using VoiceCraft.Client.Plugin.Settings; +using VoiceCraft.Client.Plugin.Views.Home; + +namespace VoiceCraft.Client.Plugin.ViewModels.Home +{ + public partial class AddServerViewModel : ViewModelBase + { + public override string Title => "Add Server"; + + private INotificationMessageManager _manager; + private SettingsService _settings; + + [ObservableProperty] + private ServersSettings _servers; + + [ObservableProperty] + private Server _server = new(); + + public AddServerViewModel(NotificationMessageManager manager, SettingsService settings) + { + _manager = manager; + _settings = settings; + _servers = settings.Get(Plugin.PluginId); + } + + [RelayCommand] + public async Task AddServer() + { + try + { + Servers.AddServer(Server); + _manager.CreateMessage() + .Accent("#1751C3") + .Animates(true) + .Background("#333") + .HasBadge("Info") + .HasMessage($"{Server.Name} has been added.") + .Dismiss().WithDelay(TimeSpan.FromSeconds(3)) + .Queue(); + Server = new Server(); + await _settings.SaveAsync(); + } + catch (Exception ex) + { + _manager.CreateMessage() + .Accent("#E0A030") + .Animates(true) + .Background("#333") + .HasBadge("Error") + .HasMessage(ex.Message) + .Dismiss().WithDelay(TimeSpan.FromSeconds(5)) + .Queue(); + } + } + } +} \ No newline at end of file diff --git a/VoiceCraft.Client.Plugin/ViewModels/HomeViewModel.cs b/VoiceCraft.Client.Plugin/ViewModels/HomeViewModel.cs index ff97d3ed..cde1708c 100644 --- a/VoiceCraft.Client.Plugin/ViewModels/HomeViewModel.cs +++ b/VoiceCraft.Client.Plugin/ViewModels/HomeViewModel.cs @@ -21,12 +21,12 @@ public partial class HomeViewModel : ViewModelBase [ObservableProperty] private ListItemTemplate? _selectedListItem = null; - public HomeViewModel(ServersView servers, SettingsView settings, CreditsView credits) + public HomeViewModel(ServersView servers, SettingsView settings, CreditsView credits, AddServerView addServer) { _items.Add(new ListItemTemplate(servers, "home_regular")); _items.Add(new ListItemTemplate(settings, "mic_settings_regular")); _items.Add(new ListItemTemplate(credits, "book_information_regular")); - //_items.Add(new ListItemTemplate(addServer, "add_regular")); + _items.Add(new ListItemTemplate(addServer, "add_regular")); SelectedListItem = _items[0]; diff --git a/VoiceCraft.Client.Plugin/Views/Home/AddServerView.axaml b/VoiceCraft.Client.Plugin/Views/Home/AddServerView.axaml new file mode 100644 index 00000000..a96158b5 --- /dev/null +++ b/VoiceCraft.Client.Plugin/Views/Home/AddServerView.axaml @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/VoiceCraft.Client.Plugin/Views/Home/AddServerView.axaml.cs b/VoiceCraft.Client.Plugin/Views/Home/AddServerView.axaml.cs new file mode 100644 index 00000000..887c261a --- /dev/null +++ b/VoiceCraft.Client.Plugin/Views/Home/AddServerView.axaml.cs @@ -0,0 +1,15 @@ +using Avalonia.Controls; +using VoiceCraft.Client.Plugin.ViewModels.Home; + +namespace VoiceCraft.Client.Plugin.Views.Home +{ + public partial class AddServerView : UserControl + { + public AddServerView(AddServerViewModel viewModel) + { + InitializeComponent(); + + DataContext = viewModel; + } + } +} \ No newline at end of file