#!/bin/bash
# Scirpt de ejemplo para restaurar una imagen.
# (puede usarse como base para el programa de restauración de imágenes usado por OpenGNSys Admin).

TIME1=$SECONDS
PROG="$(basename $0)"
if [ $# -lt 4 ]; then
    ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $PROG REPO|CACHE imagen ndisco nparticion [ UNICAST|MULTICAST|TORRENT ] [opciones protocolo]"
    exit $?
fi

# Procesar parámetros de entrada
IMGTYPE="img"
IMGFILE=$(ogGetPath "$1" "$2.$IMGTYPE")
PROTO=${5:-"UNICAST"}
if [ "$1" == "CACHE" -o "$1" == "cache" ]; then
    IMGDIR=$(ogGetParentPath "$1" "$2")
    # Si no existe el directorio de la imagen, crearlo.
    if [ -z "$IMGDIR" ]; then
        echo "[5] Creando directorio de imagen \"$1, ${2%/*}\"."
        ogMakeDir "$1" "${2%/*}" || ogRaiseError $OG_ERR_NOTFOUND "$1, ${2%/*}" || exit $?
    fi
    IMGDIR=$(ogGetParentPath "$1" "$2") || ogRaiseError $OG_ERR_NOTFOUND "$1, ${2%/*}" || exit $?
    # Procesar protocolos de transferencia.
    case "$PROTO" in
        UNICAST|unicast)
            # Copiar fichero del repositorio al caché local.
            #IMGTYPE=$(ogGetImageType "repo" "$2")
            IMGFILE=$(ogGetPath "cache" "$2.$IMGTYPE")
            if [ -z "$IMGFILE" ] || [ $(ogIsNewerFile "repo" "$2.$IMGTYPE" "$IMGFILE") ]; then
                echo "[10] Copiando imagen \"$2\" del repositorio a caché local"
                ogCopyFile "repo" "$2.$IMGTYPE" "$IMGDIR"
            fi
            # Comprobar si existe el fichero en caché y no en el repositorio.
            if [ -z "$IMGFILE" ]; then
                #IMGTYPE=$(ogGetImageType "cache" "$2")
                IMGFILE=$(ogGetPath "cache" "$2.$IMGTYPE")
                if [ -z "$IMGFILE" ]; then
                    ogRaiseError $OG_ERR_NOTFOUND "cache, $2.$IMGTYPE"
                    exit $?
                fi
            fi
            ;;
        MULTICAST|multicast)
            if [ -z "$IMGFILE" ]; then
            	echo "[10] Copiando imagen multicast \"$2\" del repositorio a caché local"
				#IMGTYPE=$(ogGetImageType "repo" "$2")
            	PORTBASE=`echo $6 | cut -f1 -d:`
      		echo "ogMcastReceiverFile SOURCE:$PORTBASE TARGET:CACHE $2.$IMGTYPE" 
      		ogMcastReceiverFile "$PORTBASE" "CACHE" "$2.$IMGTYPE" || exit $?
      		IMGFILE=$(ogGetPath "cache" "$2.$IMGTYPE")
            fi
            ;;
        TORRENT|torrent)
		echo "[9] copiando el fichero torrent Unicast \"$2\" del repositorio a caché local"
		#IMGTYPE=$(ogGetImageType "repo" "$2")
            	ogCopyFile "repo" "$2.$IMGTYPE.torrent" "$IMGDIR" || exit $?
   		echo "[10] descargando imagen torrent($6) \"$2\" del repositorio a caché local"
     		ogTorrentStart "CACHE" "$2.$IMGTYPE.torrent" "peer:60" || exit $?        		
     		IMGFILE=$(ogGetPath "cache" "$2.$IMGTYPE")            
            ;;
        *)  # Protocolo desconocido.
            ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $PROG REPO|CACHE imagen ndisco nparticion [ UNICAST|MULTICAST|TORRENT opciones ]"
            exit $?
    esac
fi
if [ -z "$IMGFILE" ]; then
    ogRaiseError $OG_ERR_NOTFOUND "$1, $2"
    exit $?
fi
PART=$(ogDiskToDev "$3" "$4") || exit $?

# Restaurar la imagen.
echo "[40] Restaurar imagen en $PART"
ogRestoreImage "$@" || exit $?
# Restaurar tamaño.
echo "[80] Extender sistema de archivos."
ogExtendFs $3 $4
# Llamar al script de post-configuración del sistema operativo.
echo "[90] Post-configuracion de aranque del sistema."
configureOs $3 $4

TIME=$[SECONDS-TIME1]
echo "[100] Duracion de la operacion $[TIME/60]m $[TIME%60]s"

