#!/bin/bash
#
# diskmanager.sh				First Version 19 Dec 2005
#
# Latest RC: 		v0.05, Dec 22
# Latest Version: 	v0.1.1, Dec 25
#
# IMPORTANT!
# IMPORTANT!            DO NOT USE THIS SCRIPT!! IT _WILL_ FAIL
# IMPORTANT!
#
# GPL - Marno van der Molen - marno.vandermolen@gmail.com
#
# Manages multiple disks; it implements the basic things used in LVM, without
# the need to reformat your disks.
#

### INIT
VERSIONTAG="Beta Version v0.1.1 Dec 25"
alias dialog='dialog --backtitle "Diskspace Management Utility (${VERSIONTAG}) by Marno"'
uploads=/largedisk/uploads
manage="movies
software
games
ebooks"
# Albums
# UnsortedMusic
# EminemMusic

### CHECK
if [ ! -w /root/diskmanager.sh ]
then
	dialog --title "Fatal Error" --msgbox "You do not appear to have root privileges!" 5 50
	exit
else
	rm /tmp/menuitem* -f > /dev/null 2>&1
fi

### FUNCTIONS
notfinished () {
NOTFINISHED="${NOTFINISHED} ${1}"
}

finished () {
FINISHED="${FINISHED} ${1}"
}

list () {
	var=""
	for ITEM in $manage
	do
		var="${var}\n- ${ITEM}"
	done
	dialog --title "Currently Managing.." --msgbox "We are currently managing: ${var}" 0 0
	menu
}

diskerror () {
dialog --title "Disk Error" --msgbox "Er was onvoldoende schijfruimte beschikbaar om de ${1} op te slaan.\n\nBeschikbaar: ${2}\nNodig: ${3}" 0 0
menu
}

checksize () {
AVAIL=`df -l /home/symlinks/$1/*/ | awk {'print $4'} | grep -v Available | sort -nr | head -n 1`
NEED=$2
if [ "$NEED" -gt "$AVAIL" ]
then
	DISK="error"
else
	DISK=`df -l | grep $AVAIL | awk {'print $6'}`
fi
}

movefiles () {
	# Cleanup
	NOTFINISHED=""
	FINISHED=""
	
	# Start loop
	for TYPE in $manage #"movies" "music" "software" "games" "ebooks" "Ongesorteerde Muziek" "Eminem Music" "Albums"
	do

	if [ `ls -ald $uploads/$TYPE/* > /dev/null 2>&1; echo $?` == "0" ]
	then
	# Files have been found, check the size against total available space
		checksize $TYPE `du -lc $uploads/$TYPE/* | awk {'print $1'} | tail -n 1`
	
		if [ $DISK = "error" ]
		then
		# Onvoldoende schijfruimte
			diskerror $TYPE $AVAIL $NEED
		else
		# Voldoende schijfruimte, ga bestanden verplaatsen.
			
			done="false"
			dialog --title "Verplaatsen?" --yesno "Druk op [ENTER] om te beginnen met het verplaatsen van ${TYPE} naar ${DISK}/${TYPE}." 0 0
			case "$?" in
				0 ) mv ${uploads}/${TYPE}/* ${DISK}/${TYPE} && DONE="true" && finished ${TYPE} ;;
				1 ) notfinished ${TYPE}; DONE="false" ;;
			esac

			# Subcheck voor het updaten van de moviedb
			if [ "${DONE}" == "true" ] 
			then
				if [ $TYPE == "movies" ]
				then
					dialog --title "Update moviedb?" --defaultno --yesno "There are new movies added to the database. Do you want to update the moviedatabase too?\n\nCommand: moviedbgenerator -m" 0 0
					case "$?" in
						0 ) moviedbgenerator -m > /dev/null 2>&1 ;;
					esac
				fi
			fi
		fi
	fi
	done
	
	if [ "${FINISHED}" = "" ]
	then
		FINISHED="None"
	fi

	if [ "${NOTFINISHED}" = "" ]
	then
		dialog --title "Status Report" --msgbox "Success!\nTypes moved: $FINISHED." 0 0
	else
		dialog --title "Status Report" --msgbox "Some types failed to be moved to their correct place!\n\nTypes Moved: $FINISHED.\nAborted: $NOTFINISHED." 0 0
	fi
	menu
}

check () {
	if [ `ls -ald $uploads/*/* >/dev/null 2>&1; echo $?` == "0" ]
	then
		dialog --title "New Files Found" --yesno "Found new files! Do you want to move them to their corresponding drives now?" 6 45
		case "$?" in
			1 ) menu;;
			0 ) movefiles;;
		esac
	else
		dialog --title "No Files Found" --msgbox "Didn't find new files!" 5 28
		menu
	fi
}

status () {
	message=`df -hl | head -n 1 && df -hl | grep -v "/dev/shm" | grep -v "/tmp" | tail -n 3`
	dialog --title "Check Diskspace" --msgbox "$message" 0 0
	menu
}

gotoexit () {
# Clean up, we're exiting!
	unalias dialog > /dev/null 2>&1
	exit
}

error () {
	dialog --title "Fatal Error" --msgbox "This option hasn't been implemented yet. You should not get here! Please report this as a bug to marno.vandermolen@gmail.com and explain what you were doing!" 0 0
}

menu () {
dialog --title "Main Menu" \
--menu "Move using [UP] [DOWN], [Enter] to Select" 0 0 4 \
	Status "View status messages" \
	Check  "Perform new file check" \
	List "See what we currently manage" \
	Exit "Exit" \
	2>/tmp/menuitem.$$

menuitem=`cat /tmp/menuitem.$$`

case "$menuitem" in
	Status ) status;;
	Check ) check;;
	List ) list;;
	Exit ) gotoexit;;
	* ) gotoexit;
esac
}

### START
menu

