Files
darktable-sync/scripts/darktable_common.sh
T
martin 46664ab3b6 Code-Vereinfachung: Redundanzen entfernen und Wiederverwendung verbessern
- log() Funktion in darktable_common.sh ausgelagert (war doppelt vorhanden)
- ssh_server() Hilfsfunktion für wiederholte SSH-Aufrufe mit konsistenten Optionen
- ssh_server() nutzen statt inline SSH-Befehle in darktable_sync.sh und darktable_wrapper.sh
- Reduzierung von SSH-Optionswiederbholungen (ConnectTimeout, BatchMode, Port)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-19 19:45:11 +02:00

74 lines
1.8 KiB
Bash

#!/usr/bin/env bash
# Gemeinsame Hilfsfunktionen fuer darktable-sync Scripts.
# Dieses Script wird per `source` eingebunden, nicht direkt ausgefuehrt.
CONFIG_DIR="$HOME/.config/darktable-sync"
load_config() {
local env_file="$CONFIG_DIR/.env"
if [ ! -f "$env_file" ]; then
echo "Fehler: Konfiguration nicht gefunden: $env_file" >&2
echo "Vorlage kopieren mit: cp .env.example $env_file" >&2
exit 1
fi
# shellcheck source=/dev/null
. "$env_file"
}
require_var() {
local var_name="$1"
if [ -z "${!var_name:-}" ]; then
echo "Fehler: Variable '$var_name' ist nicht gesetzt in $CONFIG_DIR/.env" >&2
exit 1
fi
}
validate_config() {
require_var SERVER_IP
require_var SERVER_USER
require_var SERVER_SSH_PORT
require_var SERVER_DB_DIR
require_var SERVER_PHOTO_DIR
require_var LOCAL_DARKTABLE_DB_DIR
require_var LOCAL_PHOTO_DIR
require_var SYNC_BIN
require_var DARKTABLE_BIN
}
check_dependency() {
local cmd="$1" pkg="${2:-$1}"
if ! command -v "$cmd" &>/dev/null; then
echo "Fehler: '$cmd' ist nicht installiert." >&2
echo "Installieren mit: sudo apt install $pkg" >&2
exit 1
fi
}
log() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $*"
}
ssh_server() {
ssh -o ConnectTimeout=5 -o BatchMode=yes \
-p "$SERVER_SSH_PORT" "$SERVER_USER@$SERVER_IP" "$@"
}
server_reachable() {
ssh_server true 2>/dev/null
}
ask_user() {
local title="$1" text="$2" ans
if command -v zenity &>/dev/null; then
zenity --question --title="$title" --text="$text" 2>/dev/null
return $?
elif command -v kdialog &>/dev/null; then
kdialog --title "$title" --yesno "$text" 2>/dev/null
return $?
else
read -r -p "$text [j/N] " ans || true
[[ "$ans" =~ ^[jJyY] ]]
return $?
fi
}