#!/bin/sh
################################################################################################
## 
##  Nom: wget_list 
##
##  Licence: Creative Commons
##
##  Comportement: 
##    Permet de récupérer tous les liens listés dans un fichier en lancant plusieurs wget 
##     en parallèle.
##    Le fichier qui contient les liens est le premier paramètre passé au script.
##    Le dossier où enregistré tous les liens correspond au deuxième paramètre passé au script,
##     ou à un dossier prédéfini.
##
##
##
################################################################################################
##
##  Date de création: 03/06/2010
##
##  Auteur: Gardouille
##
##
##  Dernière modifications:
##  O3/O6/2010: - Création
# **********************************************************************************************
##  02/01/2010: - 
##              - 
# **********************************************************************************************
##
##
##
################################################################################################



# **********************************************************************************************
# 
# Variables globales
# 
# -----------------------------------------------------------
# Fichier qui contient la liste des liens à télécharger: "${1}"
list_url=${1}
# Répertoire où vont être stockés les fichiers téléchargés
save_dir=${2}

# Fin des variables globales
# -----------------------------------------------------------
# **********************************************************************************************


# **********************************************************************************************
# 
# Fonctions globales
# 
# -----------------------------------------------------------
# Divers echos ...
echoi() { echo " (ii) $*" >> "${log}" ; }
echok() { echo " (ok) $*" >> "${log}" ; }
echow() { echo " (!!) $*" >> "${log}" ; }
echnk() { echo " (EE) $*" >> "${log}" ; }

# Fonction d'aide
help()
{
  cat << EOF
  Description:
   Ce script permet de télécharger tous les liens stockés dans un fichier texte.

  Utilisation:
   wget_list FICHIER_URL DOSSIER_OU_SAUVEGARDER

  Arguments:
   FICHIER_URL:  Chemin du fichier qui contient la liste des liens à télécharger
   DOSSIER_OU_SAUVEGARDER: Dossier où vont être sauvegardés les fichiers téléchargés

  Options:
   -h, --help, help   Affiche cette aide.
EOF
}
# Fin des fonctions globales
# -----------------------------------------------------------
# **********************************************************************************************


# **********************************************************************************************
# 
# Programme principale
# 
# -----------------------------------------------------------

## Gestion des arguments:
# Si l'utilisateur veut afficher l'aide
if [ "${1}" = "-h" ] || [ "${1}" = "--help" ] || [ "${1}" = "help" ]
then
  # On appelle la fonction help
  help
  # Et on quitte le script
  exit 0
fi

# Vérification du nombre d'arguments:
case $# in
  2 ) # 2 arguments
    # Si le premier argument n'est pas un fichier
    if [ ! -f "${1}" ]
    then
      echo "!!ERREUR: mauvais premier argument!!"
      # On affiche l'aide
      help
      # Puis on quitte le script
      exit 1
    
    # Sinon, si le deuxième argument n'est pas un dossier
    elif [ ! -d "${2}" ]
    then
      echo "!!ERREUR: mauvais deuxième argument!!"
      # On affiche l'aide
      help
      # Et on termine le script
      exit 1
    
    # Sinon, c'est que tous les arguments sont corrects
    else
      echo "Analyse de ${1} ..."
    fi
    ;;
  0 ) # 0 argument
    echo "!!ERREUR: aucun argument présent!!"
    # On affiche l'aide
    help
    # Et on termine le script 
    exit 1
    ;;
  * ) # Plus d'un argument
    echo "ERREUR: Vous ne pouvez pas mettre plus de deux arguments"
    # On affiche l'aide
    help
    # Et on termine le script
    exit 1
    ;;
esac 
# Fin de la gestion des arguments

# On vérifie que le dossier où vont être sauvegardés les fichiers existe
[ ! -d "${save_dir}" ] && mkdir -p "${save_dir}"

# On se place dans le dossier où sauvegarder les fichiers télécharger
cd ${save_dir}

# On télécharge les liens contenu dans le fichier
#  Options:
#  -n 1: le nombre maximum de paramètre envoyé est de 1
#  -P 10: wget sera lancé 10 fois (en parallèle)
cat ${list_url} | xargs -n -P 10 wget

# On revient au dossier précédent
cd - > /dev/null



exit 0
# Fin de la boucle principale
# -----------------------------------------------------------
# **********************************************************************************************