Vollständige Implementierung des EngineeringSync-Middleware-Tools: - Windows Service (Kestrel :5050) mit FileSystemWatcher + SignalR - WPF Tray-App mit PendingChanges- und Projektverwaltungs-Fenster - Setup-Wizard (8-Schritte-Installer) - SQLite/EF Core Datenschicht (WAL-Modus) - SHA-256-basiertes Debouncing (2s Fenster) - Backup-System mit konfigurierbarer Aufbewahrung Bugfixes & Verbesserungen: - BUG-1: AppDbContext OnConfiguring invertierte Bedingung behoben - BUG-2: Event-Handler-Leak in TrayApp (Fenster-Singleton-Pattern) - BUG-3: ProjectConfigChanged SignalR-Signal in allen CRUD-Endpoints - BUG-5: Rename-Sync löscht alte Datei im Simulations-Ordner - BUG-6: Doppeltes Dispose von SignalR verhindert - BUG-7: Registry-Deinstallation nur EngineeringSync-Eintrag entfernt - S1: Path-Traversal-Schutz via SafeCombine() im SyncManager - E1: FSW Buffer 64KB + automatischer Re-Scan bei Overflow - E2: Retry-Logik (3x) für gesperrte Dateien mit exponentiellem Backoff - E4: Channel.Writer.TryComplete() beim Shutdown - C2: HubMethodNames-Konstanten statt Magic Strings - E3: Pagination in Changes-API (page/pageSize Query-Parameter) - A1: Fire-and-Forget mit try/catch + Logging Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
93 lines
5.9 KiB
XML
93 lines
5.9 KiB
XML
<local:WizardPageBase x:Class="EngineeringSync.Setup.Views.Pages.SummaryPage"
|
|
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
|
xmlns:local="clr-namespace:EngineeringSync.Setup.Views.Pages"
|
|
Background="White">
|
|
<Grid Margin="40,32,40,24">
|
|
<Grid.RowDefinitions>
|
|
<RowDefinition Height="Auto"/>
|
|
<RowDefinition Height="Auto"/>
|
|
<RowDefinition Height="*"/>
|
|
</Grid.RowDefinitions>
|
|
|
|
<TextBlock Grid.Row="0" Text="Zusammenfassung" Style="{StaticResource PageTitleStyle}"/>
|
|
<TextBlock Grid.Row="1" Style="{StaticResource PageSubtitleStyle}"
|
|
Text="Überprüfen Sie Ihre Einstellungen. Klicken Sie auf "Jetzt installieren" um die Installation zu starten."/>
|
|
|
|
<ScrollViewer Grid.Row="2" VerticalScrollBarVisibility="Auto">
|
|
<StackPanel>
|
|
|
|
<!-- Installation -->
|
|
<Border Style="{StaticResource InfoCardStyle}">
|
|
<StackPanel>
|
|
<StackPanel Orientation="Horizontal" Margin="0,0,0,10">
|
|
<TextBlock Text="" FontFamily="Segoe MDL2 Assets" FontSize="14"
|
|
Foreground="#0078D4" Margin="0,0,8,0" VerticalAlignment="Center"/>
|
|
<TextBlock Text="Installation" FontFamily="Segoe UI" FontSize="13"
|
|
FontWeight="SemiBold" Foreground="#1A1A1A" VerticalAlignment="Center"/>
|
|
</StackPanel>
|
|
<local:SummaryRow Label="Installationspfad" Value="{Binding InstallPath}"/>
|
|
</StackPanel>
|
|
</Border>
|
|
|
|
<!-- Erstes Projekt -->
|
|
<Border Style="{StaticResource InfoCardStyle}">
|
|
<StackPanel>
|
|
<StackPanel Orientation="Horizontal" Margin="0,0,0,10">
|
|
<TextBlock Text="" FontFamily="Segoe MDL2 Assets" FontSize="14"
|
|
Foreground="#0078D4" Margin="0,0,8,0" VerticalAlignment="Center"/>
|
|
<TextBlock Text="Erstes Projekt" FontFamily="Segoe UI" FontSize="13"
|
|
FontWeight="SemiBold" Foreground="#1A1A1A" VerticalAlignment="Center"/>
|
|
</StackPanel>
|
|
<local:SummaryRow Label="Projektname" Value="{Binding ProjectName}"/>
|
|
<local:SummaryRow Label="Engineering-Pfad" Value="{Binding EngineeringPath}"/>
|
|
<local:SummaryRow Label="Simulations-Pfad" Value="{Binding SimulationPath}"/>
|
|
<local:SummaryRow Label="Dateiendungen" Value="{Binding FileExtensions}"/>
|
|
</StackPanel>
|
|
</Border>
|
|
|
|
<!-- Backup -->
|
|
<Border Style="{StaticResource InfoCardStyle}">
|
|
<StackPanel>
|
|
<StackPanel Orientation="Horizontal" Margin="0,0,0,10">
|
|
<TextBlock Text="" FontFamily="Segoe MDL2 Assets" FontSize="14"
|
|
Foreground="#0078D4" Margin="0,0,8,0" VerticalAlignment="Center"/>
|
|
<TextBlock Text="Backup" FontFamily="Segoe UI" FontSize="13"
|
|
FontWeight="SemiBold" Foreground="#1A1A1A" VerticalAlignment="Center"/>
|
|
</StackPanel>
|
|
<local:SummaryBoolRow Label="Backups aktiviert" Value="{Binding BackupEnabled}"/>
|
|
<local:SummaryRow Label="Backup-Ordner"
|
|
Value="{Binding BackupCustomPath}"
|
|
Visibility="{Binding BackupUseCustomPath,
|
|
Converter={StaticResource BoolToVisConverter}}"/>
|
|
<!-- Aufbewahrung immer anzeigen wenn Backup aktiv (0 = unbegrenzt ist ein valider Wert) -->
|
|
<local:SummaryRow Label="Max. Backups/Datei"
|
|
Value="{Binding MaxBackupsPerFile,
|
|
StringFormat='{}{0} (0=unbegrenzt)'}"
|
|
Visibility="{Binding BackupEnabled,
|
|
Converter={StaticResource BoolToVisConverter}}"/>
|
|
</StackPanel>
|
|
</Border>
|
|
|
|
<!-- Optionen -->
|
|
<Border Style="{StaticResource InfoCardStyle}">
|
|
<StackPanel>
|
|
<StackPanel Orientation="Horizontal" Margin="0,0,0,10">
|
|
<TextBlock Text="" FontFamily="Segoe MDL2 Assets" FontSize="14"
|
|
Foreground="#0078D4" Margin="0,0,8,0" VerticalAlignment="Center"/>
|
|
<TextBlock Text="Optionen" FontFamily="Segoe UI" FontSize="13"
|
|
FontWeight="SemiBold" Foreground="#1A1A1A" VerticalAlignment="Center"/>
|
|
</StackPanel>
|
|
<local:SummaryBoolRow Label="Dienst automatisch starten" Value="{Binding AutoStartService}"/>
|
|
<local:SummaryBoolRow Label="Tray-App bei Anmeldung" Value="{Binding AutoStartTrayApp}"/>
|
|
<local:SummaryBoolRow Label="Desktop-Verknüpfung" Value="{Binding CreateDesktopShortcut}"/>
|
|
<local:SummaryBoolRow Label="Startmenü-Eintrag" Value="{Binding CreateStartMenuEntry}"/>
|
|
<local:SummaryBoolRow Label="Tray-App nach Installation" Value="{Binding StartAfterInstall}"/>
|
|
</StackPanel>
|
|
</Border>
|
|
|
|
</StackPanel>
|
|
</ScrollViewer>
|
|
</Grid>
|
|
</local:WizardPageBase>
|