#!/bin/sh


echo "***** MAJ agent V1.00 *****"
#Initialisation
DONE=0
LINKDIR=" http://support.capelec.fr/Download/CAP1XXX/CAP1830/"
FICHIERLIST="list.txt"

#Lecture des infos sur le CAP1830
echo "***** Info CAP1830 *****"
#VERSION
VERSION=`cat "/etc/info" | grep "VERSION" | cut -d"=" -f2 `
VNUM=`echo $VERSION | tr -d ".Vv "`
echo "VERSION=$VERSION ($VNUM)"
if [ -z $VNUM ]; then
	echo "ERROR: VERSION is null"	
	exit
fi
#BRAND
BRAND=`cat "/home/CAPELEC/DATA/PARAM.txt" | grep "#005#" | cut -d"#" -f3 | tr -d "1 "`
echo "BRAND=$BRAND"
if [ -z $BRAND ]; then
	echo "ERROR: BRAND is null"	
	exit
fi
#SERIAL
SERIAL=`cat "/home/CAPELEC/DATA/PARAM.txt" | grep "#020#" | cut -d"#" -f3 | tr -d " "`
echo "SERIAL=$SERIAL"
if [ -z $SERIAL ]; then
	echo "ERROR: SERIAL is null"	
	exit
fi
#MODEL
MODEL="CAP1830"
echo "MODEL=$MODEL"

echo "***** Download Time *****"
#Création de l'heure de MAJ
#Mise à jour peut se lancer de 9h à 17h
#RAND=230 #DEBUG
RAND=$RANDOM
echo "Random=$RAND"
INITDATE=`date -d "9:00" +%s`

#Modulo 480 minutes (8h)
MODULO=480
OFFSET=`expr \( $SERIAL + $RAND \) % $MODULO`
OFFSETSEC=`expr $OFFSET \* 60`
echo "Offset=$OFFSET `date -d @$OFFSETSEC +%H:%M:%S`"
TIMESEC=`expr $INITDATE + $OFFSETSEC`
TIME=`date -d @$TIMESEC +%H%M`
echo "Time=$TIME"

