Record project continuation changes

This commit is contained in:
2026-05-12 21:02:29 +03:00
parent 3059d1d7a3
commit 8f69d53193
339 changed files with 101111 additions and 1769 deletions
@@ -21,10 +21,10 @@
</Grid.RowDefinitions>
<Border Grid.Row="0"
Margin="0,0,0,16"
Padding="18"
Background="#FF0E3B43"
CornerRadius="14">
Margin="0,0,0,12"
Padding="14"
Background="#FF10262F"
CornerRadius="8">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
@@ -32,7 +32,7 @@
</Grid.ColumnDefinitions>
<StackPanel>
<TextBlock Foreground="White"
FontSize="28"
FontSize="20"
FontWeight="SemiBold"
Text="{x:Static appres:Strings.MainHeaderTitle}" />
<TextBlock Margin="0,4,0,0"
@@ -42,14 +42,15 @@
</StackPanel>
<StackPanel Grid.Column="1"
Orientation="Horizontal"
HorizontalAlignment="Right"
VerticalAlignment="Center">
<TextBlock Foreground="White"
FontWeight="SemiBold"
Margin="0,0,12,0"
AutomationProperties.AutomationId="CurrentUserText"
Text="{Binding CurrentUserEmail}" />
<Button Margin="0,10,0,0"
Padding="14,6"
<Button Padding="12,5"
AutomationProperties.AutomationId="LogoutButton"
AutomationProperties.Name="{x:Static appres:Strings.MainLogout}"
Command="{Binding LogoutCommand}"
@@ -66,63 +67,119 @@
<Grid Visibility="{Binding IsAuthenticated, Converter={StaticResource BooleanToVisibilityConverter}}">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<views:OrganizationSwitchView Grid.Row="0"
Margin="0,0,0,16" />
<Border Grid.Row="1"
Margin="0,0,0,16"
Padding="16"
<Border Grid.Row="0"
Margin="0,0,0,12"
Padding="12"
Background="White"
BorderBrush="#FFD9DDE5"
BorderThickness="1"
CornerRadius="12">
<StackPanel Orientation="Horizontal">
<Button Margin="0,0,12,0"
Padding="14,8"
AutomationProperties.AutomationId="StartSessionButton"
AutomationProperties.Name="{x:Static appres:Strings.MainStartSession}"
Command="{Binding StartSessionCommand}"
CommandParameter="{Binding SelectedResource}"
Content="{x:Static appres:Strings.MainStartSession}" />
<Button Margin="0,0,12,0"
Padding="14,8"
AutomationProperties.AutomationId="AttachSessionButton"
AutomationProperties.Name="{x:Static appres:Strings.MainAttach}"
Command="{Binding AttachSessionCommand}"
CommandParameter="{Binding SelectedSession}"
Content="{x:Static appres:Strings.MainAttach}" />
<Button Margin="0,0,12,0"
Padding="14,8"
AutomationProperties.AutomationId="TakeOverSessionButton"
AutomationProperties.Name="{x:Static appres:Strings.MainTakeOver}"
Command="{Binding TakeOverSessionCommand}"
CommandParameter="{Binding SelectedSession}"
Content="{x:Static appres:Strings.MainTakeOver}" />
<Button Padding="14,8"
AutomationProperties.AutomationId="TerminateSessionButton"
AutomationProperties.Name="{x:Static appres:Strings.MainTerminate}"
Command="{Binding TerminateSessionCommand}"
CommandParameter="{Binding SelectedSession}"
Content="{x:Static appres:Strings.MainTerminate}" />
</StackPanel>
CornerRadius="8">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<ComboBox Width="260"
AutomationProperties.AutomationId="OrganizationComboBox"
DisplayMemberPath="Name"
ItemsSource="{Binding Organizations}"
SelectedItem="{Binding SelectedOrganization}" />
<Button Grid.Column="1"
HorizontalAlignment="Left"
Margin="10,0,0,0"
Padding="12,5"
AutomationProperties.AutomationId="SetActiveOrganizationButton"
Command="{Binding SwitchOrganizationCommand}"
Content="{x:Static appres:Strings.OrganizationSetActive}" />
<StackPanel Grid.Column="2"
Orientation="Horizontal">
<ToggleButton x:Name="ServerMenuButton"
Margin="0,0,8,0"
Padding="14,7"
AutomationProperties.AutomationId="ServerPickerButton"
Content="Серверы" />
<Button Margin="0,0,8,0"
Padding="14,7"
AutomationProperties.AutomationId="StartSessionButton"
Command="{Binding StartSessionCommand}"
CommandParameter="{Binding SelectedResource}"
Content="{x:Static appres:Strings.MainStartSession}" />
<Button Margin="0,0,8,0"
Padding="14,7"
AutomationProperties.AutomationId="AttachSessionButton"
Command="{Binding AttachSessionCommand}"
CommandParameter="{Binding SelectedSession}"
Content="{x:Static appres:Strings.MainAttach}" />
<Button Padding="14,7"
AutomationProperties.AutomationId="TerminateSessionButton"
Command="{Binding TerminateSessionCommand}"
CommandParameter="{Binding SelectedSession}"
Content="{x:Static appres:Strings.MainTerminate}" />
</StackPanel>
</Grid>
</Border>
<Grid Grid.Row="2">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<views:ResourceListView Grid.Column="0"
Margin="0,0,10,0" />
<views:ActiveSessionsView Grid.Column="1"
Margin="10,0,0,0" />
<Grid Grid.Row="1">
<Border
Background="#FF111C24"
BorderBrush="#FF223747"
BorderThickness="1"
CornerRadius="8">
<Grid>
<StackPanel HorizontalAlignment="Center"
VerticalAlignment="Center"
Width="520">
<TextBlock Foreground="White"
FontSize="24"
FontWeight="SemiBold"
Text="{Binding SelectedResource.Name, TargetNullValue='Выберите сервер'}" />
<TextBlock Margin="0,8,0,18"
Foreground="#FFC0D0DA"
Text="{Binding SelectedResource.Address, TargetNullValue='Каталог серверов и активные сессии открыты справа.'}" />
<Button Width="180"
Padding="16,9"
HorizontalAlignment="Center"
AutomationProperties.AutomationId="StartSessionFromSurfaceButton"
Command="{Binding StartSessionCommand}"
CommandParameter="{Binding SelectedResource}"
Content="{x:Static appres:Strings.MainStartSession}" />
</StackPanel>
</Grid>
</Border>
</Grid>
<Popup IsOpen="{Binding IsChecked, ElementName=ServerMenuButton}"
PlacementTarget="{Binding ElementName=ServerMenuButton}"
Placement="Bottom"
StaysOpen="False"
AllowsTransparency="True"
PopupAnimation="Fade">
<Border Width="760"
MaxHeight="680"
Padding="14"
Background="#FFF7FAFC"
BorderBrush="#FFB9C5CC"
BorderThickness="1"
CornerRadius="8">
<ScrollViewer VerticalScrollBarVisibility="Auto">
<StackPanel>
<TextBlock FontSize="18"
FontWeight="SemiBold"
Text="Выбор сервера" />
<views:ResourceListView Margin="0,10,0,12" />
<TextBlock FontSize="18"
FontWeight="SemiBold"
Text="Открытые подключения" />
<views:ActiveSessionsView Margin="0,10,0,0" />
</StackPanel>
</ScrollViewer>
</Border>
</Popup>
</Grid>
</Grid>
@@ -13,149 +13,116 @@
ShowInTaskbar="True"
WindowState="Maximized"
Title="{Binding Title}">
<Grid Margin="18">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Border Grid.Row="0"
Padding="16"
Background="#FF143C53"
CornerRadius="12">
<Grid Background="#FF05090C">
<Border x:Name="SessionSurface"
Padding="0"
Background="#FF05090C"
Focusable="True"
KeyboardNavigation.TabNavigation="None"
KeyboardNavigation.DirectionalNavigation="None"
AutomationProperties.AutomationId="SessionWindowSurface"
AutomationProperties.Name="{x:Static appres:Strings.SessionWindowSurfaceTitle}"
GotKeyboardFocus="OnSessionSurfaceGotKeyboardFocus"
LostKeyboardFocus="OnSessionSurfaceLostKeyboardFocus"
PreviewKeyDown="OnSessionSurfacePreviewKeyDown"
PreviewKeyUp="OnSessionSurfacePreviewKeyUp"
PreviewMouseMove="OnSessionSurfacePreviewMouseMove"
PreviewMouseDown="OnSessionSurfacePreviewMouseDown"
PreviewMouseUp="OnSessionSurfacePreviewMouseUp"
PreviewMouseWheel="OnSessionSurfacePreviewMouseWheel">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<StackPanel>
<TextBlock FontSize="24"
<Image x:Name="SessionFrameImage"
Stretch="Uniform"
IsHitTestVisible="False"
RenderOptions.BitmapScalingMode="LowQuality"
SnapsToDevicePixels="True" />
<Border HorizontalAlignment="Left"
VerticalAlignment="Bottom"
Margin="12"
Padding="8,4"
Background="#AA10212C"
CornerRadius="6">
<TextBlock Foreground="#FF9FD4F1"
AutomationProperties.AutomationId="SessionWindowInputStatusText"
Text="{Binding InputStatusDisplay}" />
</Border>
<StackPanel x:Name="SessionSurfaceOverlay"
HorizontalAlignment="Center"
VerticalAlignment="Center"
IsHitTestVisible="False"
Width="320">
<TextBlock HorizontalAlignment="Center"
FontSize="20"
FontWeight="SemiBold"
Foreground="White"
AutomationProperties.AutomationId="SessionWindowSessionIdText"
Text="{Binding SessionId}" />
<TextBlock Margin="0,6,0,0"
Text="{x:Static appres:Strings.SessionWindowSurfaceTitle}" />
<TextBlock Margin="0,10,0,0"
TextAlignment="Center"
Foreground="#FFD1E1ED"
AutomationProperties.AutomationId="SessionWindowStateText"
Text="{Binding SessionStateDisplay}" />
<TextBlock Foreground="#FFD1E1ED"
AutomationProperties.AutomationId="SessionWindowConnectionStatusText"
Text="{Binding ConnectionStatusDisplay}" />
<TextBlock Margin="0,6,0,0"
Foreground="White"
FontWeight="SemiBold"
AutomationProperties.AutomationId="SessionWindowShellStateText"
Text="{Binding ShellStateDisplay}" />
</StackPanel>
<StackPanel Grid.Column="1"
Orientation="Horizontal"
VerticalAlignment="Top">
<Button Margin="0,0,10,0"
Padding="12,6"
Click="OnSessionActionInvoked"
AutomationProperties.AutomationId="SessionWindowReconnectButton"
AutomationProperties.Name="{x:Static appres:Strings.SessionWindowReconnect}"
Command="{Binding ReconnectCommand}"
Content="{x:Static appres:Strings.SessionWindowReconnect}" />
<Button Margin="0,0,10,0"
Padding="12,6"
Click="OnSessionActionInvoked"
AutomationProperties.AutomationId="SessionWindowDetachButton"
AutomationProperties.Name="{x:Static appres:Strings.SessionWindowDetach}"
Command="{Binding DetachCommand}"
Content="{x:Static appres:Strings.SessionWindowDetach}" />
<Button Margin="0,0,10,0"
Padding="12,6"
Click="OnSessionActionInvoked"
AutomationProperties.AutomationId="SessionWindowTakeOverButton"
AutomationProperties.Name="{x:Static appres:Strings.SessionWindowTakeOver}"
Command="{Binding TakeOverThisDeviceCommand}"
Content="{x:Static appres:Strings.SessionWindowTakeOver}" />
<Button Padding="12,6"
Click="OnSessionActionInvoked"
AutomationProperties.AutomationId="SessionWindowTerminateButton"
AutomationProperties.Name="{x:Static appres:Strings.SessionWindowTerminate}"
Command="{Binding TerminateCommand}"
Content="{x:Static appres:Strings.SessionWindowTerminate}" />
Text="{x:Static appres:Strings.SessionWindowSurfaceSubtitle}" />
</StackPanel>
</Grid>
</Border>
<Border Grid.Row="1"
Padding="12"
Background="White"
BorderBrush="#FFD9DDE5"
BorderThickness="1"
CornerRadius="12">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="5*" />
<ColumnDefinition Width="18" />
<ColumnDefinition Width="2*" />
</Grid.ColumnDefinitions>
<Border Grid.Column="0"
Background="#FF12202A"
BorderBrush="#FF244456"
BorderThickness="1"
CornerRadius="10">
<Border x:Name="SessionSurface"
Padding="0"
Background="Transparent"
Focusable="True"
KeyboardNavigation.TabNavigation="None"
KeyboardNavigation.DirectionalNavigation="None"
AutomationProperties.AutomationId="SessionWindowSurface"
AutomationProperties.Name="{x:Static appres:Strings.SessionWindowSurfaceTitle}"
GotKeyboardFocus="OnSessionSurfaceGotKeyboardFocus"
LostKeyboardFocus="OnSessionSurfaceLostKeyboardFocus"
PreviewKeyDown="OnSessionSurfacePreviewKeyDown"
PreviewKeyUp="OnSessionSurfacePreviewKeyUp"
PreviewMouseMove="OnSessionSurfacePreviewMouseMove"
PreviewMouseDown="OnSessionSurfacePreviewMouseDown"
PreviewMouseUp="OnSessionSurfacePreviewMouseUp"
PreviewMouseWheel="OnSessionSurfacePreviewMouseWheel">
<Grid>
<Image x:Name="SessionFrameImage"
Stretch="Uniform"
IsHitTestVisible="False"
RenderOptions.BitmapScalingMode="LowQuality"
SnapsToDevicePixels="True" />
<Border HorizontalAlignment="Left"
VerticalAlignment="Bottom"
Margin="12"
Padding="8,4"
Background="#AA10212C"
CornerRadius="8">
<TextBlock Foreground="#FF9FD4F1"
AutomationProperties.AutomationId="SessionWindowInputStatusText"
Text="{Binding InputStatusDisplay}" />
</Border>
<StackPanel x:Name="SessionSurfaceOverlay"
HorizontalAlignment="Center"
VerticalAlignment="Center"
IsHitTestVisible="False"
Width="320">
<TextBlock HorizontalAlignment="Center"
FontSize="20"
FontWeight="SemiBold"
Foreground="White"
Text="{x:Static appres:Strings.SessionWindowSurfaceTitle}" />
<TextBlock Margin="0,10,0,0"
TextAlignment="Center"
Foreground="#FFD1E1ED"
Text="{x:Static appres:Strings.SessionWindowSurfaceSubtitle}" />
</StackPanel>
</Grid>
</Border>
</Border>
<ScrollViewer Grid.Column="2"
Focusable="False"
KeyboardNavigation.TabNavigation="None"
KeyboardNavigation.DirectionalNavigation="None"
VerticalScrollBarVisibility="Auto">
<StackPanel>
<Expander HorizontalAlignment="Right"
VerticalAlignment="Top"
Margin="12"
Width="360"
IsExpanded="False"
Background="#EE10262F"
Foreground="White">
<Expander.Header>
<TextBlock FontWeight="SemiBold"
Text="{Binding SessionStateDisplay}" />
</Expander.Header>
<ScrollViewer MaxHeight="720"
Focusable="False"
KeyboardNavigation.TabNavigation="None"
KeyboardNavigation.DirectionalNavigation="None"
VerticalScrollBarVisibility="Auto">
<StackPanel Margin="10">
<TextBlock Foreground="#FFD1E1ED"
AutomationProperties.AutomationId="SessionWindowSessionIdText"
Text="{Binding SessionId}" />
<TextBlock Margin="0,4,0,0"
Foreground="#FFD1E1ED"
AutomationProperties.AutomationId="SessionWindowConnectionStatusText"
Text="{Binding ConnectionStatusDisplay}" />
<TextBlock Margin="0,4,0,12"
Foreground="White"
FontWeight="SemiBold"
AutomationProperties.AutomationId="SessionWindowShellStateText"
Text="{Binding ShellStateDisplay}" />
<WrapPanel Margin="0,0,0,12">
<Button Margin="0,0,8,8"
Padding="12,6"
Click="OnSessionActionInvoked"
AutomationProperties.AutomationId="SessionWindowReconnectButton"
AutomationProperties.Name="{x:Static appres:Strings.SessionWindowReconnect}"
Command="{Binding ReconnectCommand}"
Content="{x:Static appres:Strings.SessionWindowReconnect}" />
<Button Margin="0,0,8,8"
Padding="12,6"
Click="OnSessionActionInvoked"
AutomationProperties.AutomationId="SessionWindowDetachButton"
AutomationProperties.Name="{x:Static appres:Strings.SessionWindowDetach}"
Command="{Binding DetachCommand}"
Content="{x:Static appres:Strings.SessionWindowDetach}" />
<Button Margin="0,0,8,8"
Padding="12,6"
Click="OnSessionActionInvoked"
AutomationProperties.AutomationId="SessionWindowTakeOverButton"
AutomationProperties.Name="{x:Static appres:Strings.SessionWindowTakeOver}"
Command="{Binding TakeOverThisDeviceCommand}"
Content="{x:Static appres:Strings.SessionWindowTakeOver}" />
<Button Margin="0,0,8,8"
Padding="12,6"
Click="OnSessionActionInvoked"
AutomationProperties.AutomationId="SessionWindowTerminateButton"
AutomationProperties.Name="{x:Static appres:Strings.SessionWindowTerminate}"
Command="{Binding TerminateCommand}"
Content="{x:Static appres:Strings.SessionWindowTerminate}" />
</WrapPanel>
<Expander IsExpanded="False"
Focusable="False"
IsTabStop="False">
@@ -275,7 +242,7 @@
</Expander>
<Expander Margin="0,12,0,0"
IsExpanded="True"
IsExpanded="False"
Focusable="False"
IsTabStop="False">
<Expander.Header>
@@ -292,7 +259,6 @@
</Expander>
</StackPanel>
</ScrollViewer>
</Grid>
</Border>
</Expander>
</Grid>
</Window>
@@ -1,8 +1,8 @@
{
"backend": {
"prefer_direct_data_plane": true,
"api_base_url": "http://192.168.200.61:8080/api/v1",
"gateway_websocket_url": "ws://192.168.200.61:8080/api/v1/gateway/ws",
"api_base_url": "http://195.123.240.88:19131/api/v1",
"gateway_websocket_url": "ws://195.123.240.88:19131/api/v1/gateway/ws",
"environment": "development",
"direct_data_plane_connect_timeout_ms": 2500,
"direct_data_plane_color_mode": "full_color",