#!/bin/bash
#                       /usr/local/bin/syncsd
# https://crystalfaeries.net/posix/bin/syncsd
# celeste:crystalfaery SYNCSD 2020-08-13 20:13:41+00:00
# synchronize fey's data with whichever (microSD in adapter for) SD card is plugged-in

cd -P "${HOME}"
let hd_full=$(df --full		|	grep	/dev/mapper/fey--vg-home		|	sed	's/\%.*$// ; s/^.* //')
echo "hd_full=${hd_full}"

uuid="$(ls -FlaR /dev/disk/by-uuid/	| \
	grep mmcblk0p1			| \
	sed 's/ -> .*$// ; s/^.* //')"
case "${uuid}" in

ddfacfa9-72da-4f1a-9e8a-ae227dc1e0bf | 95457e22-3046-4600-80cd-d1a0a9ebd0ba | f1409825-f1a8-42dd-b2af-d37b108ee6ce)
	echo	"last saw SD card:"
	if	$( grep	mmcblk0p1	/etc/mtab > /dev/null 2>&1 )
	then
		echo	"`grep	mmcblk0p1	/etc/mtab`"	# we seem to be mounted already?
	else
		echo	"`grep	mmcblk0p1	/proc/partitions`"	# we are not mounted?
	sudo	mkdir	-p				  /media/`whoami`/"${uuid}"	&&	\
	sudo	chown	`whoami`:			  /media/`whoami`/"${uuid}"
	sudo	fsck	-t ext4				/dev/disk/by-uuid/"${uuid}"	&&	\
	sudo	mount	-t ext4 -o errors=remount-ro	/dev/disk/by-uuid/"${uuid}"		\
							  /media/`whoami`/"${uuid}"	|| exit $?
	fi

	let sd_full=$(df --full	|	grep	"${uuid}"	|	sed	's/\%.*$// ; s/^.* //')
	echo	 "sd_full=${sd_full}"
	if [	${sd_full}	-lt	95	]
	then	# have space on SD card so backup to it!
		echo -n	"I have space on microSD card so back-up to it with deleting? "
		read	choice
		case "${choice}" in
n | no )
		;;
* )
		# backup with deleting all but audio and some tansients:
		rsync --delete	-auvH				\
			--exclude=video/security_now/		\
			--exclude=audio				\
			"${HOME}"/crystalfaeries.net/{.??,}*	\
			/media/`whoami`/"${uuid}"

		# update our view of the website's use of our directory:
		# find all webpages, except the igal2 index pages,
		# which reference our own website for audio files:
		find	crystalfaeries.net -name   '*.html'			\
		\!	-name		       '[0-9].html'			\
		\!	-name		  '[0-9][0-9].html'			\
		\!	-name	     '[0-9][0-9][0-9].html'			\
		\!	-name	'[0-9][0-9][0-9][0-9].html'			\
			-exec	grep -H 'href="/audio/' {} \;	2>/dev/null	\
		|		grep -v 'href="/audio/"'			\
		|		grep -v '#'					\
		|		grep -v '/fae/archive/'					\
		|	sort -u >			crystalfaeries.net/src/.crystalfaeries.hrefs.audio.txt

		sed	's/^.*href="//;s/".*$//' <	crystalfaeries.net/src/.crystalfaeries.hrefs.audio.txt	\
		|	sort -u	>			crystalfaeries.net/src/.crystalfaeries.hrefed.audio.txt

		# make directory tree into which we can rsync individual files:
		grep	'\/$'				crystalfaeries.net/src/.crystalfaeries.hrefed.audio.txt	\
		>					crystalfaeries.net/src/.crystalfaeries.dirs.audio.txt

		for d in $(cat crystalfaeries.net/src/.crystalfaeries.dirs.audio.txt)
		do
			mkdir -p			  crystalfaeries.net/"${d}"	\
			/media/`whoami`/"${uuid}"/"${d}"			
		done

		# backup just audio files referenced in website:
		grep -v	'\/$'				crystalfaeries.net/src/.crystalfaeries.hrefed.audio.txt	\
		>					crystalfaeries.net/src/.crystalfaeries.files.audio.txt

		for f in $(cat crystalfaeries.net/src/.crystalfaeries.files.audio.txt)
		do
		rsync	-auvH	--exclude=video/security_now/	\
			"${HOME}"/crystalfaeries.net/"${f}" /media/`whoami`/"${uuid}"/"${f}"
		rsync	-auvH	--exclude=video/security_now/	\
							/media/`whoami`/"${uuid}"/"${f}"	\
			"${HOME}"/crystalfaeries.net/"${f}"
		done

		;;
		esac

	else	# outa space on microSD card so exclude audio
		echo -n	"I'm out of space on microSD card so back-up all but audio to it with deleting? "
		read	choice
		case "${choice}" in
