Files

4.7 KiB

SyncVito

SyncVito ist ein Windows-Desktopwerkzeug zum Synchronisieren lokaler Ordner mit NAS- oder anderen Dateisystempfaden. Die Oberfläche ist vollständig deutsch, läuft im Windows-Infobereich weiter und speichert Aufgaben sowie Einstellungen lokal als JSON.

Funktionsumfang

  • Beliebig viele Sync-Aufgaben mit Quell- und Zielordner
  • Einweg-Synchronisation oder bidirektionaler Abgleich
  • Manuelle, zeitgesteuerte oder durch watchdog ausgelöste Echtzeitläufe
  • Optionale Unterauswahl einzelner Dateien und Ordner
  • Löschungen spiegeln oder Dateien grundsätzlich behalten
  • Konfliktwahl: neuerer Zeitstempel gewinnt oder _conflict-Sicherung
  • Erkennung sperrender Windows-Prozesse über den Restart Manager
  • Automatischer Retry für gesperrte Dateien und nicht erreichbare NAS-Pfade
  • Eine zentrale Fortschrittsanzeige, Aktivitätsprotokoll und Status im Tray
  • Aufgabenbezogener Laufzeitstatus mit Worst-Case-Ableitung: grün bei gesunden aktiven Aufgaben, rot bei Pause/Inaktivität und Ausrufezeichen bei Fehlern, NAS-Ausfall oder wartenden Dateisperren
  • Persistente Darstellungseinstellungen und optionaler Windows-Autostart
  • UAC-Manifest mit requireAdministrator
  • Automatische oder manuelle Updateprüfung über öffentliche Gitea-Releases
  • SHA-256-geprüfter Installer-Download mit sicherem Start erst nach dem vollständigen Beenden

Projektseite: gitea.davito.synology.me/Davito/SyncVito

Entwicklung starten

Voraussetzung ist Python 3.11 oder neuer unter Windows.

python -m pip install -r requirements.txt
python main.py

Die Konfiguration wird unter %LOCALAPPDATA%\SyncVito\config.json gespeichert. Der technische Abgleichzustand für bidirektionale Löschungen liegt daneben in sync-state.json.

Tests

python -m pytest

Eigenständigen Windows-Installer bauen

.\build.ps1

Das Ergebnis liegt anschließend unter release\SyncVitoSetup-<Version>.exe. Der Installer enthält eine eigenständige PyInstaller-One-File-Anwendung einschließlich Python-Interpreter, PyQt6, watchdog und aller übrigen Laufzeitabhängigkeiten. Auf dem Zielrechner müssen weder Python noch pip installiert sein. Anwendung und Installer fordern die benötigten Administratorrechte über ihre Windows-Manifeste an.

Hinweis: Eine nicht signierte lokale EXE kann beim ersten Start einen Windows-SmartScreen-Hinweis auslösen. Für die Verteilung in einer Organisation empfiehlt sich eine reguläre Codesignatur.

Updates und Releases

SyncVito fragt höchstens einmal innerhalb von 24 Stunden die stabilen Releases des öffentlichen Gitea-Repositories ab. Die automatische Prüfung lässt sich in den Einstellungen abschalten; eine manuelle Prüfung ist dort und im Tray-Menü jederzeit möglich.

Ein installierbares Release benötigt diese Anhänge:

  • SyncVitoSetup-<Version>.exe
  • SyncVitoSetup-<Version>.exe.sha256
  • CHANGELOG-<Version>.md

Die Version wird zentral aus version.txt geladen. Der vollständige Workflow wird mit folgendem Auftrag ausgelöst:

Bau den Installer und lade es auf Gitea hoch

Dabei wird die Patch-Version erhöht, der Änderungsabschnitt geprüft, die Tests und der EXE-Smoke-Test ausgeführt, der Installer gebaut, der Quellstand committed und gepusht und anschließend ein Gitea-Release mit verifizierten Assets angelegt. Das Gitea-Token bleibt per DPAPI lokal geschützt und wird weder in die Anwendung noch in das Repository übernommen.

Projektstruktur

src/syncvito/
├── app.py             Anwendungsstart und Einzelinstanzschutz
├── main_window.py     Hauptfenster, Tray und UI-Zustand
├── dialogs.py         Aufgaben- und Unterauswahl-Dialoge
├── coordinator.py     Hintergrundläufe, Zeitplan und Retry
├── sync_engine.py     Dateisystem-Abgleich
├── file_locks.py      Windows-Sperrprozess-Erkennung
├── realtime.py        watchdog-Integration
├── updater.py         Gitea-Protokoll, Download und Integritätsprüfung
├── update_controller.py Hintergrund-Worker für Updates
├── update_dialog.py   deutscher Versionsdialog
├── config_store.py    atomare JSON-Konfiguration
├── state_store.py     bidirektionaler Abgleichzustand
├── models.py          Domänenmodelle und Validierung
├── theme.py           Dark-Mode-Designsystem
└── icons.py           skalierbare Statussymbole

Sicherheitshinweise

Beim Modus „Löschungen spiegeln“ entfernt SyncVito Dateien auf der Gegenseite, nachdem eine Löschung gegenüber dem letzten erfolgreichen Lauf eindeutig erkannt wurde. Vor produktivem Einsatz empfiehlt sich ein Test mit einem kleinen Ordnerpaar und eine vorhandene Datensicherung. Symbolische Links werden bewusst nicht verfolgt.