source: zero-center/trunk/fuentes/install-files/usr/bin/zero-lliurex-axel @ 5102

Last change on this file since 5102 was 5102, checked in by jrpelegrina, 3 years ago

Updated changelog. Fix some bugs in helpers

  • Property svn:executable set to *
File size: 7.7 KB
Line 
1#!/bin/bash
2export TEXTDOMAIN="zero-center"
3
4MSG_DONWLOADED=$(gettext "is downloaded in your directory")
5MSG_STARTING=$(gettext "Starting to download your file")
6MSG_CANCELLED=$(gettext "Your dowloading has been cancelled about your file")
7MSG_URL_NOT_EXISTS=$(gettext "Your URL don't exists, imposible to download the file")
8MSG_BUTTON_OK=$(gettext "OK")
9MSG_BUTTON_CANCEL=$(gettext "Cancel")
10MSG_DONWLOADING=$(gettext "Downloading")
11MSG_FROM=$(gettext "from")
12MSG_AT=$(gettext "at")
13MSG_IN=$(gettext "in")
14MSG_EXISTS_FILE=$(gettext "exists, you have to delete it before if you want to download it again")
15
16
17ZEN_BUTTON_OK="--ok-label=$MSG_BUTTON_OK"
18ZEN_BUTTON_CANCEL_OK="--cancel-label=$MSG_BUTTON_CANCEL $ZEN_BUTTON_OK"
19
20
21
22
23
24        #Esta funcion intentara bajar lo que sea sin saber si existe o no en la red
25        #Arg1: detecta si es "-u" o no.
26        #Arg2: URL del fichero a descargar
27        #Arg3: Donde se descargara.
28        function untester {
29                if [ "$1" == "-u" ]; then
30                        #OBTENGO EL NOMBRE DEL FICHERO A DESCARGAR
31                        if [ "$4" == "" ]; then
32                                NAME_FILE=$(echo $2 | rev | cut -d "/" -f1 | rev)
33                        else
34                                NAME_FILE="$4"
35                        fi
36                        mainwget "$2" "$3" "$NAME_FILE"
37                        exit 0
38                fi
39       
40        }
41
42        function check_parameters {
43                #Compruebo que el directorio existe
44                [ -d $2 ] || mkdir -p $2
45                #Compruebo que la direccion existe
46               
47                if  wget --spider -o /tmp/axel.log "$1"; then
48                        #OBTENGO EL NOMBRE DEL FICHERO A DESCARGAR
49                        NAME_FILE=$(echo $1 | rev | cut -d "/" -f1 | rev)
50                        #Si el fichero ya estaba descargado no puedo descargarlo de nuevo, antes he de borrarlo
51                        if [ -f "$2"/"$NAME_FILE" ] ; then
52                                echo "$2/$NAME_FILE exists, you have to delete it before if you want to download it again"
53                                #zenity --error --text "$2/$NAME_FILE exists, you have to delete it before if you want to download it again" $ZEN_BUTTON_OK
54                                zenity --error --text "$2/$NAME_FILE $MSG_EXISTS_FILE" $ZEN_BUTTON_OK
55
56                                exit 1
57                        else
58                        #Todo es correcto no existe el fichero y si existe la URL puedo descargarlo
59                        echo ""
60                        echo "URL exists, downloading......."
61                        fi
62                       
63                else
64                        echo ""
65                        echo "URL does not exist: $1"
66                        echo "Please check it."
67                        echo ""
68                        zenity --error --text "$MSG_URL_NOT_EXISTS" $ZEN_BUTTON_OK
69                        exit 1
70                fi
71               
72                if [ -f "/tmp/axel.log" ]; then
73                        rm /tmp/axel.log -rf
74                fi
75        }
76
77        function helper {
78                if [ $1 = "--help" ] || [ $1 = "-h" ]; then
79                        echo
80                        echo "----ZERO-DOWNLOADED-HELPER----"
81                        echo
82                        echo "zero-lliurex-axel <option> <arg1> <arg2> <arg3>"
83                        echo
84                        echo "-u option: you can untested if URL exsist, downloading forced"
85                        echo
86                        echo "arg1: Is the URL from you download the file"
87                        echo "arg2: Is the directory to save the file."
88                        echo "arg3: It is an optional argument, you can define the name for the untested downloads"
89                        echo
90                        echo "If arg2 is blank you can restore the download when you want, and the directory to save it, it will be the actually."
91                        echo "--------------------------------------------"
92                        echo
93                        echo "example: zero-lliurex-axel http://sourceforge.net/projects/arasuite/files/arasuite_unix_2.1.sh /tmp/borrame"
94                        echo
95                        exit 1
96                fi                     
97        }
98
99
100        function main {
101               
102                #Creamos un fichero que nos servirá de ayuda para escribir y leer el tanto por cien del fichero descargado
103                touch /tmp/axel.log
104                #En segundo plano realizaremos la descaraga del fichero almacenando su salida en nuestro log, eliminando ést al termianr la descarga
105                (axel -o "$2" "$1" > /tmp/axel.log; if [ -f "/tmp/axel.log" ]; then rm /tmp/axel.log; fi) &
106
107                #Mientras que el fichero de ayuda existe es que estamos descargando
108                #Cuando y ano exista saldremos del while
109                rc=0
110                        while [ -f  "/tmp/axel.log" ]; do
111                                sleep .3
112                                #En la variable PERCENT almacenamos el tanto por cien que llevamos de descarga
113                                #accediento a la ultima linea escrita en el fichero de ayuda y seleccionando solo el dato que necesitamos.
114                                PERCENT=$( tail -1 /tmp/axel.log  2>/dev/null  | grep % | sed 's/[^0-9.]*\([0-9.]*\).*/\1/' )
115                                #Hacemos echo de los datos que necesita el zenity
116                                #echo "Downloading $3 in $2 ...................$PERCENT%"
117                                echo "#$MSG_DONWLOADING $3 $MSG_IN $2 ...................$PERCENT%"
118
119                                echo "$PERCENT"
120                                #por ultimo entubamos la salida al zenity progress para que nos muestre el resultado en pantalla
121                        done | zenity --progress percentage=0 --auto-close --width 550 --title="Zero-Downloader-Helper" $ZEN_BUTTON_CANCEL_OK  > /dev/null 2>&1  || rc=1
122                       
123                        #Si se presiono cancel en la descarga matamos los procesos para finiquitarla
124                       
125                        if [ ${rc} -eq 1 ] ; then
126                               
127                                #Borramos el axel.log
128                                if [ -f "/tmp/axel.log" ]; then
129                                        rm /tmp/axel.log -rf
130                                fi
131                                #CREAMOS UNA LISTA CON LOS PID NECESARIOS Y LOS FINALIZAMOS
132                                LISTA=( $( ps -aux | grep axel | grep $1 | grep -v zero | awk '{print $2}') )
133                                #echo "The package list is....."
134                                #Comento el echo que muestra la lista
135                                #echo ${LISTA[@]}
136                                        for i in "${LISTA[@]}"; do
137                                                #echo "You cancel zero-lliurex-axel process with PID $i"
138                                                kill $i > /dev/null 2>&1
139                                        done
140                        rm $2/$NAME_FILE*
141                        notify-send -t 5000 -u normal -i /usr/share/icons/lliurex-neu/scalable/apps/zero-center.svg "Zero-Downloader-Helper" "$MSG_CANCELLED $NAME_FILE"
142                        echo "Your downloading file $1 has been cancelled"
143                        echo ""
144                        exit 1
145                        fi
146                notify-send -t 5000 -u normal -i /usr/share/icons/lliurex-neu/scalable/apps/zero-center.svg "Zero-Downloader-Helper" "$NAME_FILE $MSG_DONWLOADED $2"
147                echo "File $1 is downloaded in $2"
148        }
149       
150       
151       
152        function mainwget {
153                #Arg1: La URL del fichero a descargar
154                #Arg2: PATH de descarga del fichero
155                #Arg3: Nombre del fichero una vez descargado.
156                       
157                #Me aseguro que el nombre del fichero a descargar no es muy largo
158                NAME=$(echo "$3" | cut -c1-35)
159               
160                #variable que nos indica que se cancela o no la descarga del proceso
161                rc=0
162               
163                #intruccion de descarga del fichero:           
164                # wget outputs progress messages that look like this:
165                #      0K .......... .......... .......... .......... ..........  0%  823K 40s
166                # This function replaces each such line with the pair of lines
167                # 0%
168                # # Downloading... 823K (40s)
169                # It uses minimal buffering, so each line is output immediately
170                # and the user can watch progress as it happens.
171                # Old instruction:
172                #( wget -O "$2"/"$3" "$1" 2>&1 | grep --line-buffered -o "[0-9]*%" | sed  -u -e 's/.* \([0-9]\+%\)\ \+\([0-9.]\+.\) \(.*\)/\1\n# Downloaded \1\ from "'$NAME'"  at \2\/s, ETA \3/' | zenity  --progress percentage=0 --auto-close --auto-kill --width 600 --title="Zero-Downloader-Helper" > /dev/null 2>&1  )|| rc=1
173                ( wget -O "$2"/"$3" "$1" 2>&1 |  sed -u 's/.*\ \([0-9]\+\)%\ \+\(.*\)$/\1\n'#$MSG_DONWLOADING' \1\% '$MSG_FROM' "'$NAME'" '$MSG_AT' \2/' | zenity  --progress percentage=0 --auto-close --auto-kill --width 600 --title="Zero-Downloader-Helper" --text="$MSG_STARTING '$NAME'........." > /dev/null 2>&1  )|| rc=1
174
175                #Esta parte cancela el proceso del wget si se cancela la descarga en el zenity.
176               
177                        if [ ${rc} -eq 1 ] ; then
178                               
179                                #CREAMOS UNA LISTA CON LOS PID NECESARIOS Y LOS FINALIZAMOS
180                                LISTA=( $( ps -aux | grep wget | grep $1 |  awk '{print $2}') )
181                                #echo "The package list is....."
182                                #Comento el echo que muestra la lista
183                                #echo ${LISTA[@]}
184                                        for i in "${LISTA[@]}"; do
185                                                #echo "You cancel zero-lliurex-axel process with PID $i"
186                                                kill $i > /dev/null 2>&1
187                                               
188                                        done
189                        rm "$2"/"$3"*
190                        notify-send -t 5000 -u normal -i /usr/share/icons/lliurex-neu/scalable/apps/zero-center.svg "Zero-Downloader-Helper" "$MSG_CANCELLED $1"
191                        echo "Your downloading file $1 has been cancelled"
192                        echo ""
193                        exit 1
194                        fi
195                notify-send -t 5000 -u normal -i /usr/share/icons/lliurex-neu/scalable/apps/zero-center.svg "Zero-Downloader-Helper" "$1 $MSG_DONWLOADED $2"
196                echo "File $3 is downloaded in $2"
197        }
198
199helper "$1"
200untester "$1" "$2" "$3" "$4"
201check_parameters "$1" "$2"
202main "$1" "$2" "$NAME_FILE"
203
204exit 0
205
Note: See TracBrowser for help on using the repository browser.