echo "***** Start wait loop *****"
while :; do
	CURTIME=`date +%H%M`
	#echo "CurTime=$CURTIME"
	if [ $CURTIME \> $TIME ] && [ $DONE = 0 ] || [ -e "/home/CAPELEC/DATA/GOMAJ" ]; then #Test si C'est l'heure et si la MAJ a déjà été faite aujourd'hui
		rm /home/CAPELEC/DATA/update/* #effacement des anciennes MAJ
		mkdir /home/CAPELEC/DATA/dltmp #Création d'un répertoire temporaire de travail
		cd /home/CAPELEC/DATA/dltmp
		LINK=${LINKDIR}${FICHIERLIST}
		echo "Download list file $LINK" 
		wget $LINK #Téléchargement du fichier liste
		if [ -e $FICHIERLIST ]; then	#Test si le fichier existe?
			#Mise en forme UNIX du fichier
			cat "$FICHIERLIST" | tr "\r" " " > "tmp" 
			cat "tmp" > "$FICHIERLIST"
			rm tmp
			NBFILE=`cat $FICHIERLIST 2> /dev/null | wc -w` #Compte le nombre de .cap dans le fichier list
			echo "Number of file: $NBFILE"
			if [ $NBFILE != 0 ]; then
				for NFILE in `seq $NBFILE`
			    	do 
					echo "--------------------------"	
					FILE=`sed -n ${NFILE}p $FICHIERLIST`
					echo "File: $FILE"
					LINK=${LINKDIR}${FILE}
					echo "Download $LINK"			
					wget $LINK #Téléchargement du fichier .cap
					if [ -e $FILE ]; then	#Test si le fichier .cap existe?
						#echo "Read $FILE"
						#Mise en forme UNIX du fichier
						cat "$FILE" | tr "\r" " " > "tmp"
						cat "tmp" > "$FILE"
						rm tmp	
						#RAZ variables
						MMAJOR="";MVERSION="";MBRAND="";MMODEL="";MSERIAL="";MCOUNTRY="";MTYPE="";MLINKINFO="";MLINK="";MCS="" 					
						source "$FILE"
						#Analyse Version Majeur	
						MMAJORNUM=`echo $MMAJOR | tr -d ".Vv "`
						echo "  Test: MMAJOR=$MMAJOR ($MMAJORNUM)"
						echo "  $VNUM >= $MMAJORNUM"
						if [ -n "$MMAJORNUM" ]; then									
							if [ $VNUM -ge $MMAJORNUM ]; then	
								OK=1
								echo "---> Ok"
							else 
								OK=0		
								echo "---> FAIL"					
							fi	
						else 
							OK=0		
							echo "---> FAIL"					
						fi
						if [ $OK = 1 ]; then
							#Analyse Version Mineur
							MVERSIONNUM=`echo $MVERSION | tr -d ".Vv "`
							echo "  Test: MVERSION=$MVERSION ($MVERSIONNUM)"
							echo "  $VNUM < $MVERSIONNUM"
							if [ -n "$MVERSIONNUM" ]; then	
								if [ $VNUM -lt $MVERSIONNUM ]; then	
									OK=1
									echo "---> Ok"
								else 
									OK=0		
									echo "---> FAIL"					
								fi			
							else 
								OK=0		
								echo "---> FAIL"					
							fi			
						fi
						#Analyse Marque
						if [ $OK = 1 ]; then								
							echo "  Test: MBRAND=$MBRAND"
							echo "  $BRAND = $MBRAND"
							if [ "$BRAND" = "$MBRAND" ]; then	
								OK=1
								echo "---> Ok"
							else 
								OK=0		
								echo "---> FAIL"					
							fi			
						fi
						#Analyse Modele
						if [ $OK = 1 ]; then
							echo "  Test: MMODEL=$MMODEL"
							echo "  $MODEL = $MMODEL"
							if [ "$MODEL" = "$MMODEL" ]; then	
								OK=1
								echo "---> Ok"
							else 
								OK=0		
								echo "---> FAIL"					
							fi			
						fi
						#Analyse Numero de série
						if [ $OK = 1 ]; then
							PRIO=0								
							echo "  Test: MSERIAL=$MSERIAL"
							if [ "$MSERIAL" = "ALL" ]; then	
								OK=1
								echo "---> Ok (ALL)"
							else 
								OK=0
								NBSER=`echo "$MSERIAL" | wc -w`
								#echo "$NBSER"
								for NSER in `seq $NBSER`
			    					do 
									#echo "$NSER"
									SER=`echo "$MSERIAL" | cut -d" " -f$NSER`
									#echo "$SER"
									if [ -z `echo "$SER" | grep "-"` ]; then #Test si Numéro de serie unique
										if [ $SERIAL -eq $SER ]; then	
											OK=1
											PRIO=1
											echo "---> Ok"
										fi
									else #Si gamme de Numéro de série
										SERMIN=`echo $SER | cut -d"-" -f1`
										SERMAX=`echo $SER | cut -d"-" -f2`
										#echo "$SERMIN <= $SERIAL <= $SERMAX"
										if [ $SERMIN -le $SERIAL ] && [ $SERIAL -le $SERMAX ]; then
											OK=1
											echo "---> Ok ($SERMIN <= $SERIAL <= $SERMAX)"
										fi
									fi 
								done
								if [ $OK = 0 ]; then
									echo "---> FAIL"
								fi								
							fi			
						fi							
						#Analyse du Link
						if [ $OK = 1 ]; then
							echo "  Test: MLINK=$MLINK"
							if [ -z "$MLINK" ]; then									 
								OK=0		
								echo "---> FAIL"					
							else
								OK=1		
								echo "---> Ok"
							fi		
						fi
						#Analyse du CS
						if [ $OK = 1 ]; then
							echo "  Test: MCS=$MCS"
							if [ -z "$MCS" ]; then									 
								OK=0		
								echo "---> FAIL"					
							else
								OK=1		
								echo "---> Ok"
							fi		
						fi
						#------------------------
						#Téléchagement de la MAJ
						#------------------------
						if [ $OK = 1 ]; then
							echo "Download $MLINK"			
							rm *.tar 2> /dev/null
							wget $MLINK #Téléchargement du fichier .tar
							FILETAR=`ls *.tar`
							if [ -n "$FILETAR" ]; then 
								#Vérification du CS
								MD5=`md5sum "$FILETAR" | cut -d" " -f1 | tr -d " " | tr "a-z" "A-Z"`
								MMD5=`echo $MCS | tr "a-z" "A-Z"`
								echo "  Check: MD5=$MD5"
								if [ "$MD5" = "$MMD5" ]; then									 
									OK=1		
									echo "---> Ok"					
								else
									OK=0		
									echo "---> FAIL"										
								fi
								#Préparation des répertoires de MAJ
								if [ $OK = 1 ]; then
									if [ "$PRIO" = "1" ]; then #Test si MAJ prioritaire (numéro de serie en dure)
										echo "$FILE has priority"
										mkdir prio 2> /dev/null
										mv *.tar prio/
									else #Si MAJ non prioritaire											
										echo "$FILE has no priority"
										mkdir nprio 2> /dev/null
										mv *.tar nprio/
									fi		
								fi									
							else #Le fichier .tar n'exite pas ou n'a pas pu être téléchargé
								echo "ERROR: $FILETAR not found"
							fi	
						else #Le fichier .cap ne concerne pas ce CAP1830
							echo "$FILE not for this equipement"
						fi							
					else  #Le fichier .cap n'exite pas ou n'a pas pu être téléchargé
						echo "ERROR: $FILE not found"
					fi	
				done #Fin de la boule de sur le fichier dans list.txt
		
				#------------------------------------------
				#Copie des répertoires de MAJ vers "update"
				#------------------------------------------					
				if [ -e "prio" ]; then #Test si MAJ prioritaire exite
					echo "New update in /home/CAPELEC/update/"
					ls prio/						
					cp prio/* /home/CAPELEC/DATA/update/
				else
					if [ -e "nprio" ]; then #Test si MAJ non prioritaire exite
						echo "New update in /home/CAPELEC/update/"
						ls nprio/							
						cp nprio/* /home/CAPELEC/DATA/update/							
					else
						echo "----> No update" 
					fi					
				fi
				#Netoyage du répertoire dltmp
				cd /home/CAPELEC/DATA/
				rm -r /home/CAPELEC/DATA/dltmp
				echo "***** end *****"
				
			else #Le fichier liste est vide
				echo "Download list blank"
				cd /home/CAPELEC/DATA/
				rm -r /home/CAPELEC/DATA/dltmp
			fi	
		else #Le fichier liste n'exite pas ou n'a pas pu être téléchargé
			echo "No list file"
			cd /home/CAPELEC/DATA/
			rm -r /home/CAPELEC/DATA/dltmp
		fi
			
		# Si la MAJ provient du bouton de l'interface WEB, on supprime le fichiier GOMAJ et on redemarre le systeme
		if [ -e "/home/CAPELEC/DATA/GOMAJ" ]; then
			rm "/home/CAPELEC/DATA/GOMAJ"
			echo "reboot..."
			reboot
		fi

		DONE=1;		
	else
		if [ $DONE = 0 ]; then
			echo "No time"
		fi
	fi	
	sleep 10
done
