Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions VoiceCraft.Client.Plugin/Plugin.cs
Original file line number Diff line number Diff line change
Expand Up @@ -29,11 +29,13 @@ public void Load(ServiceCollection serviceCollection)
//Pages
serviceCollection.AddTransient<HomeViewModel>();
serviceCollection.AddTransient<ServersViewModel>();
serviceCollection.AddTransient<AddServerViewModel>();
serviceCollection.AddTransient<SettingsViewModel>();
serviceCollection.AddTransient<CreditsViewModel>();

serviceCollection.AddTransient<HomeView>();
serviceCollection.AddTransient<ServersView>();
serviceCollection.AddTransient<AddServerView>();
serviceCollection.AddTransient<SettingsView>();
serviceCollection.AddTransient<CreditsView>();
}
Expand Down
61 changes: 61 additions & 0 deletions VoiceCraft.Client.Plugin/ViewModels/Home/AddServerViewModel.cs
Original file line number Diff line number Diff line change
@@ -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<ServersSettings>(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();
}
}
}
}
4 changes: 2 additions & 2 deletions VoiceCraft.Client.Plugin/ViewModels/HomeViewModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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];
Expand Down
39 changes: 39 additions & 0 deletions VoiceCraft.Client.Plugin/Views/Home/AddServerView.axaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
<UserControl x:Class="VoiceCraft.Client.Plugin.Views.Home.AddServerView"
xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:server="clr-namespace:VoiceCraft.Client.Plugin.Settings"
xmlns:vm="clr-namespace:VoiceCraft.Client.Plugin.ViewModels.Home"
d:DesignHeight="450"
d:DesignWidth="800"
x:DataType="vm:AddServerViewModel"
mc:Ignorable="d">
<ScrollViewer>
<Border Padding="15"
VerticalAlignment="Top"
Classes="card">
<StackPanel Spacing="10">
<TextBlock Text="Name" />
<TextBox MaxLength="{x:Static server:Server.NameLimit}" Text="{Binding Server.Name}" />
<TextBlock Text="IP" />
<TextBox MaxLength="{x:Static server:Server.IPLimit}" Text="{Binding Server.Ip}" />
<TextBlock Text="Port" />
<NumericUpDown Increment="1"
Maximum="65535"
Minimum="0"
Value="{Binding Server.Port}" />
<TextBlock Text="Key" />
<NumericUpDown Increment="1"
Maximum="65535"
Minimum="0"
Value="{Binding Server.Key}" />
<Button HorizontalAlignment="Stretch"
VerticalAlignment="Center"
Command="{Binding AddServerCommand}">
<TextBlock Text="Add Server" TextAlignment="Center" />
</Button>
</StackPanel>
</Border>
</ScrollViewer>
</UserControl>
15 changes: 15 additions & 0 deletions VoiceCraft.Client.Plugin/Views/Home/AddServerView.axaml.cs
Original file line number Diff line number Diff line change
@@ -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;
}
}
}