Unify manual and automatic sync via SyncCoordinator
Der manuelle "Synchronisieren"-Button (SyncProgressForm) lief ueber eine eigene Engine und umging die clientuebergreifende Lock-Datei, den lokalen Guard und einen Teil des Protokolls. Jetzt teilen sich beide Pfade einen SyncCoordinator. - Neuer SyncCoordinator kapselt: prozessweiten Re-Entrancy-Guard (statisch, so koennen manueller + automatischer Sync nicht mehr gleichzeitig laufen), Lock-Datei (mit Warte-Status), Konflikt-Notizen anderer Arbeitsplaetze, Protokoll (Start/Ergebnis/Aenderungen/Konflikte/Fehler) und das Verteilen eigener Konflikt-Notizen. runEngine wird vom Aufrufer uebergeben, damit das Threading pro Pfad erhalten bleibt (UI-Thread vs. Task.Run). - MainForm.RunSync und SyncProgressForm.RunSync nutzen den Coordinator; UI (Tray-Meldung vs. Fenster) bleibt jeweils beim Aufrufer. - Lock/Notiz/Guard-Logik aus MainForm entfernt (jetzt zentral). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -79,6 +79,13 @@ Versionsschema ist `x.x.x.x` (siehe `release.sh`).
|
||||
|
||||
### Geaendert
|
||||
|
||||
- **Manueller und automatischer Sync vereinheitlicht.** Beide Pfade laufen jetzt
|
||||
ueber einen gemeinsamen `SyncCoordinator` und nutzen damit dieselben Schutz-
|
||||
und Komfortfunktionen: lokaler Re-Entrancy-Schutz (prozessweit - auch manuell
|
||||
vs. automatisch koennen nicht mehr gleichzeitig laufen), clientuebergreifende
|
||||
Lock-Datei, Konflikt-Notizen anderer Arbeitsplaetze und vollstaendiges
|
||||
Protokoll. Vorher umging der manuelle "Synchronisieren"-Button (Fenster) die
|
||||
Lock-Datei und einen Teil des Protokolls.
|
||||
- **Doppelte Syncs verhindert (lokal).** Der Schutz gegen gleichzeitig laufende
|
||||
Syncs (manuell + Auto-Sync-Timer) ist jetzt atomar (`Interlocked`) statt eines
|
||||
nicht-atomaren `volatile bool`, bei dem beide in einem Zeitfenster
|
||||
|
||||
Reference in New Issue
Block a user