Sicherungscommit vor dem Aufraeumen des Repos, damit nachvollziehbar bleibt, welcher Stand vor der Bereinigung galt. Build gruen, 476 Tests gruen. Zwei Straenge, die sich ueber .csproj, Program.cs und appsettings.json ueberschneiden und darum gemeinsam abgelegt werden: Deploymentcenter-Integration (P3c, Plan D-0 bis D-5 code-seitig fertig): - Deploymentcenter.Client 2.5.0 als lokales Paket, Source-Mapping erweitert - DeploymentcenterOptions, DeploymentcenterErrorReporter, LicenseGate/LicenseCli - WatchdogHeartbeatService auf die Deploymentcenter-API umgestellt (version, os, checks, metrics, status stopped) - Security: MasterKeyResolver, SecretRedactor, FilePermissions - Directory.Build.props mit zentraler Version 0.1.0 (Packager-Versionsdisziplin) - deploy/: Packager-Vorlage und systemd-Unit; echte Zugangsdaten bleiben ueber .gitignore aussen vor - setup.json fuer die Erstinstallation - UMSETZUNGSPLAN-Deploymentcenter-Integration.md; ANALYSE-Linux-Portierung.md verweist auf den neuen Plan Einfenster-Shell (UI-Redesign): - ShellWindow + ShellNavModel als Seitenleisten-Shell - WindowMenuBar und WindowMenuModel entfallen - Modul- und Kernfenster auf die Shell-Einbettung angepasst Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
44 lines
1.7 KiB
C#
44 lines
1.7 KiB
C#
using System.Threading.Tasks;
|
||
using Avalonia.Controls;
|
||
using Avalonia.Interactivity;
|
||
using Avalonia.Markup.Xaml;
|
||
using PolyTrader.Core.Modularity;
|
||
using PolyTraderSharp.Models;
|
||
using PolyTraderSharp.Services;
|
||
|
||
namespace PolyTrader.App.Avalonia.Views
|
||
{
|
||
/// <summary>
|
||
/// Hintergrund-Jobs (JobManager). Verhalten wie bisher: „Run Now" löst den ManualTrigger aus,
|
||
/// „Aktiv" schaltet den Job über die Bindung. Layout vollständig in JobsWindow.axaml.
|
||
/// </summary>
|
||
public partial class JobsWindow : UserControl
|
||
{
|
||
public JobsWindow() => AvaloniaXamlLoader.Load(this);
|
||
|
||
/// <param name="host">
|
||
/// Wird für diese Seite nicht mehr gebraucht (die Navigation sitzt in der Shell), bleibt
|
||
/// aber im Vertrag, weil <c>ModuleView.CreateView</c> alle Seiten gleich erzeugt.
|
||
/// </param>
|
||
public JobsWindow(IModuleUiHost host, JobManager jobManager) : this()
|
||
{
|
||
var grid = this.FindControl<DataGrid>("gridJobs")!;
|
||
grid.ItemsSource = jobManager.Jobs;
|
||
|
||
this.FindControl<Button>("btnRefresh")!.Click += (_, _) =>
|
||
{
|
||
// Die Zeilen aktualisieren sich über INotifyPropertyChanged von selbst; der Knopf
|
||
// erzwingt lediglich ein Neuzeichnen (wie das frühere dgvJobs.Refresh()).
|
||
grid.InvalidateVisual();
|
||
};
|
||
}
|
||
|
||
/// <summary>Manuellen Lauf anstoßen – bewusst im Hintergrund, damit die Oberfläche nicht blockiert.</summary>
|
||
private void OnRunNowClick(object? sender, RoutedEventArgs e)
|
||
{
|
||
if (sender is Button { DataContext: JobStatusRow job } && job.ManualTriggerAction != null)
|
||
_ = Task.Run(() => job.ManualTriggerAction.Invoke());
|
||
}
|
||
}
|
||
}
|