#!/bin/bash set -e # Default-Konfiguration (per ENV überschreibbar) SERVER_USER="${SERVER_USER}" SERVER_SSH_PORT="${SERVER_SSH_PORT}" SERVER_IP="${SERVER_IP}" SERVER_DB_DIR="${SERVER_DB_DIR}" SERVER_PHOTO_DIR="${SERVER_PHOTO_DIR}" LOCAL_PHOTO_DIR="${PHOTO_DIR}" LOCAL_DARKTABLE_DB_DIR="${DARKTABLE_DB_DIR}" log() { echo "[$(date '+%Y-%m-%d %H:%M:%S')] $*" } count_synced_files() { local LOG="$1" local DIRECTION="$2" local COUNT=0 case "$DIRECTION" in up) COUNT=$(grep -E '^>f|cd' "$LOG" | wc -l) ;; down) COUNT=$(grep -E '^/dev/null; then export DISPLAY=:0 SYNC_LOG=$(mktemp) log "Server is reachable – starting sync..." log "Log file: $SYNC_LOG" if [ "$SHOW_NOTIFY_START_STOP" = true ]; then notify-send "Darktable Sync" "Sync started..." -t 3000 fi log "Uploading Darktable DB to Server..." UPLOAD_LOG1=$(mktemp) rsync -uavh --itemize-changes -e "ssh -p $SERVER_SSH_PORT" \ "$LOCAL_DARKTABLE_DB_DIR/" "$SERVER_USER@$SERVER_IP:$SERVER_DB_DIR/" \ 2>&1 | tee -a "$SYNC_LOG" "$UPLOAD_LOG1" SENT1=$(count_synced_files "$UPLOAD_LOG1" "up") rm "$UPLOAD_LOG1" log "Uploading photos to Server..." UPLOAD_LOG2=$(mktemp) rsync -uavh --itemize-changes -e "ssh -p $SERVER_SSH_PORT" \ "$LOCAL_PHOTO_DIR/" "$SERVER_USER@$SERVER_IP:$SERVER_PHOTO_DIR/" \ 2>&1 | tee -a "$SYNC_LOG" "$UPLOAD_LOG2" SENT2=$(count_synced_files "$UPLOAD_LOG2" "up") rm "$UPLOAD_LOG2" log "Downloading DB back from Server..." DOWNLOAD_LOG1=$(mktemp) rsync -uavh --itemize-changes -e "ssh -p $SERVER_SSH_PORT" \ "$SERVER_USER@$SERVER_IP:$SERVER_DB_DIR/" "$LOCAL_DARKTABLE_DB_DIR/" \ 2>&1 | tee -a "$SYNC_LOG" "$DOWNLOAD_LOG1" RECEIVED1=$(count_synced_files "$DOWNLOAD_LOG1" "down") rm "$DOWNLOAD_LOG1" log "Downloading photos from Server..." DOWNLOAD_LOG2=$(mktemp) rsync -uavh --itemize-changes -e "ssh -p $SERVER_SSH_PORT" \ "$SERVER_USER@$SERVER_IP:$SERVER_PHOTO_DIR/" "$LOCAL_PHOTO_DIR/" \ 2>&1 | tee -a "$SYNC_LOG" "$DOWNLOAD_LOG2" RECEIVED2=$(count_synced_files "$DOWNLOAD_LOG2" "down") rm "$DOWNLOAD_LOG2" if [ "$SHOW_NOTIFY_START_STOP" = true ]; then notify-send "Darktable Sync" "Sync finished." -t 3000 fi TOTAL_SENT=$((SENT1 + SENT2)) TOTAL_RECEIVED=$((RECEIVED1 + RECEIVED2)) if [ "$TOTAL_SENT" -gt 0 ] || [ "$TOTAL_RECEIVED" -gt 0 ]; then log "Uploaded: $TOTAL_SENT files" log "Downloaded: $TOTAL_RECEIVED files" notify-send "Darktable Sync" "↑ $TOTAL_SENT uploaded | ↓ $TOTAL_RECEIVED downloaded" -t 10000 else log "No changes detected." fi rm -f "$SYNC_LOG" else log "Server not reachable – skipping sync." fi