n | no )
		;;
* )
		rsync --delete	-auvH --exclude=audio	\
			--exclude=video/security_now/	\
			"${HOME}"/crystalfaeries.net/{.??,}* /media/`whoami`/"${uuid}"
		;;
		esac

	fi
		pushd	/media/`whoami`/"${uuid}"
		yes|fdedupe
		    fdedupe -f
		popd

	if [	${hd_full}	-lt	$(head -n 1 "${HOME}"/.downloadlimit)	]
	then	# have space on HD so download to it!
		echo -n	"I have space on HD so downloading to it: (dry-run) ? "
		read	choice
		case "${choice}" in
n | no )
		;;
* )
		rsync --dry-run -auvH --exclude=audio	\
			--exclude=video/security_now/	\
			/media/`whoami`/"${uuid}"/{.??,}*	\
			"${HOME}"/crystalfaeries.net	|&	less -X
		;;
		esac

		# now incrementally unbackup audio directories by size
		echo -n	"Now incrementally unbackup audio directories by size ? "
		read	choice
		case "${choice}" in
n | no )
		;;
* )
		for d in $(find /media/`whoami`/"${uuid}"/audio -maxdepth 1 -type d -exec du -s {} \;	| \
			sort -n	| \
			cut -f2-)
		do
			echo	"${d}"
			rsync -auvH	"${d}"	\
			"${HOME}"/crystalfaeries.net/audio	|&	less -X
			let hd_full=$(df --full | grep /dev/mapper/fey--vg-home | sed 's/\%.*$// ; s/^.* //')
			echo "hd_full=${hd_full}"
			if [	${hd_full}	-ge	$(head -n 1 "${HOME}"/.downloadlimit)	]
			then
				df --full
				exit	$?
			fi
		done
		;;

	esac

	pushd													"${HOME}"/crystalfaeries.net/
	yes|fdedupe
	    fdedupe -f
	popd
	exit	$?
	;;

