#!/bin/bash
#/usr/local/bin/AgentMan-template, 0.53
# AgentMan - AgentManager fuer getriggerte Backups, dz
#

#Ordnerpfad muss mit "/" enden
#
#dz-template
BAK="/Volumes/POST/dz/Back/QuarkBack.dz/"
SRC="/Volumes/Dickwannst/Docs/Artikel/ct 08/QuarkBack.dz/"
AGLIB="/Library/LaunchDaemons/"
SRCLAST="/tmp/source-last-template"
BACKSCRIPT=/usr/local/bin/back-template

PATH=/bin:/usr/bin:/sbin:/usr/sbin

writeAndStartAgent ()
{    	echo "erzeuge Agent "$AGLIB""$doc".plist"
	# Datei anlegen und Zeile fuer Zeile fuellen
	# Agent heisst so wie die zu sichernde Datei plus .plist
	touch $AGLIB"$doc".plist
	cat >> $AGLIB"$doc".plist <<-EOF
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
	<plist version="1.0">
	<dict>
	<key>Disabled</key>
	<false/>
		<key>Debug</key>
		<true/>
        	<key>Label</key>
        	<string>$doc</string>
        	<key>ProgramArguments</key>
        	<array>
                	<string>$BACKSCRIPT</string>
                	<string>$doc</string>
        	</array>
		<key>KeepAlive</key>
		<false/>
        	<key>WatchPaths</key>
        	<array>
  			<string>$SRC$doc</string>
        	</array>
	</dict>
	</plist>
EOF
	# Agent starten
	echo "lade Agent $AGLIB"$doc".plist"
	launchctl load -w $AGLIB"$doc".plist
	echo ""
}

if ! [ -f "$SRCLAST" ]; then
    touch "$SRCLAST"
fi

echo ""
echo "makeAgent: suche Dateien:"

# wenn Verzeichnis SRC vorhanden
if [ -d "$SRC" ]; then
    cd "$SRC"
    # Debug-Info
    echo "diese Dateien gefunden in SRC:"
    ls "$SRC"
    echo ""
	ls "$SRC" | while read doc; do 
	echo $doc
# wenn Datei existiert...
    if [ -f "$SRC""${doc}" ]; then
	echo "looking for Agent for "$SRC""$doc""
	echo ""
# und wenn Agent nicht existiert
# und wenn die Datei nicht .DS_Store ist...
	  if [ ! -f $AGLIB"$doc.plist" -a "$doc" != ".DS_Store" ]; then
		# dann neuen Agent machen:
	echo "keinen Agent gefunden, stelle einen her..."
	writeAndStartAgent
    fi fi
    done
fi

# ab dem zweiten Durchlauf:
# falls die Datei nicht mehr existiert, Agent stoppen und loeschen
if [ -f "$SRCLAST" ]; then
     echo "diese Dateien sind aufgefuerht in SRCLAST:"
     cat "$SRCLAST"
     echo ""
     while read doc; do 
# wenn die in SRCLAST gemerkte Datei in SRC nicht vorhanden...
     if ! [ -f "$SRC""${doc}" ]; then
	echo ""$SRC""$doc" not found"
# und wenn $AGLIB"$doc" existiert...
     if [ -f $AGLIB"$doc".plist ]; then 
	echo "entlade und entferne Agent "$SRC""$doc""
	launchctl unload -w $AGLIB"$doc".plist; rm $AGLIB"$doc".plist;
	fi    fi
    done < "$SRCLAST"
fi

# Verzeichnisinhalt fr den nchsten Durchlauf merken
ls "$SRC" >"$SRCLAST"
