#!/bin/sh

machine="osmio4kplus"
hdd_mount="/media/usb"
$(cat /proc/mounts | grep -q "/media/hdd") && hdd_mount="/media/hdd"
servicedir="$hdd_mount/service"
kernelname="kernel.bin"
kernelbase="linuxkernel"
rootbase="linuxrootfs"
picture_source="/usr/share/tuxbox/neutrino/icons"
rootfsname="rootfs.tar.bz2"
rootsource="/mnt/userdata"
devbase="/dev/disk/by-partlabel"
dev_display="/dev/dbox/oled0"
part_to_use="$1"
root="$(sed -e 's/^.*rootsubdir=//' -e 's/ .*$//' < /proc/cmdline | grep -o '[1-4]')"
res_setting="$(cat /etc/neutrino/config/neutrino.conf | grep osd_resolution | grep -o '[0-1]')"
resolution="1920x1080"
[ $res_setting = "0" ] && resolution="1280x720"

[ -z "$1" ] && part_to_use=$root

exit_done() {
	sleep 1
	clear
	systemctl start neutrino
	exit 0;
}


[ -z "$2" ] && [  -z "$1" ] && [ ! -d "$hdd_mount" ] && { printf '\n\033[31m%s\n' "Give the destination path an argument" && exit_done; }

if [ "$part_to_use" = 1 ]; then
	part=1; append=""
elif [ "$part_to_use" = 2 ]; then
	part=2; append=$part
elif [ "$part_to_use" = 3 ]; then
	part=3; append=$part
elif [ "$part_to_use" = 4 ]; then
	part=4; append=$part
fi

pidof neutrino >> /dev/null && systemctl stop neutrino 
echo encoder > /proc/stb/avs/0/input
clear
which convert >> /dev/null && convert -resize $resolution -gravity center -extent $resolution $picture_source/update.jpg bgra:/dev/fb0

$(cat /proc/mounts | grep -q "$rootsource$append") && space_available="$(df -Pk $rootsource$append | awk 'NR==2 {print $4}')"
[ -z "$2"  ] && $(cat /proc/mounts | grep -q "$hdd_mount") && space_available="$(df -Pk $hdd_mount | awk 'NR==2 {print $4}')"
[ -z "$2"  ] && $(cat /proc/mounts | grep -q "$hdd_mount") && [ -z "$1" ] && space_available="$(df -Pk $hdd_mount | awk 'NR==2 {print $4}')"
if [ ! -z "$space_available" ] && [ "$space_available" -lt 1048576 ]; then
	printf '\n\033[31m%s\n\t' "You need at least 1G of free space on your device"
	exit_done;
fi

printf '\n\n\n\033[1m%s\n\033[0m' "Creating backup of partition $part" && echo "Creating backup of partition $part" > "$dev_display"
[ ! -z "$2" ] && destination="$2/backup/partition_$part/$machine"
[ -z "$2"  ] && destination="$1/backup/partition_$part/$machine"
[ -z "$2"  ] && destination="$servicedir/image/backup/partition_$part/$machine"
[ -z "$2"  ] && [ -z "$1" ] && destination="$servicedir/image/backup/partition_$part/$machine"

[ -d "$destination" ] && rm -rf "$destination"
mkdir -p "$destination"

printf '\n\033[33m%s\033[37m%s\n' "Creating kernel backup in $destination/$kernelname"  && echo "Creating kernel backup" > "$dev_display"
pv -w 100 < "$devbase/$kernelbase$append" > "$destination/$kernelname"

printf '\n\033[33m%s\033[37m%s\n' "Creating rootfs backup in $destination/$rootfsname" && echo "Creating rootfs backup" > "$dev_display"
SIZE=`du -sk $rootsource/$rootbase$part | cut -f 1`
cd $rootsource/$rootbase$part && tar cf - --exclude="./var/lib/samba/private/msg.sock" . | pv -w 100 -s $SIZE"k" | bzip2 -c > $destination/$rootfsname

[ -f "$servicedir/image/imageversion_partition_$part" ] && cp -f "$servicedir/image/imageversion_partition_$part" "$destination/imageversion"

printf '\n\033[1m\033[32m%s\033[0m\n' "Backup successfully completed"  && echo "Backup successfully completed" > "$dev_display"

exit_done;
