feat: Enhance Face AI upload functionality and UI
Some checks failed
Build Windows Avalonia / build (push) Failing after 1m48s
Release Windows Avalonia / build (push) Failing after 1m41s
Release Windows Avalonia / release (push) Has been skipped

- Updated MainWindow.axaml to increase height and add new UI elements for SSH upload configuration.
- Implemented commands for opening source and destination paths in file explorer.
- Added FaceUploadPath and SSH configuration properties to DataModel and AiSettingsViewModel.
- Introduced validation for FaceUploadPath format and commands for uploading face encoder output.
- Enhanced PickerPreferenceService to manage SSH credentials and upload preferences.
- Updated settings persistence to include FaceUploadPath and SSH preferences.
- Added tests for FaceUploadPath validation and upload command enabling logic.
This commit is contained in:
Maddo 2026-06-06 11:54:21 +02:00
commit e9142df97c
22 changed files with 1477 additions and 84 deletions

View file

@ -5,24 +5,11 @@
x:CompileBindings="False"
Title="Catalog Lite"
Width="740"
Height="380"
Height="560"
MinWidth="640"
MinHeight="340">
<Grid Margin="16" RowDefinitions="Auto,Auto,Auto,*,Auto" RowSpacing="12">
<Grid ColumnDefinitions="150,*" ColumnSpacing="10">
<Button Command="{Binding LoadConfigurationCommand}" ToolTip.Tip="Carica configurazione XML">
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center" Spacing="7">
<iconPacks:PackIconMaterial Kind="FolderUploadOutline" Width="16" Height="16" />
<TextBlock Text="Carica XML" />
</StackPanel>
</Button>
<TextBox Grid.Column="1"
Text="{Binding ConfigurationPath}"
IsReadOnly="True"
Watermark="Nessuna configurazione caricata" />
</Grid>
<Grid Grid.Row="1" ColumnDefinitions="150,*,116" ColumnSpacing="10">
MinHeight="500">
<Grid Margin="16" RowDefinitions="Auto,Auto,*,Auto" RowSpacing="12">
<Grid ColumnDefinitions="150,*,104,72" ColumnSpacing="10">
<TextBlock Text="Sorgente" VerticalAlignment="Center" FontWeight="SemiBold" />
<TextBox Grid.Column="1" Text="{Binding SourcePath, Mode=TwoWay}" Watermark="Cartella sorgente" />
<Button Grid.Column="2" Command="{Binding SelectSourceFolderCommand}" ToolTip.Tip="Seleziona cartella sorgente">
@ -31,9 +18,15 @@
<TextBlock Text="Scegli" />
</StackPanel>
</Button>
<Button Grid.Column="3" Click="OpenSourcePath_Click" ToolTip.Tip="Apri cartella sorgente in Esplora file">
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center" Spacing="6">
<iconPacks:PackIconMaterial Kind="Folder" Width="16" Height="16" />
<TextBlock Text="Apri" />
</StackPanel>
</Button>
</Grid>
<Grid Grid.Row="2" ColumnDefinitions="150,*,116" ColumnSpacing="10">
<Grid Grid.Row="1" ColumnDefinitions="150,*,104,72" ColumnSpacing="10">
<TextBlock Text="Destinazione" VerticalAlignment="Center" FontWeight="SemiBold" />
<TextBox Grid.Column="1" Text="{Binding DestinationPath, Mode=TwoWay}" Watermark="Cartella destinazione" />
<Button Grid.Column="2" Command="{Binding SelectDestinationFolderCommand}" ToolTip.Tip="Seleziona cartella destinazione">
@ -42,8 +35,39 @@
<TextBlock Text="Scegli" />
</StackPanel>
</Button>
<Button Grid.Column="3" Click="OpenDestinationPath_Click" ToolTip.Tip="Apri cartella destinazione in Esplora file">
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center" Spacing="6">
<iconPacks:PackIconMaterial Kind="Folder" Width="16" Height="16" />
<TextBlock Text="Apri" />
</StackPanel>
</Button>
</Grid>
<Border Grid.Row="2"
Background="{DynamicResource PanelBackgroundBrush}"
BorderBrush="{DynamicResource BorderMutedBrush}"
BorderThickness="1"
Padding="14">
<Grid RowDefinitions="Auto,Auto" RowSpacing="10">
<Grid ColumnDefinitions="150,*" ColumnSpacing="10">
<TextBlock Text="Testo orizzontale" VerticalAlignment="Center" FontWeight="SemiBold" />
<TextBox Grid.Column="1"
Text="{Binding HorizontalText, Mode=TwoWay}"
Watermark="Testo applicato alle foto orizzontali" />
</Grid>
<Grid Grid.Row="1" ColumnDefinitions="150,*" ColumnSpacing="10">
<TextBlock Text="Testo verticale" VerticalAlignment="Top" Margin="0,8,0,0" FontWeight="SemiBold" />
<TextBox Grid.Column="1"
Text="{Binding VerticalText, Mode=TwoWay}"
AcceptsReturn="True"
TextWrapping="Wrap"
MinHeight="96"
VerticalContentAlignment="Top"
Watermark="Testo multilinea per foto verticali" />
</Grid>
</Grid>
</Border>
<Border Grid.Row="3"
Background="{DynamicResource PanelBackgroundBrush}"
BorderBrush="{DynamicResource BorderMutedBrush}"