Skip to content

feat: decouple desktop background lifetime control - #82

Merged
TuNi02 merged 1 commit into
masterfrom
features/tuni02/81/background-lifetime
Oct 28, 2026
Merged

TuNi02 merged 1 commit into
masterfrom
features/tuni02/81/background-lifetime

Conversation

@TuNi02

@TuNi02 TuNi02 commented Oct 28, 2026

Copy link
Copy Markdown
Collaborator

Zusammenfassung

Die Ablaufsteuerung für Hintergrundbetrieb und Beenden wird aus der direkten Fenstersteuerung in einen UI-unabhängigen Core-Controller ausgelagert. DesktopSession verwendet diesen Controller über einen kleinen Fensteradapter. Bei gemeldetem Tray-Verlust wird ein verborgenes Hauptfenster wieder geöffnet, damit die App erreichbar bleibt.

Dieser PR erledigt den Backend-Teil. Die native Tray-Erzeugung und Erkennung nutzbarer Tray-Unterstützung übernimmt Manuel separat. Der aktuelle Linux-Ausschluss in App.axaml.cs bleibt unverändert; dieser PR allein behebt daher noch nicht den vollständigen sichtbaren Linux-Fehler.

Verknüpftes Issue

Closes #81

Änderungen

  • DesktopLifetimeController und IDesktopLifetimeHost ohne Avalonia-, OS- oder Dateisystemabhängigkeit in Core ergänzen.
  • DesktopSession als technische Sitzungsintegration auf den Controller umstellen. Views, ViewModels, App.axaml.cs und TrayMenu bleiben unverändert.
  • Bei aktivem CloseToTray und gemeldetem nutzbarem Tray nach X nur das Fenster verstecken; Sitzung und Dateierkennung erhalten.
  • SetTrayAvailability(bool) als Einstieg für die native Anbindung bereitstellen. Tray-Verlust stellt ein verborgenes Fenster wieder her; Tray-Rückkehr versteckt es nicht automatisch.
  • Einmaliges Anfordern des Beendens, unverhinderten OS-/Anwendungs-Shutdown und ausbleibende Wiederöffnung nach Dispose absichern.
  • OS-Befund, Grenzen, Übergabe und manuelle Abnahme in docs/os-compatibility.md dokumentieren. Autostart bleibt ein separater, zurückgestellter Punkt.

Verifikation

  • dotnet build Sortify.sln --configuration Release --no-restore — keine Warnungen oder Fehler
  • dotnet test Sortify.sln --configuration Release --no-build --no-restore — 422 erfolgreich (240 Core, 107 Infrastructure, 75 App)
  • Drei Core-Tests für Lebenszyklusübergänge, Tray-Verlust/-Rückkehr und OS-Shutdown ergänzt
  • Bestehenden Headless-Sitzungstest um Schließen mit X, fortgesetzte echte Dateierkennung und dynamische Tray-Verfügbarkeit erweitert
  • git diff --check
  • Reale native Tray-Abnahme unter Windows/Linux/macOS — folgt nach Manuels Anbindung; simulierte Tray-Verfügbarkeit beweist kein sichtbares natives Icon

Übergabe an Manuel

Die tatsächlich nutzbare Tray-Verfügbarkeit beim Erstellen der DesktopSession übergeben und bei Änderungen auf dem UI-Thread über session.SetTrayAvailability(available) aktualisieren. Linux nicht pauschal ausschließen. Native Menüanbindung allein garantiert kein sichtbares Tray-Icon. Icon und Menü zum Öffnen/Beenden sowie ein sicherer Fallback ohne nutzbaren Tray gehören zum Folgeauftrag.

Screenshots

Nicht zutreffend — keine Änderung an Views oder Tray-Darstellung.

Checkliste

  • Branch-Name entspricht der Sortify-Konvention
  • Änderung gehört vollständig zum verknüpften Backend-Issue
  • Tests wurden ergänzt und bestehende Integrationstests erweitert
  • Dokumentation wurde aktualisiert
  • Keine vertraulichen Daten oder persönlichen lokalen Pfade committed; Testpfade werden temporär erzeugt

@TuNi02
TuNi02 merged commit 3b9f809 into master Oct 28, 2026
4 checks passed
@TuNi02
TuNi02 deleted the features/tuni02/81/background-lifetime branch October 28, 2026 14:19
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Task]: OS-unabhängige Hintergrund- und Exit-Steuerung implementieren

3 participants