Files
darktable-sync/scripts/darktable_sync.sh
T

110 lines
3.2 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/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 '^<f|cd' "$LOG" | wc -l)
;;
esac
echo "$COUNT"
}
SCRIPT_NAME=$(basename "$0")
LOCKFILE="/tmp/${SCRIPT_NAME}.lock"
if [ -e "$LOCKFILE" ]; then
echo "Script is already running or delete $LOCKFILE"
exit 1
fi
touch "$LOCKFILE"
trap "rm -f '$LOCKFILE'" EXIT
SHOW_NOTIFY_START_STOP=false
if [[ "$1" == "--with-notify-start-stop" ]]; then
SHOW_NOTIFY_START_STOP=true
fi
if ping -c 1 "$SERVER_IP" &>/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