#!/bin/bash

# Автоматический загрузчик из командной строки с возможностью добавления файлов в список
# и переносом в конец неудачных закачек.
# Переменная $list определяет файл со списком закачек (простые ссылки)
# Переменная $downdir определяет директорию загрузки
# Автор: Шашкин Николай г.Пенза

list="$1"
if [[ "$list" == "" ]]; then
    list=~/etc/wget_list.txt ;
fi
if [ ! -e "$list" ]; then
    echo "Не найден файл $list со списком загрузок - выходим !"
    exit 1
fi


downdir="$2"
if [[ "$downdir" == "" ]]; then
    downdir=/home/kolan/download ;
fi

if [ ! -d $downdir ]; then rm -f $downdir; mkdir $downdir; fi ;

while true; do

	unset fname

	if [[ `wc $list | cut -d ' ' -f2` == 0 ]]; then exit 0; fi;	# Список загрузок пуст
	{
	    while [[ "$fname" == "" ]]; do
		read fname ;	# Считываем первое имя в списке загрузок
	    done
	}<$list ;
	echo "#############################################################################################"
	echo "Downloading $fname"
	#cd "$downdir"; lftp -c pget -n 10 "$fname"	# бред, докачка не работает
	#cd "$downdir"; lftpget -c "$fname"	# бред, докачка не работает
	#aria2c -d "$downdir" -j 10 -s 10 -c "$fname"	# нормальная тулза
	wget --mirror -c -l5 --no-directories --timeout=30 --tries=3 --directory-prefix="$downdir" "$fname"
	#cd "$downdir"; axel -n 13 --search=4 -N -a "$fname"	# нормальная тулза
	result="$?"

	if [[ "$result" != "0" ]]; then sleep 2; fi	# Ожидаем 2 секунды, дабы избежать черезчур частых попыток и, вследствие чего, повышенной загрузки ЦП

	buf=`tail -n +2 $list | grep -v '$fname'`	# Вырезаем имя текущей загрузки из списка
	echo "$buf" > $list

	if [[ "$result" == "0" ]]; then
	    echo "$fname" >> "${list}-ready.txt"
	    echo "Загрузка успешно завершена!"

	else
	    echo "$fname" >> $list
	    echo "Загрузка не удалась - переносим её в конец списка."
	fi

done
