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
watchdogausgelö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 Download und sicherer Austausch der EXE nach dem 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ändige EXE bauen
.\build.ps1
Die Ergebnisse liegen anschließend unter dist\SyncVito.exe und dist\SyncVito.exe.sha256. Die EXE ist eine One-File-Anwendung ohne benötigte Python-Installation und fordert beim Start über das eingebettete Manifest Administratorrechte 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 exakt diese Anhänge:
SyncVito.exeSyncVito.exe.sha256
Für ein Release muss die Version in src/syncvito/version.py angepasst und der Quellstand committed sein. Anschließend wird ein Gitea-Token mit Repository-Schreibrecht ausschließlich lokal gesetzt:
$env:GITEA_TOKEN = "<lokales-token>"
.\publish-release.ps1 -Version 1.0.0 -Notes "Erstes stabiles Release"
Das Skript baut und testet die Anwendung, erzeugt Tag und Release und lädt beide Artefakte hoch. Das Token wird weder in der Anwendung noch im Repository gespeichert.
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.