Refaktorierung: Common-Library mit generischen Funktionen

- Neue `darktable_common.sh` mit wiederverwendbaren Shell-Funktionen (Locking, Logging, Validierung)
- `darktable_sync.sh` nutzt jetzt Common-Library statt eingebettete Logik
- `darktable_wrapper.sh` vereinfacht durch Nutzung von Common-Funktionen
- Eliminiert Code-Duplikation zwischen Sync und Wrapper
- Verbessert Wartbarkeit und Testbarkeit

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-04-19 20:35:56 +02:00
parent 0cd9679767
commit 6fd8a8c308
3 changed files with 114 additions and 31 deletions
+23 -5
View File
@@ -5,20 +5,27 @@ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
# shellcheck source=darktable_common.sh
source "$SCRIPT_DIR/darktable_common.sh"
log_step "Darktable Wrapper gestartet (PID $$)"
check_dependency darktable
check_dependency ssh openssh-client
check_dependency notify-send libnotify-bin
log "Alle Abhängigkeiten vorhanden."
load_config
validate_config
log "Konfiguration geladen: Server=$SERVER_USER@$SERVER_IP:$SERVER_SSH_PORT"
export DISPLAY="${DISPLAY:-:0}"
log "Prüfen ob Darktable bereits läuft..."
if pgrep -x darktable &>/dev/null; then
log "Darktable läuft bereits (PID: $(pgrep -x darktable | tr '\n' ' ')) Abbruch."
notify-send "Darktable" \
"Darktable laeuft bereits. Bitte zuerst schliessen." -u critical
"Darktable läuft bereits. Bitte zuerst schließen." -u critical
exit 1
fi
log "Darktable läuft nicht."
ACTIVE_MARKER_SET=false
@@ -29,36 +36,47 @@ cleanup() {
}
trap cleanup EXIT INT TERM
log "Serververbindung prüfen ($SERVER_USER@$SERVER_IP Port $SERVER_SSH_PORT)..."
if ! server_reachable; then
log "Server nicht erreichbar."
if ! ask_user "Darktable Sync" \
"Server nicht erreichbar.\nDarktable ohne Synchronisation starten?"; then
log "Abbruch durch Benutzer Server nicht erreichbar."
exit 0
fi
log "Starte Darktable ohne Sync..."
log "Starte Darktable ohne Sync (Server offline)..."
else
log "Pre-Sync..."
log "Server erreichbar."
log_step "Pre-Sync"
"$SYNC_BIN"
log "Pre-Sync abgeschlossen."
MARKER="$(hostname) seit $(date '+%Y-%m-%d %H:%M:%S')"
log "Active-Marker setzen: $MARKER"
ssh_server "echo '$MARKER' > '$SERVER_DB_DIR/darktable.active'" || true
ACTIVE_MARKER_SET=true
fi
log "Starte Darktable..."
log_step "Darktable starten"
"$DARKTABLE_BIN" "$@" || true
log "Darktable beendet."
if [ "$ACTIVE_MARKER_SET" = true ]; then
log "Active-Marker entfernen..."
ssh_server "rm -f '$SERVER_DB_DIR/darktable.active'" 2>/dev/null || true
ACTIVE_MARKER_SET=false
log "Active-Marker entfernt."
fi
log "Serververbindung für Post-Sync prüfen..."
if server_reachable; then
log "Post-Sync..."
log_step "Post-Sync"
"$SYNC_BIN"
log "Post-Sync abgeschlossen."
else
log "Server nicht erreichbar Post-Sync übersprungen, sync_pending gesetzt."
touch "$CONFIG_DIR/sync_pending"
notify-send "Darktable Sync" \
"Server nicht erreichbar Sync ausstehend." -t 5000
fi
log_step "Darktable Wrapper beendet"