ec38fb59-859a-40f1-864e-f01dd1f89689)	#   2GB SD card backup of crystalfaeries.net/galleries
	echo	"2GB SD card of crystalfaeries.net/galleries"
	if	$( grep	/dev/mmcblk0p1	/etc/mtab > /dev/null 2>&1)
	then
		echo	"`grep	/dev/mmcblk0p1	/etc/mtab`"	# we seem to be mounted already?
	else
		echo	"`grep	/dev/mmcblk0p1	/proc/partitions`"	# we are not mounted?
	sudo	mkdir	-p				  /media/`whoami`/ec38fb59-859a-40f1-864e-f01dd1f89689	&&	\
	sudo	chown	`whoami`:			  /media/`whoami`/ec38fb59-859a-40f1-864e-f01dd1f89689
	sudo	fsck	-t ext4				/dev/disk/by-uuid/ec38fb59-859a-40f1-864e-f01dd1f89689	&&	\
	sudo	mount	-t ext4 -o errors=remount-ro	/dev/disk/by-uuid/ec38fb59-859a-40f1-864e-f01dd1f89689		\
							  /media/`whoami`/ec38fb59-859a-40f1-864e-f01dd1f89689	|| exit $?
	fi

	if [	${hd_full}	-le	$(head -n 1 "${HOME}"/.downloadlimit)	]
	then	# have space on HD so download to it!
		rsync -auvH --dry-run			  /media/`whoami`/ec38fb59-859a-40f1-864e-f01dd1f89689/*	\
			"${HOME}"/crystalfaeries.net | less -X
		echo -n "proceed to download? (N/y): "
		read choice
		case  "${choice}" in
	yes | y)
		rsync -auvH				  /media/`whoami`/ec38fb59-859a-40f1-864e-f01dd1f89689/*	\
			"${HOME}"/crystalfaeries.net
		;;
	*)
		echo "not downloaded..."
		;;
		esac
	fi

	let sd_full=$(df --full	|	grep	ec38fb59-859a-40f1-864e-f01dd1f89689	|	sed	's/\%.*$// ; s/^.* //')
	echo	 "sd_full=${sd_full}"
	if [	${sd_full}	-le	$(head -n 1 "${HOME}"/.downloadlimit)	]
	then	# have space on SD card so backup to it!
		rsync -auvH	--delete	\
		--exclude=astrolog		\
		--exclude=audio			\
		--exclude=cdn-cgi		\
		--exclude=celeste		\
		--exclude=clairvoyance		\
		--exclude=clipart		\
		--exclude=epub			\
		--exclude=fae			\
		--exclude=fay			\
		--exclude=galleries/budwig	\
		--exclude=galleries/coins	\
		--exclude=galleries/faeries	\
		--exclude=galleries/garters	\
		--exclude=galleries/music	\
		--exclude=galleries/tech	\
		--exclude=icons			\
		--exclude=imgs			\
		--exclude=linkdoc		\
		--exclude=lost+found		\
		--exclude=posix			\
		--exclude=src			\
		--exclude=video			\
		"${HOME}"/crystalfaeries.net/{.??,}*	/media/`whoami`/ec38fb59-859a-40f1-864e-f01dd1f89689
		pushd	"${HOME}"/crystalfaeries.net/galleries/faeries	1>/dev/null	2>/dev/null
		for d in $(du -a * | sort -nr | cut -f2)
		do
			rsync -auvH	"${d}"		/media/`whoami`/ec38fb59-859a-40f1-864e-f01dd1f89689/galleries/faeries
		done
		popd							1>/dev/null	2>/dev/null
	fi
	pushd	/media/`whoami`/ec38fb59-859a-40f1-864e-f01dd1f89689
	for i in {1..9}
	do
		fdedupe -f	#can we hardlink to reduce disk usage?
	done
	popd
	sync;umount						/media/`whoami`/ec38fb59-859a-40f1-864e-f01dd1f89689	2>/dev/null	|| \
	sudo umount						/media/`whoami`/ec38fb59-859a-40f1-864e-f01dd1f89689
	exit	$?
	;;

64A5-F009)	#   2GB SD card from Panasonic Lunix DMC-FH20 (more than 1)
	echo	"2GB SD card from Panasonic Lumix DMC-FH20"
	if	$( grep	/dev/mmcblk0p1	/etc/mtab > /dev/null 2>&1 )
	then
		echo	"`grep	/dev/mmcblk0p1	/etc/mtab` is already mounted."	# we seem to be mounted already?
	else
		echo	"mounting: `ls -FlaR /dev/disk/by-uuid/ | grep mmcblk0p1`"	# get the UUID
		sudo	mkdir	-p				  /media/`whoami`/64A5-F009	&&	\
		sudo	chown	`whoami`:			  /media/`whoami`/64A5-F009
		sudo	fsck	-t vfat				/dev/disk/by-uuid/64A5-F009	&&	\
		sudo	mount	-t vfat	-o rw,nosuid,nodev,relatime,uid=1000,gid=1000,fmask=0022,dmask=0022,codepage=437,iocharset=ascii,shortname=mixed,showexec,utf8,flush,errors=remount-ro		\
			/dev/disk/by-uuid/64A5-F009	\
			  /media/`whoami`/64A5-F009
		echo	"mounted: `grep	/dev/mmcblk0p1	/etc/mtab`"	# we seem to be mounted already?
	fi

	let sd_full=$(df --full	|	grep	64A5-F009	|	sed	's/\%.*$// ; s/^.* //')
	echo	 "sd_full=${sd_full}"

	if [	${hd_full}	-le	$(head -n 1 "${HOME}"/.downloadlimit)	]
	then	# have space on HD so download to it!
		rsync -auvH	/media/`whoami`/64A5-F009/*	"${HOME}"/crystalfaeries.net/imgs/journal/
	else
		echo	"We don't have space to download... you wanna get choosier?"
		gwenview	/media/`whoami`/64A5-F009/		# are you sure you wanna delete these?
	fi
	gwenview			"${HOME}"/crystalfaeries.net/imgs/journal/
	sync;sync;sync	# VFATS can be problematical :-(
	     umount						/media/`whoami`/64A5-F009	2>/dev/null	|| \
	sudo umount						/media/`whoami`/64A5-F009
	exit	$?
	;;

*)					# None of our business... yet
	echo -n	"last saw as /dev/mmcblk0p1: "
	if	$( grep	/dev/mmcblk0p1	/etc/mtab > /dev/null 2>&1 )
	then
		echo	"`grep	/dev/mmcblk0p1	/etc/mtab`"	# we seem to be mounted already?
	else
		echo	"`ls -FlaR /dev/disk/by-uuid/ | grep mmcblk0p1`"	# get the UUID
	fi
	exit	$?
	;;

esac
exit	$?
